OSDN Git Service

[バックアップ]NyARToolkit for Java
authornyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Tue, 19 May 2009 10:26:45 +0000 (10:26 +0000)
committernyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Tue, 19 May 2009 10:26:45 +0000 (10:26 +0000)
SingleARMarkerProcesser
クラスの閾値探索を間引きするように設定。
NyARRasterThresholdAnalyzer_SlidePTile
コード展開による高速化

readme.ja.txt
src/jp/nyatla/nyartoolkit/core2/rasteranalyzer/threshold/NyARRasterThresholdAnalyzer_SlidePTile.java
src/jp/nyatla/nyartoolkit/processor/SingleNyIdMarkerProcesser.java

index a39ec7d..3a3262b 100644 (file)
@@ -1,26 +1,22 @@
 ARToolKit Java class library NyARToolkit.\r
 Copyright (C)2008 R.Iizuka\r
 \r
-version 2.2.0\r
+version 2.3.0\r
 \r
 http://nyatla.jp/nyartoolkit/\r
 airmail(at)ebony.plala.or.jp\r
+wm(at)nyatla.jp\r
 --------------------------------------------------\r
 \r
 \r
 \r
 \r
-・NyARToolkit/2.2\r
+・NyARToolkit/2.3\r
 \r
 NyARToolkitは、Pure Javaで実装したARToolKitクラスライブラリです。\r
 \r
 ARToolKit 2.72.1をベースに構築されています。\r
 \r
-NyARToolkit/2.0系はNyARToolkit/1.xと比較して、処理速度と可読性、\r
-モジュールの分離性が向上しています。\r
-\r
-\r
-\r
 J2SEでのみ動作を確認しました。\r
 J2MEやMIDP2.0にはそのうち対応します。\r
 \r
@@ -44,6 +40,8 @@ http://www.hitl.washington.edu/artoolkit/
 \r
  -取り扱えるマーカー個数の最大値が可変です。\r
 \r
+  -Idマーカシステム(NyId)が利用できます。(Version/2.3.0より)\r
+\r
 \r
 \r
 \r
@@ -135,30 +133,33 @@ NyARToolkit.sample.jogl
  JOGL/JMFを使ったサンプルプログラムがあります。\r
 \r
   -jp.nyatla.nyartoolkit.jogl.sample.JavaSimpleLite\r
-   単一のマーカーを認識するARToolkitのsimpleLite相当のサンプルです。\r
+   単一のARToolKit用マーカーを認識するARToolkitのsimpleLite相当のサンプルです。\r
   -jp.nyatla.nyartoolkit.jogl.sample.JavaSimpleLite2\r
-   複数のマーカーを認識するサンプルです。~100個程度のマーカーを同時に\r
-   認識します。\r
+   複数のARToolKit用マーカーを認識するサンプルです。1~100個程度のマーカーを\r
+   同時に認識します。\r
+  -jp.nyatla.nyartoolkit.jogl.sample.SingleNyIdMarker\r
+   単一のNyIdマーカを認識するためのサンプルです。アプリケーションフレームワーク\r
+   SingleNyIdMarkerProcesserのリファレンス実装です。\r
 \r
 \r
 NyARToolkit.sample.java3d\r
  JOGL/JMFを使ったサンプルプログラムです。\r
  \r
   -jp.nyatla.nyartoolkit.java3d.sample\r
-  simpleLiteをJava3Dで動かすサンプルがあります。\r
+   simpleLiteをJava3Dで動かすサンプルがあります。\r
 \r
 NyARToolkit.sample.jmf\r
   JMFを使ったサンプルプログラムです。\r
 \r
   -jp.nyatla..nyartoolkit.jmf.sample\r
- JMFでキャプチャした画像をNyARToolkitで処理するサンプルプログラムです。\r
+  JMFでキャプチャした画像をNyARToolkitで処理するサンプルプログラムです。\r
  \r
 \r
 NyARToolkit.sample.qt\r
  Quicktime for Javaを使ったサンプルプログラムです。\r
 \r
  -jp.nyatla.nyartoolkit.qt.sample\r
- QuickTimeでキャプチャした画像をNyARToolkitで処理するサンプルプログラムです。\r
+  QuickTimeでキャプチャした画像をNyARToolkitで処理するサンプルプログラムです。\r
  \r
 \r
 \r
@@ -173,8 +174,21 @@ NyARToolkit.sample.qt
 \r
 \r
 ・ライセンス\r
