OSDN Git Service

[更新]NyARToolkit/nyatlaブランチ
authornyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Sun, 14 Sep 2008 03:15:08 +0000 (03:15 +0000)
committernyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Sun, 14 Sep 2008 03:15:08 +0000 (03:15 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/nyartoolkit/NyARToolkit@148 7cac0a50-4618-4814-88d0-24b83990f816

15 files changed:
branches/nyatla/src.utils/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfNyARRaster_RGB.java
branches/nyatla/src.utils/qt/jp/nyatla/nyartoolkit/qt/utils/QtNyARRaster_RGB.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/NyARLabelingImage.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/NyARLabelingLabelStack.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/NyARLabeling_ARToolKit.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/raster/NyARBinRaster.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/raster/NyARGlayscaleRaster.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/raster/NyARRaster_BasicClass.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/raster/rgb/NyARRgbRaster_BGRA.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/raster/rgb/NyARRgbRaster_BasicClass.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/raster/rgb/NyARRgbRaster_Blank.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/raster/rgb/NyARRgbRaster_RGB.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/transmat/optimize/NyARRotTransOptimize.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/types/NyARIntSize.java
branches/nyatla/src/jp/nyatla/nyartoolkit/sample/RawFileTest.java

index 9a788f6..efdf0ef 100644 (file)
@@ -137,6 +137,7 @@ public class JmfNyARRaster_RGB extends NyARRgbRaster_BasicClass
         */\r
        public JmfNyARRaster_RGB(NyARIntSize i_size)\r
        {\r
+               super(new NyARIntSize(i_size.w,i_size.w));\r
                this._size.w = i_size.w;\r
                this._size.h = i_size.h;\r
                this._ref_buf = null;\r
@@ -144,8 +145,7 @@ public class JmfNyARRaster_RGB extends NyARRgbRaster_BasicClass
        }\r
        public JmfNyARRaster_RGB(int i_width,int i_height)\r
        {\r
-               this._size.w = i_width;\r
-               this._size.h = i_height;\r
+               super(new NyARIntSize(i_width,i_height));\r
                this._ref_buf = null;\r
                this._reader = new Reader(this._size);\r
        }       \r
index 005a0d0..3c96abd 100644 (file)
@@ -84,8 +84,7 @@ public class QtNyARRaster_RGB extends NyARRgbRaster_BasicClass
         */\r
        public QtNyARRaster_RGB(int i_width, int i_height)\r
        {\r
-               this._size.w = i_width;\r
-               this._size.h = i_height;\r
+               super(new NyARIntSize(i_width,i_height));\r
                this._ref_buf = null;\r
                this._reader = new PixcelReader(this._size);\r
                _raster = WritableRaster.createInterleavedRaster(DataBuffer.TYPE_BYTE, i_width, i_height, i_width * 3, 3, new int[] { 0, 1, 2 }, null);\r
index d045c3d..78b1d44 100644 (file)
@@ -35,6 +35,7 @@ import jp.nyatla.nyartoolkit.NyARException;
 import jp.nyatla.nyartoolkit.core.raster.*;\r
 import jp.nyatla.nyartoolkit.core.rasterreader.INyARBufferReader;\r
 import jp.nyatla.nyartoolkit.core.rasterreader.NyARBufferReader;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
 \r
 /**\r
  *\r
@@ -47,12 +48,10 @@ public class NyARLabelingImage extends NyARRaster_BasicClass implements INyARLab
        protected NyARLabelingLabelStack _label_list;\r
        protected int[] _index_table;\r
        protected boolean _is_index_table_enable;\r
-\r
        public NyARLabelingImage(int i_width, int i_height)\r
        {\r
+               super(new NyARIntSize(i_width,i_height));\r
                this._ref_buf =new int[i_height][i_width];\r
-               this._size.w = i_width;\r
-               this._size.h = i_height;\r
                this._label_list = new NyARLabelingLabelStack(MAX_LABELS);\r
                this._index_table=new int[MAX_LABELS];\r
                this._is_index_table_enable=false;\r
index 5440cb5..6dc2a67 100644 (file)
@@ -40,6 +40,10 @@ import jp.nyatla.utils.*;
  */\r
 public class NyARLabelingLabelStack extends NyObjectStack\r
 {\r
+       protected NyARLabelingLabelStack(NyARLabelingLabel[] i_label_array)\r
+       {\r
+               super(i_label_array);           \r
+       }\r
        public NyARLabelingLabelStack(int i_max_array_size)\r
        {\r
                super(new NyARLabelingLabel[i_max_array_size]);\r
index ec3e36e..c5a1c98 100644 (file)
@@ -296,53 +296,7 @@ public class NyARLabeling_ARToolKit implements INyARLabeling
                }\r
                return;\r
        }\r
-/*     構造が変わるから、ハイスピード版実装するときに使う。\r
-       private void updateLabelStackLarge(NyARLabelingLabelStack i_stack,int[] i_lindex,NyARIntSize i_size,int[][] i_work,int i_work_max,int i_number_of_label) throws NyARException\r
-       {\r
-               // ラベルバッファを予約\r
-               i_stack.reserv(i_number_of_label);\r
-               // エリアと重心、クリップ領域を計算\r
-               final NyARLabelingLabel[] labels = i_stack.getArray();\r
-               for (int i = 0; i < i_number_of_label; i++) {\r
-                       final NyARLabelingLabel label_pt =labels[i];\r
-                       label_pt.id =i+1;\r
-                       label_pt.area = 0;\r
-                       label_pt.pos_x = 0;\r
-                       label_pt.pos_y = 0;\r
-                       label_pt.clip_l = i_size.w;// wclip[i*4+0] = lxsize;\r
-                       label_pt.clip_r = 0;// wclip[i*4+0] = lxsize;\r
-                       label_pt.clip_t = i_size.h;// wclip[i*4+2] = lysize;\r
-                       label_pt.clip_b = 0;// wclip[i*4+3] = 0;\r
-               }\r
-\r
-               for (int i = 0; i < i_work_max; i++) {\r
-                       final NyARLabelingLabel label_pt = labels[i_lindex[i] - 1];\r
-                       final int[] work2_pt = i_work[i];\r
-                       label_pt.area += work2_pt[0];\r
-                       label_pt.pos_x += work2_pt[1];\r
-                       label_pt.pos_y += work2_pt[2];\r
-                       if (label_pt.clip_l > work2_pt[3]) {\r
-                               label_pt.clip_l = work2_pt[3];\r
-                       }\r
-                       if (label_pt.clip_r < work2_pt[4]) {\r
-                               label_pt.clip_r = work2_pt[4];\r
-                       }\r
-                       if (label_pt.clip_t > work2_pt[5]) {\r
-                               label_pt.clip_t = work2_pt[5];\r
-                       }\r
-                       if (label_pt.clip_b < work2_pt[6]) {\r
-                               label_pt.clip_b = work2_pt[6];\r
-                       }\r
-               }\r
 \r
-               for (int i = 0; i < i_number_of_label; i++) {// for(int i = 0; i < *label_num; i++ ) {\r
-                       final NyARLabelingLabel label_pt = labels[i];\r
-                       label_pt.pos_x /= label_pt.area;\r
-                       label_pt.pos_y /= label_pt.area;\r
-               }\r
-               return; \r
-       }\r
-       */\r
 }\r
 \r
 /**\r
@@ -354,8 +308,6 @@ final class NyARWorkHolder
 {\r
        private final static int ARRAY_APPEND_STEP = 256;\r
 \r
-       public final int[] work;\r
-\r
        public final int[][] work2;\r
 \r
        private int allocate_size;\r
@@ -368,7 +320,6 @@ final class NyARWorkHolder
        public NyARWorkHolder(int i_holder_size)\r
        {\r
                // ポインタだけははじめに確保しておく\r
-               this.work = new int[i_holder_size];\r
                this.work2 = new int[i_holder_size][];\r
                this.allocate_size = 0;\r
        }\r
@@ -385,13 +336,13 @@ final class NyARWorkHolder
                        return;\r
                }\r
                // 要求されたインデクスは範囲外\r
-               if (i_index >= this.work.length) {\r
+               if (i_index >= this.work2.length) {\r
                        throw new NyARException();\r
                }\r
                // 追加アロケート範囲を計算\r
                int range = i_index + ARRAY_APPEND_STEP;\r
-               if (range >= this.work.length) {\r
-                       range = this.work.length;\r
+               if (range >= this.work2.length) {\r
+                       range = this.work2.length;\r
                }\r
                // アロケート\r
                for (int i = this.allocate_size; i < range; i++) {\r
index 0ab7669..418017e 100644 (file)
@@ -32,6 +32,7 @@
 package jp.nyatla.nyartoolkit.core.raster;\r
 \r
 import jp.nyatla.nyartoolkit.core.rasterreader.*;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
 \r
 public final class NyARBinRaster extends NyARRaster_BasicClass\r
 {\r
@@ -40,9 +41,8 @@ public final class NyARBinRaster extends NyARRaster_BasicClass
 \r
        public NyARBinRaster(int i_width, int i_height)\r
        {\r
+               super(new NyARIntSize(i_width,i_height));\r
                this._ref_buf = new int[i_height][i_width];\r
-               this._size.w = i_width;\r
-               this._size.h = i_height;\r
                this._buffer_reader=new NyARBufferReader(this._ref_buf,INyARBufferReader.BUFFERFORMAT_INT2D_BIN_8);\r
        }\r
        public INyARBufferReader getBufferReader()\r
index 159eb82..b828df1 100644 (file)
@@ -33,6 +33,7 @@ package jp.nyatla.nyartoolkit.core.raster;
 \r
 import jp.nyatla.nyartoolkit.core.rasterreader.INyARBufferReader;\r
 import jp.nyatla.nyartoolkit.core.rasterreader.NyARBufferReader;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
 \r
 public final class NyARGlayscaleRaster extends NyARRaster_BasicClass\r
 {\r
@@ -42,9 +43,8 @@ public final class NyARGlayscaleRaster extends NyARRaster_BasicClass
        \r
        public NyARGlayscaleRaster(int i_width, int i_height)\r
        {\r
+               super(new NyARIntSize(i_width,i_height));\r
                this._ref_buf = new int[i_height][i_width];\r
-               this._size.w = i_width;\r
-               this._size.h = i_height;\r
                this._buffer_reader=new NyARBufferReader(this._ref_buf,INyARBufferReader.BUFFERFORMAT_INT2D_GLAY_8);\r
        }\r
        public INyARBufferReader getBufferReader()\r
index 7033e4d..095ee84 100644 (file)
@@ -35,7 +35,11 @@ import jp.nyatla.nyartoolkit.core.types.*;
 \r
 public abstract class NyARRaster_BasicClass implements INyARRaster\r
 {\r
-       final protected NyARIntSize _size = new NyARIntSize();\r
+       final protected NyARIntSize _size;\r
+       protected NyARRaster_BasicClass(final NyARIntSize i_size)\r
+       {\r
+               this._size= i_size;\r
+       }\r
 \r
        final public int getWidth()\r
        {\r
index db3d38b..0922cc9 100644 (file)
@@ -32,6 +32,7 @@
 package jp.nyatla.nyartoolkit.core.raster.rgb;\r
 \r
 import jp.nyatla.nyartoolkit.core.rasterreader.*;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
 \r
 public class NyARRgbRaster_BGRA extends NyARRgbRaster_BasicClass implements INyARRgbRaster\r
 {\r
@@ -79,9 +80,8 @@ public class NyARRgbRaster_BGRA extends NyARRgbRaster_BasicClass implements INyA
 \r
        private NyARRgbRaster_BGRA(byte[] i_buffer, int i_width, int i_height)\r
        {\r
+               super(new NyARIntSize(i_width,i_height));\r
                this._ref_buf = i_buffer;\r
-               this._size.w = i_width;\r
-               this._size.h = i_height;\r
                this._rgb_reader = new PixelReader(this);\r
                this._buffer_reader=new NyARBufferReader(i_buffer,INyARBufferReader.BUFFERFORMAT_BYTE1D_B8G8R8X8_32);\r
                return;\r
index 475cb80..5ef9a16 100644 (file)
@@ -34,6 +34,7 @@ package jp.nyatla.nyartoolkit.core.raster.rgb;
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.raster.NyARRaster_BasicClass;\r
 import jp.nyatla.nyartoolkit.core.rasterreader.INyARRgbPixelReader;\r
+import jp.nyatla.nyartoolkit.core.types.NyARIntSize;\r
 \r
 /**\r
  * NyARRasterインタフェイスの基本関数/メンバを実装したクラス\r
@@ -42,6 +43,10 @@ import jp.nyatla.nyartoolkit.core.rasterreader.INyARRgbPixelReader;
  */\r
 public abstract class NyARRgbRaster_BasicClass extends NyARRaster_BasicClass implements INyARRgbRaster\r
 {\r
+       protected NyARRgbRaster_BasicClass(final NyARIntSize i_size)\r
+       {\r
+               super(i_size);\r
+       }\r
        public INyARRgbPixelReader getRgbPixcelReader() throws NyARException\r
        {\r
                NyARException.notImplement();\r
index 5dc8072..466407e 100644 (file)
@@ -34,6 +34,7 @@ package jp.nyatla.nyartoolkit.core.raster.rgb;
 import jp.nyatla.nyartoolkit.core.rasterreader.INyARBufferReader;\r
 import jp.nyatla.nyartoolkit.core.rasterreader.INyARRgbPixelReader;\r
 import jp.nyatla.nyartoolkit.core.rasterreader.NyARBufferReader;\r
+import jp.nyatla.nyartoolkit.core.types.NyARIntSize;\r
 \r
 /*\r
  * 真っ黒の矩形を定義する。\r
@@ -66,8 +67,7 @@ public class NyARRgbRaster_Blank extends NyARRgbRaster_BasicClass
        \r
        public NyARRgbRaster_Blank(int i_width, int i_height)\r
        {\r
-               this._size.w = i_width;\r
-               this._size.h = i_height;\r
+               super(new NyARIntSize(i_width,i_height));\r
                this._reader = new PixelReader();\r
                this._buffer_reader=new NyARBufferReader(null,INyARBufferReader.BUFFERFORMAT_NULL_ALLZERO);\r
                return;\r
index 465b029..33d6918 100644 (file)
@@ -32,6 +32,7 @@
 package jp.nyatla.nyartoolkit.core.raster.rgb;\r
 \r
 import jp.nyatla.nyartoolkit.core.rasterreader.*;\r
+import jp.nyatla.nyartoolkit.core.types.NyARIntSize;\r
 \r
 public class NyARRgbRaster_RGB extends NyARRgbRaster_BasicClass\r
 {\r
@@ -47,9 +48,8 @@ public class NyARRgbRaster_RGB extends NyARRgbRaster_BasicClass
 \r
        private NyARRgbRaster_RGB(byte[] i_buffer, int i_width, int i_height)\r
        {\r
+               super(new NyARIntSize(i_width,i_height));\r
                this._ref_buf = i_buffer;\r
-               this._size.w = i_width;\r
-               this._size.h = i_height;\r
                this._reader = new NyARRgbPixelReader_RGB24(i_buffer, this._size);\r
                this._buffer_reader=new NyARBufferReader(i_buffer,INyARBufferReader.BUFFERFORMAT_BYTE1D_R8G8B8_24);\r
                return;\r
index ccf35a6..6587e79 100644 (file)
@@ -38,8 +38,12 @@ import jp.nyatla.nyartoolkit.core.transmat.fitveccalc.NyARFitVecCalculator;
 import jp.nyatla.nyartoolkit.core.transmat.rotmatrix.NyARRotMatrix;\r
 import jp.nyatla.nyartoolkit.core.types.NyARDoublePoint2d;\r
 import jp.nyatla.nyartoolkit.core.types.NyARDoublePoint3d;\r
-\r
-public class NyARRotTransOptimize\r
+/**\r
+ * 基本姿勢と実画像を一致するように、角度を微調整→平行移動量を再計算\r
+ * を繰り返して、変換行列を最適化する。\r
+ *\r
+ */\r
+public class NyARRotTransOptimize implements INyARRotTransOptimize\r
 {\r
        private final static int AR_GET_TRANS_MAT_MAX_LOOP_COUNT = 5;// #define AR_GET_TRANS_MAT_MAX_LOOP_COUNT 5\r
        private final static double AR_GET_TRANS_MAT_MAX_FIT_ERROR = 1.0;// #define AR_GET_TRANS_MAT_MAX_FIT_ERROR 1.0\r
index 4e81261..0dcb9d2 100644 (file)
@@ -38,6 +38,20 @@ public class NyARIntSize
        public int h;\r
 \r
        public int w;\r
+       public NyARIntSize()\r
+       {\r
+               this.w=0;\r
+               this.h=0;\r
+               return;\r
+               \r
+       }\r
+       \r
+       public NyARIntSize(int i_width,int i_height)\r
+       {\r
+               this.w=i_width;\r
+               this.h=i_height;\r
+               return;\r
+       }\r
 \r
        /**\r
         * サイズが同一であるかを確認する。\r
index 7618258..ee93b66 100644 (file)
@@ -50,8 +50,7 @@ public class RawFileTest
 {\r
        private final String code_file = "../Data/patt.hiro";\r
 \r
-//     private final String data_file = "../Data/320x240ABGR.raw";\r
-       private final String data_file = "../Data/320x240RGB.raw";\r
+       private final String data_file = "../Data/320x240ABGR.raw";\r
 \r
        private final String camera_file = "../Data/camera_para.dat";\r
 \r
@@ -65,7 +64,7 @@ public class RawFileTest
                // AR用カメラパラメタファイルをロード\r
                NyARParam ap = new NyARParam();\r
                ap.loadARParamFromFile(camera_file);\r
-               ap.changeScreenSize(640, 480);\r
+               ap.changeScreenSize(320, 240);\r
 \r
                // AR用のパターンコードを読み出し\r
                NyARCode code = new NyARCode(16, 16);\r
@@ -76,8 +75,7 @@ public class RawFileTest
                FileInputStream fs = new FileInputStream(data_file);\r
                byte[] buf = new byte[(int) f.length()];\r
                fs.read(buf);\r
-               INyARRgbRaster ra = NyARRgbRaster_RGB.wrap(buf, 640, 480);\r
-//             INyARRgbRaster ra = NyARRgbRaster_BGRA.wrap(buf, 320, 240);\r
+               INyARRgbRaster ra = NyARRgbRaster_BGRA.wrap(buf, 320, 240);\r
                // Blank_Raster ra=new Blank_Raster(320, 240);\r
 \r
                // 1パターンのみを追跡するクラスを作成\r
@@ -89,7 +87,7 @@ public class RawFileTest
 \r
                // マーカーを検出\r
                Date d2 = new Date();\r
-               for (int i = 0; i < 1000; i++) {\r
+               for (int i = 0; i < 10000; i++) {\r
                        // 変換行列を取得\r
                        ar.detectMarkerLite(ra, 110);\r
                        ar.getTransmationMatrix(result_mat);\r