-GPLv2以降です。詳しくはLICENCE.txtをみてください。\r
-ソースコード毎のライセンスは、各ソースファイルを参照してください。\r
+\r
+NyARToolkitは、商用ライセンスとGPLv2以降のデュアルライセンスを採用しています。\r
+\r
+GPLについては、LICENCE.txtをお読みください。\r
+\r
+商用ライセンスについては、ARToolWorks社に管理を委託しておりますので、\r
+下記URLを参考に、ARToolWorks社へお問い合わせください。\r
+http://nyatla.jp/nyartoolkit/wiki/index.php?Licence\r
+\r
+\r
+ライセンスに関する日本語でのお問い合わせについては、下記URLの連絡先にて受け付けています。\r
+http://nyatla.jp/nyartoolkit/wiki/index.php?PressRelease%2F20090407%20forward%20order%20email%20service\r
+\r
+\r
+ソースコード毎のライセンスについては、ソースコード先頭の署名をご確認ください。\r
 \r
 \r
 \r
index c583092..1e5114a 100644 (file)
@@ -45,40 +45,79 @@ import jp.nyatla.nyartoolkit.core.types.*;
 public class NyARRasterThresholdAnalyzer_SlidePTile implements INyARRasterThresholdAnalyzer\r
 {\r
        interface ICreateHistgramImpl{\r
-               public void createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram);\r
+               public int createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram);\r
        }\r
        /**\r
         * Glayscale(MAX256)のヒストグラム計算クラス\r
         */\r
        final class CreateHistgramImpl_INT1D_GLAY_8 implements ICreateHistgramImpl\r
        {\r
-               public void createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram)\r
+               public int _v_interval;\r
+               public CreateHistgramImpl_INT1D_GLAY_8(int i_v_interval)\r
                {\r
+                       this._v_interval=i_v_interval;\r
+                       return;\r
+               }\r
+               public int createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram)\r
+               {\r
+                       int sum=0;\r
                        final int[] input=(int[]) i_reader.getBuffer();\r
-                       int pt = 0;\r
-                       for (int y = i_size.h-1; y >=0 ; y--) {\r
+                       for (int y = i_size.h-1; y >=0 ; y-=this._v_interval){\r
+                               sum+=i_size.w;\r
+                               int pt=y*i_size.w;\r
                                for (int x = i_size.w-1; x >=0; x--) {\r
                                        o_histgram[input[pt]]++;\r
                                        pt++;\r
                                }\r
                        }\r
-                       return;\r
+                       return sum;\r
                }\r
        }\r
        final class CreateHistgramImpl_BYTE1D_RGB_24 implements ICreateHistgramImpl\r
        {\r
-               public void createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram)\r
+               private int _v_interval;\r
+               public CreateHistgramImpl_BYTE1D_RGB_24(int i_v_interval)\r
+               {\r
+                       this._v_interval=i_v_interval;\r
+                       return;\r
+               }\r
+               public int createHistgramImpl(INyARBufferReader i_reader,NyARIntSize i_size, int[] o_histgram)\r
                {\r
                        final byte[] input=(byte[]) i_reader.getBuffer();\r
-                       int pt = 0;\r
-                       for (int y = i_size.h-1; y >=0 ; y--) {\r
-                               for (int x = i_size.w-1; x >=0; x--) {\r
-                                       final int v=((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3;\r
+                       final int pix_count=i_size.w;\r
+                       final int pix_mod_part=pix_count-(pix_count%8);\r
+                       int sum=0;\r
+                       for (int y = i_size.h-1; y >=0 ; y-=this._v_interval) {\r
+                               sum+=i_size.w;\r
+                               int pt=y*i_size.w*3;\r
+                               int x,v;\r
+                               for (x = pix_count-1; x >=pix_mod_part; x--) {\r
+                                       v=((input[pt+0]& 0xff)+(input[pt+1]& 0xff)+(input[pt+2]& 0xff))/3;\r
                                        o_histgram[v]++;\r
                                        pt+=3;\r
                                }\r
+                               //タイリング\r
+                               for (;x>=0;x-=8){\r
+                                       v=((input[pt+ 0]& 0xff)+(input[pt+ 1]& 0xff)+(input[pt+ 2]& 0xff))/3;\r
+                                       o_histgram[v]++;\r
+                                       v=((input[pt+ 3]& 0xff)+(input[pt+ 4]& 0xff)+(input[pt+ 5]& 0xff))/3;\r
+                                       o_histgram[v]++;\r
+                                       v=((input[pt+ 6]& 0xff)+(input[pt+ 7]& 0xff)+(input[pt+ 8]& 0xff))/3;\r
+                                       o_histgram[v]++;\r
+                                       v=((input[pt+ 9]& 0xff)+(input[pt+10]& 0xff)+(input[pt+11]& 0xff))/3;\r
+                                       o_histgram[v]++;\r
+                                       v=((input[pt+12]& 0xff)+(input[pt+13]& 0xff)+(input[pt+14]& 0xff))/3;\r
+                                       o_histgram[v]++;\r
+                                       v=((input[pt+15]& 0xff)+(input[pt+16]& 0xff)+(input[pt+17]& 0xff))/3;\r
+                                       o_histgram[v]++;\r
+                                       v=((input[pt+18]& 0xff)+(input[pt+19]& 0xff)+(input[pt+20]& 0xff))/3;\r
+                                       o_histgram[v]++;\r
+                                       v=((input[pt+21]& 0xff)+(input[pt+22]& 0xff)+(input[pt+23]& 0xff))/3;\r
+                                       o_histgram[v]++;\r
+                                       pt+=3*8;\r
+                               }\r
                        }\r
-                       return;                 \r
+                       return sum;             \r
                }\r
        }\r
        private int _persentage;\r
@@ -90,17 +129,17 @@ public class NyARRasterThresholdAnalyzer_SlidePTile implements INyARRasterThresh
         * 0<=50であること。白/黒マーカーの場合は10~20を推奨 正の場合、黒点を基準にします。 負の場合、白点を基準にします。\r
         * (CMOSカメラの場合、基準点は白点の方が良い)\r
         */\r
-       public NyARRasterThresholdAnalyzer_SlidePTile(int i_persentage,int i_raster_format) throws NyARException\r
+       public NyARRasterThresholdAnalyzer_SlidePTile(int i_persentage,int i_raster_format,int i_vertical_interval) throws NyARException\r
        {\r
                assert (0 <= i_persentage && i_persentage <= 50);\r
                this._persentage = i_persentage;\r
                switch(i_raster_format){\r
                case INyARBufferReader.BUFFERFORMAT_BYTE1D_B8G8R8_24:\r
                case INyARBufferReader.BUFFERFORMAT_BYTE1D_R8G8B8_24:\r
-                       this._histgram=new CreateHistgramImpl_BYTE1D_RGB_24();\r
+                       this._histgram=new CreateHistgramImpl_BYTE1D_RGB_24(i_vertical_interval);\r
                        break;\r
                case INyARBufferReader.BUFFERFORMAT_INT1D_GLAY_8:\r
-                       this._histgram=new CreateHistgramImpl_BYTE1D_RGB_24();\r
+                       this._histgram=new CreateHistgramImpl_INT1D_GLAY_8(i_vertical_interval);\r
                        break;\r
                default:\r
                        throw new NyARException();\r
@@ -123,10 +162,10 @@ public class NyARRasterThresholdAnalyzer_SlidePTile implements INyARRasterThresh
                for (int i = 0; i < 256; i++) {\r
                        o_histgram[i] = 0;\r
                }\r
-               this._histgram.createHistgramImpl(i_reader, i_size, o_histgram);\r
+               int sum_of_pixel=this._histgram.createHistgramImpl(i_reader, i_size, o_histgram);\r
 \r
                // 閾値ピクセル数確定\r
-               final int th_pixcels = i_size.w * i_size.h * this._persentage / 100;\r
+               final int th_pixcels = sum_of_pixel * this._persentage / 100;\r
                int th_wk;\r
                int th_w, th_b;\r
 \r
index 87ae5fd..465a3dd 100644 (file)
@@ -31,7 +31,6 @@ import jp.nyatla.nyartoolkit.core.raster.*;
 import jp.nyatla.nyartoolkit.core.raster.rgb.*;\r
 import jp.nyatla.nyartoolkit.core.transmat.*;\r
 import jp.nyatla.nyartoolkit.core.rasterfilter.rgb2bin.*;\r
-import jp.nyatla.nyartoolkit.core.rasterreader.INyARBufferReader;\r
 import jp.nyatla.nyartoolkit.core.types.*;\r
 import jp.nyatla.nyartoolkit.nyidmarker.*;\r
 import jp.nyatla.nyartoolkit.nyidmarker.data.*;\r
@@ -83,7 +82,7 @@ public abstract class SingleNyIdMarkerProcesser
                this._is_active=false;\r
                this._data_temp=i_encoder.createDataInstance();\r
                this._data_current=i_encoder.createDataInstance();\r
-               this._threshold_detect=new NyARRasterThresholdAnalyzer_SlidePTile(15,i_raster_format);\r
+               this._threshold_detect=new NyARRasterThresholdAnalyzer_SlidePTile(15,i_raster_format,4);\r
                return;\r
        }\r
 \r