OSDN Git Service

[更新]nyatlaブランチ
authornyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Tue, 19 Aug 2008 12:56:55 +0000 (12:56 +0000)
committernyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Tue, 19 Aug 2008 12:56:55 +0000 (12:56 +0000)
35 files changed:
sample/qt/jp/nyatla/nyartoolkit/qt/utils/QtNyARRaster_RGB.java
src.utils/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfNyARRaster_RGB.java
src.utils/qt/jp/digitalmuseum/capture/AbstractVideoCapture.class [deleted file]
src.utils/qt/jp/digitalmuseum/capture/VideoCaptureDummy.class [deleted file]
src.utils/qt/jp/digitalmuseum/capture/VideoCaptureJMF.class [deleted file]
src.utils/qt/jp/digitalmuseum/capture/VideoCaptureListener.class [deleted file]
src.utils/qt/jp/digitalmuseum/capture/VideoCaptureQT.class [deleted file]
src.utils/qt/jp/digitalmuseum/capture/VideoCaptureQTW.class [deleted file]
src.utils/qt/jp/nyatla/nyartoolkit/qt/utils/QtNyARRaster_RGB.java
src/jp/nyatla/nyartoolkit/core/NyARColorPatt.java
src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O1.java
src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O2.java
src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O3.java
src/jp/nyatla/nyartoolkit/core/NyARDetectMarker.java
src/jp/nyatla/nyartoolkit/core/NyARDetectSquare.java
src/jp/nyatla/nyartoolkit/core/NyARLabeling.java
src/jp/nyatla/nyartoolkit/core/NyARMarker.java
src/jp/nyatla/nyartoolkit/core/NyARSquare.java
src/jp/nyatla/nyartoolkit/core/NyARSquareList.java
src/jp/nyatla/nyartoolkit/core/labeling/INyLabeling.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/core/labeling/NyARLabel.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/core/labeling/NyARLabelList.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/core/labeling/NyLabelingImage.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/core/labeling/NyLabelingRaster.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/core/raster/INyARRaster.java [moved from src/jp/nyatla/nyartoolkit/core/raster/NyARRaster.java with 92% similarity]
src/jp/nyatla/nyartoolkit/core/raster/NyARRaster_BGRA.java
src/jp/nyatla/nyartoolkit/core/raster/NyARRaster_BasicClass.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/core/raster/NyARRaster_Blank.java
src/jp/nyatla/nyartoolkit/core/raster/NyARRaster_RGB.java
src/jp/nyatla/nyartoolkit/core/types/NySquare.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/core/types/TNyIntLine.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/core/types/TNyIntPoint.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/core/types/TNyIntSize.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/detector/NyARDetectMarker.java
src/jp/nyatla/nyartoolkit/detector/NyARSingleDetectMarker.java

index e735e29..023d8ab 100644 (file)
@@ -13,10 +13,10 @@ import java.awt.image.DataBuffer;
 import java.awt.image.WritableRaster;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
 \r
 \r
-public class QtNyARRaster_RGB implements NyARRaster\r
+public class QtNyARRaster_RGB implements INyARRaster\r
 {\r
     protected byte[] ref_buf;\r
     protected int width=0;\r
index 9e9dd9e..39490f3 100644 (file)
@@ -11,10 +11,10 @@ package jp.nyatla.nyartoolkit.jmf.utils;
 import javax.media.format.RGBFormat;\r
 import java.awt.Dimension;\r
 import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
 \r
 \r
-public class JmfNyARRaster_RGB implements NyARRaster\r
+public class JmfNyARRaster_RGB implements INyARRaster\r
 {\r
     public final static int PIXEL_ORDER_RGB=1;\r
     public final static int PIXEL_ORDER_BGR=2;\r
diff --git a/src.utils/qt/jp/digitalmuseum/capture/AbstractVideoCapture.class b/src.utils/qt/jp/digitalmuseum/capture/AbstractVideoCapture.class
deleted file mode 100644 (file)
index d093c20..0000000
Binary files a/src.utils/qt/jp/digitalmuseum/capture/AbstractVideoCapture.class and /dev/null differ
diff --git a/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureDummy.class b/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureDummy.class
deleted file mode 100644 (file)
index 983ad04..0000000
Binary files a/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureDummy.class and /dev/null differ
diff --git a/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureJMF.class b/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureJMF.class
deleted file mode 100644 (file)
index 774254a..0000000
Binary files a/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureJMF.class and /dev/null differ
diff --git a/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureListener.class b/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureListener.class
deleted file mode 100644 (file)
index 7e2fd5a..0000000
Binary files a/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureListener.class and /dev/null differ
diff --git a/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureQT.class b/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureQT.class
deleted file mode 100644 (file)
index 25da88e..0000000
Binary files a/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureQT.class and /dev/null differ
diff --git a/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureQTW.class b/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureQTW.class
deleted file mode 100644 (file)
index f1b4a29..0000000
Binary files a/src.utils/qt/jp/digitalmuseum/capture/VideoCaptureQTW.class and /dev/null differ
index e735e29..023d8ab 100644 (file)
@@ -13,10 +13,10 @@ import java.awt.image.DataBuffer;
 import java.awt.image.WritableRaster;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
 \r
 \r
-public class QtNyARRaster_RGB implements NyARRaster\r
+public class QtNyARRaster_RGB implements INyARRaster\r
 {\r
     protected byte[] ref_buf;\r
     protected int width=0;\r
index 32143de..10bd7a1 100644 (file)
@@ -65,12 +65,12 @@ public interface NyARColorPatt
      */\r
     public int[][][] getPatArray();\r
     /**\r
-     * ラスタイメージからi_marker部分のカラーパターンを抽出して、保持します。\r
+     * ラスタイメージからi_square部分のカラーパターンを抽出して、保持します。\r
      * @param image\r
-     * @param i_marker\r
+     * @param i_square\r
      * @return\r
      * ラスターの取得に成功するとTRUE/失敗するとFALSE\r
      * @throws NyARException\r
      */\r
-    public boolean pickFromRaster(NyARRaster image, NyARMarker i_marker) throws NyARException;\r
+    public boolean pickFromRaster(INyARRaster image, NyARSquare i_square) throws NyARException;\r
 }
\ No newline at end of file
index 0800cb1..ca855e2 100644 (file)
@@ -32,7 +32,7 @@
 package jp.nyatla.nyartoolkit.core;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
 \r
 /**\r
  * 24ビットカラーのマーカーを保持するために使うクラスです。\r
@@ -184,7 +184,7 @@ public class NyARColorPatt_O1 implements NyARColorPatt
      * 切り出しに失敗した\r
      * @throws Exception\r
      */\r
-    public boolean pickFromRaster(NyARRaster image, NyARMarker i_marker) throws NyARException\r
+    public boolean pickFromRaster(INyARRaster image, NyARSquare i_square) throws NyARException\r
     {\r
        double          d, xw, yw;\r
        int             xc, yc;\r
@@ -199,14 +199,16 @@ public class NyARColorPatt_O1 implements NyARColorPatt
        double    ydiv2_reciprocal; // [tp]\r
 \r
 \r
-       int[] x_coord=i_marker.x_coord;\r
-       int[] y_coord=i_marker.y_coord;\r
-       double[][] local=wk_pickFromRaster_local;//double    local[4][2];       \r
-       int[] vertex=i_marker.mkvertex;\r
+//     int[] x_coord=i_marker.x_coord;\r
+//     int[] y_coord=i_marker.y_coord;\r
+//     int[] vertex=i_marker.mkvertex;\r
+       double[][] local=wk_pickFromRaster_local;//double    local[4][2];\r
+       //\r
        for(int i = 0; i < 4; i++ ) {\r
-           local[i][0] = x_coord[vertex[i]];\r
-           local[i][1] = y_coord[vertex[i]];\r
+           local[i][0] = i_square.imvertex[i][0];\r
+           local[i][1] = i_square.imvertex[i][1];\r
        }\r
+\r
        double[][] world=wk_pickFromRaster_world;\r
 /*     world[0][0] = 100.0;\r
        world[0][1] = 100.0;\r
index ca2dcc2..fe7786d 100644 (file)
@@ -32,7 +32,7 @@
 package jp.nyatla.nyartoolkit.core;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
 \r
 /**\r
  * 24ビットカラーのマーカーを保持するために使うクラスです。\r
@@ -182,19 +182,21 @@ public class NyARColorPatt_O2 implements NyARColorPatt
      * @param i_marker\r
      * @throws Exception\r
      */\r
-    public boolean pickFromRaster(NyARRaster image, NyARMarker i_marker) throws NyARException\r
+    public boolean pickFromRaster(INyARRaster image, NyARSquare i_square) throws NyARException\r
     {\r
        NyARMat cpara=this.wk_pickFromRaster_cpara;\r
-       //localの計算\r
-       int[] x_coord=i_marker.x_coord;\r
-       int[] y_coord=i_marker.y_coord;\r
-       int[] vertex=i_marker.mkvertex;\r
+       //localの計算        \r
+//     int[] x_coord=i_marker.x_coord;\r
+//     int[] y_coord=i_marker.y_coord;\r
+//     int[] vertex=i_marker.mkvertex;\r
        double[] local_0=wk_pickFromRaster_local[0];//double    local[4][2];    \r
        double[] local_1=wk_pickFromRaster_local[1];//double    local[4][2];    \r
+       //\r
        for(int i = 0; i < 4; i++ ) {\r
-           local_0[i] = x_coord[vertex[i]];\r
-           local_1[i] = y_coord[vertex[i]];\r
-       }\r
+           local_0[i] = i_square.imvertex[i][0];\r
+           local_1[i] = i_square.imvertex[i][1];\r
+       }       \r
+       \r
        //xdiv2,ydiv2の計算\r
        int xdiv2, ydiv2;\r
        int l1,l2;\r
index 19c569f..cda31ac 100644 (file)
@@ -34,7 +34,7 @@ package jp.nyatla.nyartoolkit.core;
 \r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
+import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
 \r
 /**\r
  * 24ビットカラーのマーカーを保持するために使うクラスです。\r
@@ -166,18 +166,16 @@ public class NyARColorPatt_O3 implements NyARColorPatt
      * @param i_marker\r
      * @throws Exception\r
      */\r
-    public boolean pickFromRaster(NyARRaster image, NyARMarker i_marker) throws NyARException\r
+    public boolean pickFromRaster(INyARRaster image, NyARSquare i_square) throws NyARException\r
     {\r
        NyARMat cpara=this.wk_pickFromRaster_cpara;\r
        //localの計算\r
-       int[] x_coord=i_marker.x_coord;\r
-       int[] y_coord=i_marker.y_coord;\r
-       int[] vertex=i_marker.mkvertex;\r
        double[] local_0=wk_pickFromRaster_local[0];//double    local[4][2];    \r
        double[] local_1=wk_pickFromRaster_local[1];//double    local[4][2];    \r
+       //\r
        for(int i = 0; i < 4; i++ ) {\r
-           local_0[i] = x_coord[vertex[i]];\r
-           local_1[i] = y_coord[vertex[i]];\r
+           local_0[i] = i_square.imvertex[i][0];\r
+           local_1[i] = i_square.imvertex[i][1];\r
        }\r
        //xdiv2,ydiv2の計算\r
        int xdiv2, ydiv2;\r
@@ -262,7 +260,7 @@ public class NyARColorPatt_O3 implements NyARColorPatt
        return;\r
     }\r
     \r
-    private void updateExtpat(NyARRaster image,NyARMat i_cpara,int i_xdiv2,int i_ydiv2) throws NyARException\r
+    private void updateExtpat(INyARRaster image,NyARMat i_cpara,int i_xdiv2,int i_ydiv2) throws NyARException\r
     {\r
        int img_x=image.getWidth();\r
        int img_y=image.getHeight();\r
index 6a00050..580fc50 100644 (file)
@@ -35,7 +35,7 @@ package jp.nyatla.nyartoolkit.core;
 \r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
-\r
+import jp.nyatla.nyartoolkit.core.labeling.*;\r
 \r
 \r
 \r
@@ -89,7 +89,7 @@ public class NyARDetectMarker {
      * @param clip\r
      * @throws NyARException\r
      */\r
-    private final void arGetContour(NyARMarker o_marker,int[][] limage, int[] label_ref,int i_labelnum, NyARLabel i_label) throws NyARException\r
+    private final void arGetContour(NyARMarker o_marker,int[][] limage,int i_labelnum, NyARLabel i_label) throws NyARException\r
     {\r
        final int[] xcoord=wk_arGetContour_xcoord;\r
        final int[] ycoord=wk_arGetContour_ycoord;\r
@@ -102,13 +102,13 @@ public class NyARDetectMarker {
        int             i, j,w;\r
 \r
        int[] limage_j;\r
-       j = i_label.clip2;\r
+       j = i_label.clip_t;\r
        limage_j=limage[j];\r
-       final int clip1=i_label.clip1;\r
+       final int clip1=i_label.clip_r;\r
        //p1=ShortPointer.wrap(limage,j*xsize+clip.get());//p1 = &(limage[j*xsize+clip[0]]);\r
-       for( i = i_label.clip0; i <= clip1; i++){//for( i = clip[0]; i <= clip[1]; i++, p1++ ) {\r
+       for( i = i_label.clip_l; i <= clip1; i++){//for( i = clip[0]; i <= clip[1]; i++, p1++ ) {\r
            w=limage_j[i];\r
-           if(w > 0 && label_ref[w-1] == i_labelnum ) {//if( *p1 > 0 && label_ref[(*p1)-1] == label ) {\r
+           if(w > 0 && w == i_labelnum ) {\r
                sx = i;\r
                sy = j;\r
                break;\r
@@ -204,18 +204,17 @@ public class NyARDetectMarker {
      * 抽出したマーカーを格納するリスト\r
      * @throws NyARException\r
      */\r
-    public final void detectMarker(NyARLabeling i_labeling,double i_factor,NyARMarkerList o_marker_list) throws NyARException\r
+    public final void detectMarker(NyLabelingImage i_labeling,double i_factor,NyARMarkerList o_marker_list) throws NyARException\r
     {\r
        int label_area;\r
        int i;\r
        int xsize, ysize;\r
-       NyARLabel[] labels=i_labeling.getLabel();\r
+       NyARLabel[] labels=i_labeling.getLabelList().getArray();\r
 //     int[] warea     =i_labeling.getArea();\r
-       int label_num   =i_labeling.getLabelNum();\r
+       int label_num   =i_labeling.getLabelList().getCount();\r
 //     int[][] wclip   =i_labeling.getClip();\r
 //     double[] wpos   =i_labeling.getPos();\r
-       int[][] limage=i_labeling.getLabelImg();\r
-       int[] label_ref =i_labeling.getLabelRef();\r
+       int[][] limage=i_labeling.getImage();\r
 \r
        //マーカーホルダをリセット\r
        o_marker_list.reset();\r
@@ -231,14 +230,14 @@ public class NyARDetectMarker {
            if(label_area < AR_AREA_MIN || label_area > AR_AREA_MAX ){\r
                continue;\r
            }\r
-           if( label_pt.clip0 == 1 || label_pt.clip1 == xsize-2 ){//if( wclip[i*4+0] == 1 || wclip[i*4+1] == xsize-2 ){\r
+           if( label_pt.clip_l == 1 || label_pt.clip_r == xsize-2 ){//if( wclip[i*4+0] == 1 || wclip[i*4+1] == xsize-2 ){\r
                continue;\r
            }\r
-           if( label_pt.clip2 == 1 || label_pt.clip3 == ysize-2 ){//if( wclip[i*4+2] == 1 || wclip[i*4+3] == ysize-2 ){\r
+           if( label_pt.clip_t == 1 || label_pt.clip_b == ysize-2 ){//if( wclip[i*4+2] == 1 || wclip[i*4+3] == ysize-2 ){\r
                continue;\r
            }\r
            //ret = arGetContour( limage, label_ref, i+1,&(wclip[i*4]), &(marker_info2[marker_num2]));\r
-           arGetContour(current_marker,limage, label_ref, i+1,label_pt);\r
+           arGetContour(current_marker,limage, i+1,label_pt);\r
 \r
            if(!current_marker.checkSquare(label_area,i_factor,label_pt.pos_x,label_pt.pos_y)){\r
                //後半で整理するからここはいらない。//         marker_holder[marker_num2]=null;\r
index 4006d62..0a69765 100644 (file)
  */\r
 package jp.nyatla.nyartoolkit.core;\r
 \r
-import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.*;\r
 import jp.nyatla.nyartoolkit.core.raster.*;\r
-\r
+import jp.nyatla.nyartoolkit.core.labeling.*;\r
 \r
 \r
 public class NyARDetectSquare\r
 {\r
-    private final NyARLabeling labeling;\r
-    private final NyARDetectMarker detect;\r
-    private NyARParam param;\r
-\r
+    private final NyARLabeling_O2 _labeling;\r
+    private final NyARDetectMarker _detecter;\r
+    private final NyLabelingImage _limage;\r
+    private final NyARParam _param;\r
+    private final NyARMarkerList _marker_list;\r
+    \r
     /**\r
      * マーカー抽出インスタンスを作ります。\r
      * @param i_param\r
+     * @param i_max_marker\r
+     * 認識するマーカーの最大個数を指定します。\r
+     * @throws NyARException\r
      */\r
-    public NyARDetectSquare(NyARParam i_param)\r
+    public NyARDetectSquare(NyARParam i_param,int i_max_marker) throws NyARException\r
     {\r
-       param=i_param;\r
+       this._param=i_param;\r
        //解析オブジェクトを作る\r
        int width=i_param.getX();\r
        int height=i_param.getY();\r
+       \r
 \r
-       labeling=new NyARLabeling_O2(width,height);\r
-       detect=new NyARDetectMarker(width,height);\r
+       this._detecter=new NyARDetectMarker(width,height);\r
+       this._labeling=new NyARLabeling_O2();\r
+       this._limage=new NyLabelingImage(width,height);\r
+       this._marker_list=new NyARMarkerList(i_max_marker);\r
+       \r
+       this._labeling.attachDestination(this._limage);\r
     }\r
     /**\r
      * ラスタイメージから矩形を検出して、結果o_square_holderへ格納します。\r
@@ -63,42 +73,18 @@ public class NyARDetectSquare
      * @param i_square_holder\r
      * @throws NyARException\r
      */\r
-    public void detectSquare(NyARRaster i_image,int i_thresh,NyARSquareList o_square_holder) throws NyARException\r
+    public void detectSquare(INyARRaster i_image,int i_thresh,NyARSquareList o_square_list) throws NyARException\r
     {\r
-//     number_of_square=0;\r
-       \r
-       labeling.labeling(i_image, i_thresh);\r
-       if(labeling.getLabelNum()<1){\r
+       this._labeling.setThresh(i_thresh);\r
+       this._labeling.labeling(i_image);\r
+       //ラベル数が0ならマーカー検出をしない。       \r
+       if(this._limage.getLabelList().getCount()<1){\r
            return;\r
        }\r
        //ここでマーカー配列を作成する。\r
-       detect.detectMarker(labeling,1.0,o_square_holder);\r
+       this._detecter.detectMarker(this._limage,1.0,this._marker_list);\r
        \r
        //マーカー情報をフィルタして、スクエア配列を更新する。\r
-       o_square_holder.updateSquareArray(param);\r
-\r
-//     NyARSquare square;\r
-//     int j=0;\r
-//     for (int i = 0; i <number_of_marker; i++){\r
-//     double[][]  line        =new double[4][3];\r
-//     double[][]  vertex      =new double[4][2];\r
-//     //NyARMarker marker=detect.getMarker(i);\r
-//     square=square_holder.getSquare(i);\r
-//     //・・・線の検出??\r
-//     if (!square.getLine(param))\r
-//     {\r
-//         continue;\r
-//     }\r
-//     ここで計算するのは良くないと思うんだ  \r
-//     marker_infoL[j].id  = id.get();\r
-//     marker_infoL[j].dir = dir.get();\r
-//     marker_infoL[j].cf  = cf.get(); \r
-//     j++;\r
-//     //配列数こえたらドゴォォォンしないようにループを抜ける\r
-//     if(j>=marker_info.length){\r
-//         break;\r
-//     }\r
-//    }\r
-//    number_of_square=j;\r
+       o_square_list.pickupSquare(this._param, this._marker_list);\r
     }\r
 }\r
index 4cd1681..c403aaf 100644 (file)
@@ -33,43 +33,11 @@ package jp.nyatla.nyartoolkit.core;
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.core.labeling.*;\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+\r
 \r
 \r
-interface NyARLabeling{\r
-    /**\r
-     * 検出したラベルの数を返す\r
-     * @return\r
-     */\r
-    public int getLabelNum();\r
-    /**\r
-     * \r
-     * @return\r
-     * @throws NyARException\r
-     */\r
-    public int[] getLabelRef() throws NyARException;\r
-    /**\r
-     * 検出したラベル配列\r
-     * @return\r
-     * @throws NyARException\r
-     */\r
-    public NyARLabel[] getLabel() throws NyARException;\r
-    /**\r
-     * ラベリング済みイメージを返す\r
-     * @return\r
-     * @throws NyARException\r
-     */\r
-    public int[][] getLabelImg() throws NyARException;\r
-    /**\r
-     * static ARInt16 *labeling2( ARUint8 *image, int thresh,int *label_num, int **area, double **pos, int **clip,int **label_ref, int LorR )\r
-     * 関数の代替品\r
-     * ラスタimageをラベリングして、結果を保存します。\r
-     * Optimize:STEP[1514->1493]\r
-     * @param image\r
-     * @param thresh\r
-     * @throws NyARException\r
-     */\r
-    public void labeling(NyARRaster image,int thresh) throws NyARException;\r
-}\r
 \r
 \r
 \r
@@ -124,204 +92,82 @@ class NyARWorkHolder
     }\r
 }\r
 \r
-class NyARLabel\r
-{\r
-    public int area;\r
-    public int clip0;\r
-    public int clip1;\r
-    public int clip2;\r
-    public int clip3;\r
-    public double pos_x;\r
-    public double pos_y;\r
-}\r
-\r
-\r
-class NyARLabelHolder\r
-{\r
-    private final static int ARRAY_APPEND_STEP=128;\r
-    public final NyARLabel[] labels;\r
-    private int allocate_size;\r
-    /**\r
-     * 最大i_holder_size個の動的割り当てバッファを準備する。\r
-     * @param i_holder_size\r
-     */\r
-    public NyARLabelHolder(int i_holder_size)\r
-    {\r
-       //ポインタだけははじめに確保しておく\r
-       this.labels=new NyARLabel[i_holder_size];\r
-       this.allocate_size=0;\r
-    }\r
-    /**\r
-     * i_indexで指定した番号までのバッファを準備する。\r
-     * @param i_index\r
-     */\r
-    private final void reserv(int i_index) throws NyARException\r
-    {\r
-       //アロケート済みなら即リターン\r
-       if(this.allocate_size>i_index){\r
-           return;\r
-       }\r
-       //要求されたインデクスは範囲外\r
-       if(i_index>=this.labels.length){\r
-           throw new NyARException();\r
-       }       \r
-       //追加アロケート範囲を計算\r
-       int range=i_index+ARRAY_APPEND_STEP;\r
-       if(range>=this.labels.length){\r
-           range=this.labels.length;\r
-       }\r
-       //アロケート\r
-       for(int i=this.allocate_size;i<range;i++)\r
-       {\r
-           this.labels[i]=new NyARLabel();\r
-       }\r
-       this.allocate_size=range;\r
-    }\r
-    /**\r
-     * i_reserv_sizeまでのバッファを、初期条件i_lxsizeとi_lysizeで初期化する。\r
-     * @param i_reserv_size\r
-     * @param i_lxsize\r
-     * @param i_lysize\r
-     * @throws NyARException\r
-     */\r
-    public final void init(int i_reserv_size,int i_lxsize,int i_lysize) throws NyARException\r
-    {\r
-       reserv(i_reserv_size);\r
-       NyARLabel l;\r
-       for(int i=0;i<i_reserv_size;i++){\r
-           l=this.labels[i];\r
-           l.area=0;\r
-           l.pos_x=0;\r
-           l.pos_y=0;\r
-           l.clip0= i_lxsize;//wclip[i*4+0] = lxsize;\r
-           l.clip1= 0;//wclip[i*4+0] = lxsize;\r
-           l.clip2= i_lysize;//wclip[i*4+2] = lysize;\r
-           l.clip3= 0;//wclip[i*4+3] = 0;\r
-       }       \r
-    }\r
-}\r
-\r
 \r
 /**\r
  * ラベリングクラス。NyARRasterをラベリングして、結果値を保持します。\r
  * 構造を維持して最適化をしたバージョン\r
  *\r
  */\r
-class NyARLabeling_O2 implements NyARLabeling\r
+class NyARLabeling_O2 implements INyLabeling\r
 {\r
     private static final int WORK_SIZE=1024*32;//#define WORK_SIZE   1024*32\r
-    private final int[][] glabel_img;//static ARInt16 l_imageL[HARDCODED_BUFFER_WIDTH*HARDCODED_BUFFER_HEIGHT];\r
-\r
     private final NyARWorkHolder work_holder=new NyARWorkHolder(WORK_SIZE);\r
-    private final NyARLabelHolder label_holder=new NyARLabelHolder(WORK_SIZE);\r
-\r
-    private int label_num;\r
-    //\r
-    private final int width;\r
-    private final int height;\r
-    /**\r
-     * @param i_width\r
-     * ラベリング画像の幅。解析するラスタの幅より大きいこと。\r
-     * @param i_height\r
-     * ラベリング画像の高さ。解析するラスタの高さより大きいこと。\r
-     */\r
-    public NyARLabeling_O2(int i_width,int i_height)\r
+    private int _thresh;\r
+    private TNyIntSize _dest_size;\r
+    private NyLabelingImage _out_image;\r
+    public NyARLabeling_O2()\r
     {\r
-       width =i_width;\r
-       height=i_height;\r
-       glabel_img=new int[height][width];\r
-       this.wk_reservLineBuffer_buf=new int[width];\r
-       label_num=0;\r
-\r
-\r
-       //ワークイメージに枠を書く\r
-       int[][] label_img=this.glabel_img;\r
-       for(int i = 0; i < i_width; i++){\r
-           label_img[0][i]=0;\r
-           label_img[i_height-1][i]=0;\r
-       }\r
-       //</Optimize>\r
-       for(int i = 0; i < i_height; i++) {\r
-           label_img[i][0]=0;\r
-           label_img[i][i_width-1]=0;                      \r
-       }\r
-       \r
-       \r
-       \r
-       \r
+       this._thresh=110;\r
     }\r
-    /**\r
-     * 検出したラベルの数を返す\r
-     * @return\r
-     */\r
-    public int getLabelNum()\r
+    public void setThresh(int i_thresh)\r
     {\r
-       return label_num;\r
+       this._thresh=i_thresh;  \r
     }\r
-    /**\r
-     * 検出したエリア配列?\r
-     * @return\r
-     * @throws NyARException\r
-     */\r
-    public NyARLabel[] getLabel() throws NyARException\r
+    //コンストラクタで作ること\r
+    private int[] wk_reservLineBuffer_buf;\r
+    public void attachDestination(NyLabelingImage i_destination_image) throws NyARException\r
     {\r
-       if(label_num<1){\r
-           throw new NyARException();\r
+       //サイズチェック\r
+       TNyIntSize size=i_destination_image.getSize();\r
+       this._out_image=i_destination_image;\r
+       \r
+       //ラインバッファの準備\r
+       if(this.wk_reservLineBuffer_buf==null){\r
+           this.wk_reservLineBuffer_buf=new int[size.w];\r
+       }else if(this.wk_reservLineBuffer_buf.length<size.w){\r
+           this.wk_reservLineBuffer_buf=new int[size.w];           \r
        }\r
-       return this.label_holder.labels;\r
-    }    \r
-    /**\r
-     * \r
-     * @return\r
-     * @throws NyARException\r
-     */\r
-    public int[] getLabelRef() throws NyARException\r
-    {\r
-       if(label_num<1){\r
-           throw new NyARException();\r
+       \r
+       //NyLabelingImageのイメージ初期化(枠書き)\r
+       int[][] img=i_destination_image.getImage();\r
+       for(int i = 0; i < size.w; i++){\r
+           img[0][i]  =0;\r
+           img[size.h-1][i]=0;\r
        }\r
-       return work_holder.work;\r
-    }\r
-    /**\r
-     * ラベリング済みイメージを返す\r
-     * @return\r
-     * @throws NyARException\r
-     */\r
-    public int[][] getLabelImg() throws NyARException\r
-    {\r
-       return glabel_img;\r
+       for(int i = 0; i < size.h; i++) {\r
+           img[i][0]  =0;\r
+           img[i][size.w-1]=0;                     \r
+       }\r
+       \r
+       //サイズ(参照値)を保存\r
+       this._dest_size=size;   \r
     }\r
-    //コンストラクタで作ること\r
-    private int[] wk_reservLineBuffer_buf=null;\r
+\r
 \r
     /**\r
      * static ARInt16 *labeling2( ARUint8 *image, int thresh,int *label_num, int **area, double **pos, int **clip,int **label_ref, int LorR )\r
      * 関数の代替品\r
      * ラスタimageをラベリングして、結果を保存します。\r
      * Optimize:STEP[1514->1493]\r
-     * @param image\r
+     * @param i_image\r
      * @param thresh\r
      * @throws NyARException\r
      */\r
-    public void labeling(NyARRaster image,int thresh) throws NyARException\r
+    public void labeling(INyARRaster i_input_raster) throws NyARException\r
     {\r
        int wk_max;                   /*  work                */\r
        int m,n;                      /*  work                */\r
-       int lxsize, lysize;\r
-       int thresht3 = thresh * 3;\r
+       int thresht3 = this._thresh * 3;\r
        int i,j,k;\r
-       lxsize=image.getWidth();//lxsize = arUtil_c.arImXsize;\r
-       lysize=image.getHeight();//lysize = arUtil_c.arImYsize;\r
-       //画素数の一致チェック\r
-       if(lxsize!=this.width || lysize!=this.height){\r
-           throw new NyARException();\r
-       }       \r
-       //ラベル数を0に初期化\r
-       this.label_num=0;\r
-\r
-\r
-\r
-       int[][] label_img=this.glabel_img;\r
+        NyLabelingImage out_image=this._out_image;     \r
+       \r
+        //サイズチェック\r
+        TNyIntSize in_size=i_input_raster.getSize();\r
+        this._dest_size.isEqualSize(in_size);\r
+        \r
+        int lxsize=in_size.w;//lxsize = arUtil_c.arImXsize;\r
+       int lysize=in_size.h;//lysize = arUtil_c.arImYsize;\r
+       int[][] label_img=out_image.getImage();\r
        \r
 \r
        //枠作成はインスタンスを作った直後にやってしまう。\r
@@ -339,10 +185,10 @@ class NyARLabeling_O2 implements NyARLabeling
        for(j = 1; j < lysize - 1; j++) {//for (int j = 1; j < lysize - 1; j++, pnt += poff*2, pnt2 += 2) {\r
             label_img_pt0=label_img[j];\r
             label_img_pt1=label_img[j-1];\r
-            image.getPixelTotalRowLine(j,line_bufferr);\r
+            i_input_raster.getPixelTotalRowLine(j,line_bufferr);\r
 \r
            for(i = 1; i < lxsize-1; i++) {//for(int i = 1; i < lxsize-1; i++, pnt+=poff, pnt2++) {\r
-               //RGBã\81®å\90\88è¨\88å\80¤ã\81\8cé\96¾å\80¤ã\82\88ã\82\8a大ã\81\8dいかな?\r
+               //RGBã\81®å\90\88è¨\88å\80¤ã\81\8cé\96¾å\80¤ã\82\88ã\82\8aå°\8fã\81\95いかな?\r
                if(line_bufferr[i]<=thresht3){\r
                    //pnt1 = ShortPointer.wrap(pnt2, -lxsize);//pnt1 = &(pnt2[-lxsize]);\r
                    if(label_img_pt1[i]>0){//if( *pnt1 > 0 ) {\r
@@ -460,39 +306,87 @@ class NyARLabeling_O2 implements NyARLabeling
                }else {\r
                    label_img_pt0[i]=0;//*pnt2 = 0;\r
                }\r
-               \r
            }\r
        }\r
-       j = 1;\r
+       //グループ化とラベル数の計算\r
+       int wlabel_num=1;//*label_num = *wlabel_num = j - 1;\r
+       \r
        for(i = 0; i < wk_max; i++){//for(int i = 1; i <= wk_max; i++, wk++) {\r
-           work[i]=(work[i]==i+1)? j++: work[work[i]-1];//*wk = (*wk==i)? j++: work[(*wk)-1];\r
+           work[i]=(work[i]==i+1)? wlabel_num++: work[work[i]-1];//*wk = (*wk==i)? j++: work[(*wk)-1];\r
        }\r
-\r
-       int wlabel_num=j - 1;//*label_num = *wlabel_num = j - 1;\r
-\r
+       wlabel_num-=1;//*label_num = *wlabel_num = j - 1;\r
        if(wlabel_num==0){//if( *label_num == 0 ) {\r
            //発見数0\r
+           out_image.getLabelList().setLength(0);\r
            return;\r
        }\r
-\r
        \r
+       //ラベル衝突の解消\r
+       int[] line;\r
+       int i2,l1;\r
+       l1=lxsize & 0xfffffffc;\r
+       for(i=lysize-1;i>=0;i--)\r
+       {\r
+           line=label_img[i];\r
+           int pix;        \r
+           for(i2=0;i2<l1;)\r
+           {\r
+               pix=line[i2];\r
+               if(pix!=0){\r
+                   line[i2]=work[pix-1];\r
+               }\r
+               i2++;\r
+               \r
+               pix=line[i2];\r
+               if(pix!=0){\r
+                   line[i2]=work[pix-1];\r
+               }\r
+               i2++;\r
+\r
+               pix=line[i2];\r
+               if(pix!=0){\r
+                   line[i2]=work[pix-1];\r
+               }\r
+               i2++;\r
+\r
+               pix=line[i2];\r
+               if(pix!=0){\r
+                   line[i2]=work[pix-1];\r
+               }\r
+               i2++;\r
+           }\r
+           for(;i2<lxsize;i2++){\r
+               pix=line[i2];\r
+               if(pix==0){\r
+                   continue;\r
+               }\r
+               line[i2]=work[pix-1];\r
+               i2++;\r
+           }\r
+       }\r
+\r
        \r
-       //ラベルバッファを予約&初期化\r
-       this.label_holder.init(wlabel_num, lxsize, lysize);\r
-//     \r
-//     putZero(warea,wlabel_num);//put_zero( (ARUint8 *)warea, *label_num *     sizeof(int) );\r
-//     for(i=0;i<wlabel_num;i++){\r
-//         wpos[i*2+0]=0;\r
-//         wpos[i*2+1]=0;\r
-//     }\r
-//     for(i = 0; i < wlabel_num; i++) {//for(i = 0; i < *label_num; i++) {\r
-//         wclip[i][0] = lxsize;//wclip[i*4+0] = lxsize;\r
-//         wclip[i][1] = 0;//wclip[i*4+1] = 0;\r
-//         wclip[i][2] = lysize;//wclip[i*4+2] = lysize;\r
-//         wclip[i][3] = 0;//wclip[i*4+3] = 0;\r
-//     }\r
+       //ラベル情報の保存等\r
+       NyARLabelList label_list=out_image.getLabelList();\r
+\r
+       //ラベルバッファを予約\r
+       label_list.reserv(wlabel_num);\r
+\r
+       //エリアと重心、クリップ領域を計算\r
        NyARLabel label_pt;\r
-       NyARLabel[] labels=this.label_holder.labels;\r
+       NyARLabel[] labels=label_list.getArray();\r
+       for(i=0;i<wlabel_num;i++)\r
+       {\r
+           label_pt=labels[i];\r
+           label_pt.area=0;\r
+           label_pt.pos_x=0;\r
+           label_pt.pos_y=0;\r
+           label_pt.clip_l= lxsize;//wclip[i*4+0] = lxsize;\r
+           label_pt.clip_r= 0;//wclip[i*4+0] = lxsize;\r
+           label_pt.clip_t= lysize;//wclip[i*4+2] = lysize;\r
+           label_pt.clip_b= 0;//wclip[i*4+3] = 0;          \r
+       }\r
+\r
        \r
        for(i = 0; i < wk_max; i++){\r
            label_pt=labels[work[i] - 1];\r
@@ -500,17 +394,17 @@ class NyARLabeling_O2 implements NyARLabeling
            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.clip0 > work2_pt[3] ){\r
-               label_pt.clip0 = work2_pt[3];\r
+           if( label_pt.clip_l > work2_pt[3] ){\r
+               label_pt.clip_l = work2_pt[3];\r
            }\r
-           if( label_pt.clip1 < work2_pt[4] ){\r
-               label_pt.clip1 = work2_pt[4];\r
+           if( label_pt.clip_r < work2_pt[4] ){\r
+               label_pt.clip_r = work2_pt[4];\r
            }\r
-           if(label_pt.clip2 > work2_pt[5] ){\r
-               label_pt.clip2 = work2_pt[5];\r
+           if(label_pt.clip_t > work2_pt[5] ){\r
+               label_pt.clip_t = work2_pt[5];\r
            }\r
-           if( label_pt.clip3 < work2_pt[6] ){\r
-               label_pt.clip3 = work2_pt[6];\r
+           if( label_pt.clip_b < work2_pt[6] ){\r
+               label_pt.clip_b = work2_pt[6];\r
            }\r
        }\r
 \r
@@ -519,8 +413,8 @@ class NyARLabeling_O2 implements NyARLabeling
            label_pt.pos_x /= label_pt.area;\r
            label_pt.pos_y /= label_pt.area;\r
        }\r
-\r
-       label_num=wlabel_num;\r
+       //ラベル個数を保存する\r
+       label_list.setLength(wlabel_num);\r
        return;\r
     }\r
 }\r
index 182bb5e..f63dde6 100644 (file)
  */\r
 package jp.nyatla.nyartoolkit.core;\r
 \r
-\r
-\r
-\r
-\r
+import jp.nyatla.nyartoolkit.NyARException;\r
 \r
 \r
 /**\r
@@ -205,7 +202,79 @@ class NyARMarker
        pos[1] = i_pos_y;\r
 //      marker_holder[marker_num2].pos[1] = wpos[i*2+1];       \r
        return true;\r
-    }        \r
+    }\r
+    private final NyARMat wk_getLine_input=new NyARMat(1,2);\r
+    private final NyARMat wk_getLine_evec=new NyARMat(2,2);\r
+    private final NyARVec wk_getLine_ev=new NyARVec(2);\r
+    private final NyARVec wk_getLine_mean=new NyARVec(2);\r
+    /**\r
+     * arGetLine(int x_coord[], int y_coord[], int coord_num,int vertex[], double line[4][3], double v[4][2])\r
+     * arGetLine2(int x_coord[], int y_coord[], int coord_num,int vertex[], double line[4][3], double v[4][2], double *dist_factor)\r
+     * の2関数の合成品です。\r
+     * マーカーのvertex,lineを計算して、結果をo_squareに保管します。\r
+     * Optimize:STEP[424->391]\r
+     * @param i_cparam\r
+     * @return\r
+     * @throws NyARException\r
+     */\r
+    public boolean getLine(NyARParam i_cparam,NyARSquare o_square) throws NyARException\r
+    {\r
+       double   w1;\r
+       int      st, ed, n;\r
+       int      i;\r
+\r
+       final double[][] l_line=o_square.line;\r
+       final int[] l_mkvertex=this.mkvertex;\r
+       final int[] l_x_coord=this.x_coord;\r
+       final int[] l_y_coord=this.y_coord;     \r
+       final NyARVec ev     = this.wk_getLine_ev;  //matrixPCAの戻り値を受け取る\r
+       final NyARVec mean   = this.wk_getLine_mean;//matrixPCAの戻り値を受け取る\r
+       final double[] mean_array=mean.getArray();\r
+       double[] l_line_i,l_line_2;\r
+\r
+       NyARMat input=this.wk_getLine_input;//次処理で初期化される。\r
+       NyARMat evec =this.wk_getLine_evec;//アウトパラメータを受け取るから初期化不要//new NyARMat(2,2);\r
+       double[][] evec_array=evec.getArray();\r
+       for( i = 0; i < 4; i++ ) {\r
+           w1 = (double)(l_mkvertex[i+1]-l_mkvertex[i]+1) * 0.05 + 0.5;\r
+           st = (int)(l_mkvertex[i]   + w1);\r
+           ed = (int)(l_mkvertex[i+1] - w1);\r
+           n = ed - st + 1;\r
+           if(n<2){\r
+               //nが2以下でmatrix.PCAを計算することはできないので、エラーにしておく。\r
+               return false;//throw new NyARException();\r
+           }\r
+           input.realloc(n,2);\r
+           //バッチ取得\r
+           i_cparam.observ2IdealBatch(l_x_coord,l_y_coord,st,n,input.getArray());\r
+\r
+           input.matrixPCA(evec, ev, mean);\r
+           l_line_i=l_line[i];\r
+           l_line_i[0] =  evec_array[0][1];//line[i][0] =  evec->m[1];\r
+           l_line_i[1] = -evec_array[0][0];//line[i][1] = -evec->m[0];\r
+           l_line_i[2] = -(l_line_i[0]*mean_array[0] + l_line_i[1]*mean_array[1]);//line[i][2] = -(line[i][0]*mean->v[0] + line[i][1]*mean->v[1]);\r
+       }\r
+       //値の保管\r
+       final double[][] ref_sqvertex=o_square.sqvertex;\r
+       final int[][] ref_imvertex=o_square.imvertex;\r
+       for( i = 0; i < 4; i++ )\r
+       {\r
+           l_line_i=l_line[i];\r
+           l_line_2=l_line[(i+3)%4];\r
+           w1 = l_line_2[0] * l_line_i[1] - l_line_i[0] * l_line_2[1];\r
+           if( w1 == 0.0 ){\r
+               return false;\r
+           }\r
+           //\r
+           ref_sqvertex[i][0] = (  l_line_2[1] * l_line_i[2]- l_line_i[1] * l_line_2[2] ) / w1;\r
+           ref_sqvertex[i][1] = (  l_line_i[0] * l_line_2[2]- l_line_2[0] * l_line_i[2] ) / w1;\r
+\r
+           //imvertexの保管\r
+           ref_imvertex[i][0]=x_coord[l_mkvertex[i]];\r
+           ref_imvertex[i][1]=y_coord[l_mkvertex[i]];\r
+       }\r
+       return true;\r
+    }\r
 }\r
 \r
 \r
index 8ffb0f0..85586d9 100644 (file)
  */\r
 package jp.nyatla.nyartoolkit.core;\r
 \r
-import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.util.DoubleValue;\r
+\r
 \r
 /**\r
  * ARMarkerInfoに相当するクラス。\r
  * スクエア情報を保持します。\r
  *\r
  */\r
-public class NyARSquare extends NyARMarker{\r
+public class NyARSquare{\r
 //    private NyARMarker marker;\r
 //    public int area;\r
 //    public double[] pos;\r
-    public double[][] line=new double[4][3];  //double[4][3]\r
-    public double[][] sqvertex=new double[4][2];//double[4][2];\r
-    public NyARSquare()\r
+    public double[][] line=new double[4][3];\r
+    public double[][] sqvertex=new double[4][2];\r
+    public int[][] imvertex=new int[4][2];\r
+/*    public NyARSquare()\r
     {\r
        super();\r
     }\r
@@ -53,16 +53,7 @@ public class NyARSquare extends NyARMarker{
     private final NyARMat wk_getLine_evec=new NyARMat(2,2);\r
     private final NyARVec wk_getLine_ev=new NyARVec(2);\r
     private final NyARVec wk_getLine_mean=new NyARVec(2);\r
-    /**\r
-     * arGetLine(int x_coord[], int y_coord[], int coord_num,int vertex[], double line[4][3], double v[4][2])\r
-     * arGetLine2(int x_coord[], int y_coord[], int coord_num,int vertex[], double line[4][3], double v[4][2], double *dist_factor)\r
-     * の2関数の合成品です。\r
-     * 格納しているマーカー情報に対して、GetLineの計算を行い、結果を返します。\r
-     * Optimize:STEP[424->391]\r
-     * @param i_cparam\r
-     * @return\r
-     * @throws NyARException\r
-     */\r
+\r
     public boolean getLine(NyARParam i_cparam) throws NyARException\r
     {\r
        double   w1;\r
@@ -118,5 +109,5 @@ public class NyARSquare extends NyARMarker{
            l_sqvertex[i][1] = (  l_line_i[0] * l_line_2[2]- l_line_2[0] * l_line_i[2] ) / w1;\r
        }\r
        return true;\r
-    }\r
+    }*/\r
 }\r
index 638c302..e3e574a 100644 (file)
@@ -2,69 +2,56 @@ package jp.nyatla.nyartoolkit.core;
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
 \r
-public class NyARSquareList extends NyARMarkerList\r
+public class NyARSquareList\r
 {\r
-    private final NyARSquare[] square_array;\r
-    private int square_array_num;\r
+    private final NyARSquare[] _square_array;\r
+    private int _square_array_count;\r
     public NyARSquareList(int i_number_of_holder)\r
     {\r
-       super(new NyARSquare[i_number_of_holder]);\r
+       this._square_array=new NyARSquare[i_number_of_holder];\r
+       \r
        //マーカーホルダに実体を割り当てる。\r
-       for(int i=0;i<this.marker_holder.length;i++){\r
-           this.marker_holder[i]=new NyARSquare();\r
+       for(int i=0;i<this._square_array.length;i++){\r
+           this._square_array[i]=new NyARSquare();\r
        }\r
-       this.square_array=new NyARSquare[i_number_of_holder];\r
-       this.square_array_num=0;\r
+       this._square_array_count=0;\r
     }\r
     /**\r
-     * マーカーアレイをフィルタして、square_arrayを更新する。\r
-     * [[この関数はマーカー検出処理と密接に関係する関数です。\r
-     * NyARDetectSquareクラス以外から呼び出さないで下さい。]]\r
+     * NyARMarkerListを走査して、有効なsquareを取得します。\r
      */\r
-    public final void updateSquareArray(NyARParam i_param) throws NyARException\r
+    public final void pickupSquare(NyARParam i_param,NyARMarkerList i_markers) throws NyARException\r
     {\r
-       NyARSquare square;\r
        int j=0;\r
-       for (int i = 0; i <this.marker_array_num; i++){\r
-//         double[][]  line    =new double[4][3];\r
-//         double[][]  vertex  =new double[4][2];\r
-           //NyARMarker marker=detect.getMarker(i);\r
-           square=(NyARSquare)this.marker_array[i];\r
-           //・・・線の検出??\r
-            if (!square.getLine(i_param))\r
-            {\r
-               continue;\r
-            }\r
-            this.square_array[j]=square;\r
-//ここで計算するのは良くないと思うんだ       \r
-//             marker_infoL[j].id  = id.get();\r
-//             marker_infoL[j].dir = dir.get();\r
-//             marker_infoL[j].cf  = cf.get(); \r
-            j++;\r
+       for (int i = 0; i <i_markers.getMarkerNum(); i++){\r
+           //マーカーのライン情報を確保する。\r
+           if(!i_markers.getMarker(i).getLine(i_param,this._square_array[j])){\r
+               continue;\r
+           }\r
+           j++;\r
        }\r
-       this.square_array_num=j;\r
+       //発見したマーカーの個数を保存\r
+       this._square_array_count=j;\r
     }\r
     /**\r
      * スクエア配列に格納されている要素数を返します。\r
      * @return\r
      */\r
-    public final int getSquareNum()\r
+    public final int getCount()\r
     {\r
-       return  this.square_array_num;\r
+       return  this._square_array_count;\r
     }\r
     /**\r
      * スクエア配列の要素を返します。\r
      * スクエア配列はマーカーアレイをさらにフィルタした結果です。\r
-     * マーカーアレイの部分集合になっている点に注意してください。\r
      * @param i_index\r
      * @return\r
      * @throws NyARException\r
      */\r
     public final NyARSquare getSquare(int i_index) throws NyARException\r
     {\r
-       if(i_index>=this.square_array_num){\r
+       if(i_index>=this._square_array_count){\r
            throw new NyARException();\r
        }\r
-       return this.square_array[i_index];\r
+       return this._square_array[i_index];\r
     }\r
 }\r
diff --git a/src/jp/nyatla/nyartoolkit/core/labeling/INyLabeling.java b/src/jp/nyatla/nyartoolkit/core/labeling/INyLabeling.java
new file mode 100644 (file)
index 0000000..d19683c
--- /dev/null
@@ -0,0 +1,11 @@
+package jp.nyatla.nyartoolkit.core.labeling;\r
+\r
+import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+\r
+\r
+public interface INyLabeling\r
+{\r
+    public void attachDestination(NyLabelingImage i_destination_image) throws NyARException;\r
+    public void labeling(INyARRaster i_input_raster) throws NyARException;\r
+}\r
diff --git a/src/jp/nyatla/nyartoolkit/core/labeling/NyARLabel.java b/src/jp/nyatla/nyartoolkit/core/labeling/NyARLabel.java
new file mode 100644 (file)
index 0000000..9b46997
--- /dev/null
@@ -0,0 +1,14 @@
+package jp.nyatla.nyartoolkit.core.labeling;\r
+\r
+public class NyARLabel\r
+{\r
+    public int area;\r
+    public int clip_r;//0\r
+    public int clip_l;//1\r
+    public int clip_b;//2\r
+    public int clip_t;//3\r
+//    public int pos_x_sum;\r
+//    public int pos_y_sum;\r
+    public double pos_x;\r
+    public double pos_y;\r
+}\r
diff --git a/src/jp/nyatla/nyartoolkit/core/labeling/NyARLabelList.java b/src/jp/nyatla/nyartoolkit/core/labeling/NyARLabelList.java
new file mode 100644 (file)
index 0000000..676155c
--- /dev/null
@@ -0,0 +1,70 @@
+package jp.nyatla.nyartoolkit.core.labeling;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+\r
+/**\r
+ * NyLabelの予約型動的配列\r
+ *\r
+ */\r
+public class NyARLabelList\r
+{    \r
+    private final static int ARRAY_APPEND_STEP=128;\r
+    private final static int ARRAY_MAX=1024*16;\r
+    private final NyARLabel[] _labels;\r
+    private int _allocated_size;\r
+    private int _length;\r
+    /**\r
+     * 最大ARRAY_MAX個の動的割り当てバッファを準備する。\r
+     * @param i_holder_size\r
+     */\r
+    public NyARLabelList()\r
+    {\r
+       //ポインタだけははじめに確保しておく\r
+       this._labels=new NyARLabel[ARRAY_MAX];\r
+       //現在アロケート中の個数は0\r
+       this._allocated_size=0;\r
+       this._length=0;\r
+    }\r
+    /**\r
+     * i_indexで指定した番号までのバッファを準備する。\r
+     * @param i_index\r
+     */\r
+    public final void reserv(int i_index) throws NyARException\r
+    {\r
+       //アロケート済みなら即リターン\r
+       if(this._allocated_size>i_index){\r
+           return;\r
+       }\r
+       //要求されたインデクスは範囲外\r
+       if(i_index>=this._labels.length){\r
+           throw new NyARException();\r
+       }\r
+       //追加アロケート範囲を計算\r
+       int range=i_index+ARRAY_APPEND_STEP;\r
+       if(range>=this._labels.length){\r
+           range=this._labels.length;\r
+       }\r
+       //アロケート\r
+       for(int i=this._allocated_size;i<range;i++)\r
+       {\r
+           this._labels[i]=new NyARLabel();\r
+       }\r
+       this._allocated_size=range;\r
+    }\r
+    public final NyARLabel[] getArray()\r
+    {\r
+       return this._labels;\r
+    }\r
+    /**\r
+     * 動的配列の見かけ上の要素数を設定する。\r
+     */\r
+    public final void setLength(int i_length)\r
+    {\r
+       this._length=i_length;\r
+       \r
+    }\r
+    public final int getCount()\r
+    {\r
+       return this._length;\r
+    }\r
+}\r
diff --git a/src/jp/nyatla/nyartoolkit/core/labeling/NyLabelingImage.java b/src/jp/nyatla/nyartoolkit/core/labeling/NyLabelingImage.java
new file mode 100644 (file)
index 0000000..85486cd
--- /dev/null
@@ -0,0 +1,35 @@
+package jp.nyatla.nyartoolkit.core.labeling;\r
+\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+\r
+public class NyLabelingImage\r
+{\r
+    private TNyIntSize _size;\r
+    private int[][] _image;\r
+    private NyARLabelList _label_list;\r
+    /**\r
+     * \r
+     * @param i_width\r
+     * @param i_height\r
+     */\r
+    public NyLabelingImage(int i_width,int i_height)\r
+    {\r
+       this._size=new TNyIntSize();\r
+       this._size.w=i_width;\r
+       this._size.h=i_height;\r
+       this._image=new int[i_height][i_width];\r
+       this._label_list=new NyARLabelList();\r
+    }\r
+    public TNyIntSize getSize()\r
+    {\r
+       return this._size;\r
+    }\r
+    public int[][] getImage()\r
+    {\r
+       return this._image;\r
+    }\r
+    public NyARLabelList getLabelList()\r
+    {\r
+       return this._label_list;\r
+    }\r
+}\r
diff --git a/src/jp/nyatla/nyartoolkit/core/labeling/NyLabelingRaster.java b/src/jp/nyatla/nyartoolkit/core/labeling/NyLabelingRaster.java
new file mode 100644 (file)
index 0000000..15a860d
--- /dev/null
@@ -0,0 +1,83 @@
+package jp.nyatla.nyartoolkit.core.labeling;\r
+\r
+import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.*;\r
+/**\r
+ * \r
+ * @author nyatla\r
+ *     モノクロ256段階ラスタデータ保持クラス\r
+ */\r
+public class NyLabelingRaster\r
+{\r
+    private INyARRaster _related_raster;\r
+    private int[][] _pixcels;\r
+    private int[]   _average;\r
+    private int _width;\r
+    private int _height;\r
+    \r
+    /**\r
+     * 現状の設定でラスタの保持データを初期化する。\r
+     */\r
+    private void initRaster()\r
+    {\r
+       //ワーク領域を確保\r
+       if(this._pixcels==null)\r
+       {\r
+           \r
+       }\r
+       //値を初期化(_averageが)\r
+       \r
+       \r
+    }\r
+    public NyLabelingRaster(int i_width,int i_height)\r
+    {\r
+       this._height=i_height;\r
+       this._width=i_width;\r
+       //指定サイズで初期化をする。\r
+       this._pixcels=new int[i_height][];\r
+\r
+    }\r
+    /**\r
+     * 連携するラスタオブジェクトを指定する。\r
+     * @param i_raster\r
+     */\r
+    public void SetRelatedRaster(INyARRaster i_raster) throws NyARException\r
+    {\r
+       //新しいラスタをセット\r
+       this._related_raster=i_raster;\r
+       //ラスタサイズが一致しているかを確認する。(一致していなければ例外を発生する)\r
+       if(i_raster.getSize().isEqualSize(this._width,this._height))\r
+       {\r
+           throw new NyARException();\r
+       }\r
+       //キャッシュしている情報を無効化\r
+       this._pixcels=new int[this._height][];\r
+       this._average=new int[this._height];\r
+    }\r
+    \r
+    public int[] GetLine(int i_line_no)\r
+    {\r
+       int[] line=this._pixcels[i_line_no];\r
+       if(line==null){\r
+           //ラインを作る。\r
+           line=new int[this._width];\r
+           this._related_raster.getPixelTotalRowLine(i_line_no,line);\r
+           this._pixcels[i_line_no]=line;\r
+           //平均値の計算\r
+           int ave=0;\r
+           for(int i=this._width-1;i>=0;i++){\r
+               ave+=line[i];\r
+           }\r
+           this._average[i_line_no]=ave/this._width;\r
+       }\r
+       return line;\r
+    }\r
+    public int GetLineAverage(int i_line_no)\r
+    {\r
+       if(this._pixcels[i_line_no]==null){\r
+           this.GetLine(i_line_no);\r
+       }\r
+       return this._average[i_line_no];\r
+    }\r
+    \r
+}\r
@@ -31,7 +31,9 @@
  */\r
 package jp.nyatla.nyartoolkit.core.raster;\r
 \r
-public interface NyARRaster{\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+\r
+public interface INyARRaster{\r
     //RGBの合計値を返す\r
     public int getPixelTotal(int i_x,int i_y);\r
     /**\r
@@ -41,8 +43,6 @@ public interface NyARRaster{
      * getWidth()の戻り値以上のサイズが必要。\r
      */\r
     public void getPixelTotalRowLine(int i_row,int[] o_line);\r
-    public int getWidth();\r
-    public int getHeight();\r
     public void getPixel(int i_x,int i_y,int[] i_rgb);\r
     /**\r
      * 複数のピクセル値をi_rgbへ返します。\r
@@ -56,6 +56,9 @@ public interface NyARRaster{
      * ピクセル値を返すバッファ\r
      */\r
     public void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb);\r
+    public int getWidth();\r
+    public int getHeight();\r
+    public TNyIntSize getSize();\r
 }\r
 \r
 \r
index 01bcfc6..94397b4 100644 (file)
 package jp.nyatla.nyartoolkit.core.raster;\r
 \r
 \r
-public class NyARRaster_BGRA implements NyARRaster\r
+public class NyARRaster_BGRA extends NyARRaster_BasicClass\r
 {\r
     private byte[] ref_buf;\r
-    private int width;\r
-    private int height;\r
     public static NyARRaster_BGRA wrap(byte[] i_buffer,int i_width,int i_height)\r
     {\r
         NyARRaster_BGRA new_inst=new NyARRaster_BGRA();\r
         new_inst.ref_buf=i_buffer;\r
-        new_inst.width  =i_width;\r
-        new_inst.height =i_height;\r
+        new_inst._size.w=i_width;\r
+        new_inst._size.h=i_height;\r
         return new_inst;\r
     }\r
     //RGBの合計値を返す\r
     public int getPixelTotal(int i_x,int i_y)\r
     {\r
-        int bp=(i_x+i_y*this.width)*4;\r
+        int bp=(i_x+i_y*this._size.w)*4;\r
         byte[] ref=this.ref_buf;\r
         return (ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);\r
     }\r
     public void getPixelTotalRowLine(int i_row,int[] o_line)\r
     {\r
         final byte[] ref=this.ref_buf;\r
-        int bp=(i_row+1)*this.width*4-4;\r
-        for(int i=this.width-1;i>=0;i--){\r
+        int bp=(i_row+1)*this._size.w*4-4;\r
+        for(int i=this._size.w-1;i>=0;i--){\r
            o_line[i]=(ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);\r
            bp-=4;\r
        }\r
     }\r
-    public int getWidth()\r
-    {\r
-        return width;\r
-    }\r
-    public int getHeight()\r
-    {\r
-       return height;\r
-    }\r
     public void getPixel(int i_x,int i_y,int[] i_rgb)\r
     {\r
        byte[] ref=this.ref_buf;\r
-        int bp=(i_x+i_y*this.width)*4;\r
+        int bp=(i_x+i_y*this._size.w)*4;\r
         i_rgb[0]=(ref[bp+2] & 0xff);//R\r
         i_rgb[1]=(ref[bp+1] & 0xff);//G\r
         i_rgb[2]=(ref[bp+0] & 0xff);//B\r
     }\r
     public void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb)\r
     {\r
-       int width=this.width;\r
+       int width=this._size.w;\r
        byte[] ref=this.ref_buf;\r
        int bp;\r
        for(int i=i_num-1;i>=0;i--){\r
diff --git a/src/jp/nyatla/nyartoolkit/core/raster/NyARRaster_BasicClass.java b/src/jp/nyatla/nyartoolkit/core/raster/NyARRaster_BasicClass.java
new file mode 100644 (file)
index 0000000..ae818e3
--- /dev/null
@@ -0,0 +1,24 @@
+package jp.nyatla.nyartoolkit.core.raster;\r
+\r
+import jp.nyatla.nyartoolkit.core.types.*;\r
+/**\r
+ * NyARRasterインタフェイスの基本関数/メンバを実装したクラス\r
+ * \r
+ *\r
+ */\r
+public abstract class NyARRaster_BasicClass implements INyARRaster \r
+{\r
+    final protected TNyIntSize _size=new TNyIntSize();\r
+    final public int getWidth()\r
+    {\r
+       return this._size.w;\r
+    }\r
+    final public int getHeight()\r
+    {\r
+       return this._size.h;\r
+    }\r
+    final public TNyIntSize getSize()\r
+    {\r
+       return this._size;\r
+    }\r
+}\r
index 1bea194..33987fe 100644 (file)
@@ -36,14 +36,12 @@ package jp.nyatla.nyartoolkit.core.raster;
  * 真っ黒の矩形を定義する。\r
  *\r
  */\r
-public class NyARRaster_Blank implements NyARRaster\r
+public class NyARRaster_Blank extends NyARRaster_BasicClass\r
 {\r
-    private int width;\r
-    private int height;\r
     public NyARRaster_Blank(int i_width,int i_height)\r
     {\r
-        width  =i_width;\r
-        height =i_height;\r
+       this._size.w=i_width;\r
+        this._size.h=i_height;\r
     }\r
     //RGBの合計値を返す\r
     public int getPixelTotal(int i_x,int i_y)\r
@@ -52,18 +50,10 @@ public class NyARRaster_Blank implements NyARRaster
     }\r
     public void getPixelTotalRowLine(int i_row,int[] o_line)\r
     {\r
-        for(int i=this.width-1;i>=0;i--){\r
+        for(int i=this._size.w-1;i>=0;i--){\r
            o_line[i]=0;\r
        }\r
     }    \r
-    public int getWidth()\r
-    {\r
-       return width;\r
-    }\r
-    public int getHeight()\r
-    {\r
-       return height;\r
-    }\r
     public void getPixel(int i_x,int i_y,int[] i_rgb)\r
     {\r
         i_rgb[0]=0;\r
index b223b9d..adce387 100644 (file)
 package jp.nyatla.nyartoolkit.core.raster;\r
 \r
 \r
-public class NyARRaster_RGB implements NyARRaster\r
+\r
+public class NyARRaster_RGB extends NyARRaster_BasicClass\r
 {\r
     protected byte[] ref_buf;\r
-    protected int width;\r
-    protected int height;\r
     public static NyARRaster_RGB wrap(byte[] i_buffer,int i_width,int i_height)\r
     {\r
         NyARRaster_RGB new_inst=new NyARRaster_RGB();\r
         new_inst.ref_buf=i_buffer;\r
-        new_inst.width  =i_width;\r
-        new_inst.height =i_height;\r
+        new_inst._size.w=i_width;\r
+        new_inst._size.h=i_height;\r
         return new_inst;\r
     }\r
     //RGBの合計値を返す\r
     public int getPixelTotal(int i_x,int i_y)\r
     {\r
        byte[] ref=this.ref_buf;\r
-        int bp=(i_x+i_y*this.width)*3;\r
+        int bp=(i_x+i_y*this._size.w)*3;\r
         return (ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);\r
     }\r
     public void getPixelTotalRowLine(int i_row,int[] o_line)\r
     {\r
         final byte[] ref=this.ref_buf;\r
-        int bp=(i_row+1)*this.width*3-3;\r
-        for(int i=this.width-1;i>=0;i--){\r
+        int bp=(i_row+1)*this._size.w*3-3;\r
+        for(int i=this._size.w-1;i>=0;i--){\r
            o_line[i]=(ref[bp] & 0xff)+(ref[bp+1] & 0xff)+(ref[bp+2] & 0xff);\r
            bp-=3;\r
        }\r
-    }    \r
-    public int getWidth()\r
-    {\r
-        return width;\r
-    }\r
-    public int getHeight()\r
-    {\r
-        return height;\r
     }\r
     public void getPixel(int i_x,int i_y,int[] i_rgb)\r
     {\r
-        int bp=(i_x+i_y*this.width)*3;\r
+        int bp=(i_x+i_y*this._size.w)*3;\r
         byte[] ref=this.ref_buf;\r
         i_rgb[0]=(ref[bp+0] & 0xff);//R\r
         i_rgb[1]=(ref[bp+1] & 0xff);//G\r
@@ -79,7 +70,7 @@ public class NyARRaster_RGB implements NyARRaster
     }\r
     public void getPixelSet(int[] i_x,int i_y[],int i_num,int[] o_rgb)\r
     {\r
-       int width=this.width;\r
+       int width=this._size.w;\r
        byte[] ref=this.ref_buf;\r
        int bp;\r
        for(int i=i_num-1;i>=0;i--){\r
diff --git a/src/jp/nyatla/nyartoolkit/core/types/NySquare.java b/src/jp/nyatla/nyartoolkit/core/types/NySquare.java
new file mode 100644 (file)
index 0000000..49d18a0
--- /dev/null
@@ -0,0 +1,8 @@
+package jp.nyatla.nyartoolkit.core.types;\r
+\r
+public class NySquare\r
+{\r
+    public TNyIntLine[] line=new TNyIntLine[4];\r
+    public TNyIntPoint[] vertex=new TNyIntPoint[4];\r
+\r
+}\r
diff --git a/src/jp/nyatla/nyartoolkit/core/types/TNyIntLine.java b/src/jp/nyatla/nyartoolkit/core/types/TNyIntLine.java
new file mode 100644 (file)
index 0000000..335b689
--- /dev/null
@@ -0,0 +1,13 @@
+package jp.nyatla.nyartoolkit.core.types;\r
+\r
+/**\r
+ * 整数ラインを表現する\r
+ * @author nyatla\r
+ *\r
+ */\r
+public class TNyIntLine\r
+{\r
+    public int x;\r
+    public int y;\r
+    public int v;\r
+}\r
diff --git a/src/jp/nyatla/nyartoolkit/core/types/TNyIntPoint.java b/src/jp/nyatla/nyartoolkit/core/types/TNyIntPoint.java
new file mode 100644 (file)
index 0000000..5cccde3
--- /dev/null
@@ -0,0 +1,8 @@
+package jp.nyatla.nyartoolkit.core.types;\r
+\r
+public class TNyIntPoint\r
+{\r
+    public int x;\r
+    public int y;\r
+\r
+}\r
diff --git a/src/jp/nyatla/nyartoolkit/core/types/TNyIntSize.java b/src/jp/nyatla/nyartoolkit/core/types/TNyIntSize.java
new file mode 100644 (file)
index 0000000..8c6f9da
--- /dev/null
@@ -0,0 +1,41 @@
+package jp.nyatla.nyartoolkit.core.types;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+\r
+public class TNyIntSize\r
+{\r
+    public int h;\r
+    public int w;\r
+    /**\r
+     * サイズが同一であるかを確認する。\r
+     * @param i_width\r
+     * @param i_height\r
+     * @return\r
+     * @throws NyARException\r
+     */\r
+    public boolean isEqualSize(int i_width,int i_height)\r
+    {\r
+       if(i_width==this.w && i_height==this.h)\r
+       {\r
+           return true;\r
+       }\r
+       return false;\r
+    }\r
+    /**\r
+     * サイズが同一であるかを確認する。\r
+     * @param i_width\r
+     * @param i_height\r
+     * @return\r
+     * @throws NyARException\r
+     */    \r
+    public boolean isEqualSize(TNyIntSize i_size)\r
+    {\r
+       if(i_size.w==this.w && i_size.h==this.h)\r
+       {\r
+           return true;\r
+       }\r
+       return false;\r
+\r
+    }\r
+\r
+}\r
index fd477a0..4f61c84 100644 (file)
@@ -102,7 +102,7 @@ public class NyARDetectMarker{
     public NyARDetectMarker(NyARParam i_param,NyARCode[] i_code,double[] i_marker_width,int i_number_of_code) throws NyARException\r
     {\r
        //解析オブジェクトを作る\r
-       this.square=new NyARDetectSquare(i_param);\r
+       this.square=new NyARDetectSquare(i_param,AR_SQUARE_MAX);\r
        this.transmat=new NyARTransMat_O2(i_param);\r
        //比較コードを保存\r
        this.codes=i_code;\r
@@ -135,13 +135,13 @@ public class NyARDetectMarker{
      * マーカーが見つからない場合は0を返します。\r
      * @throws NyARException\r
      */\r
-    public int detectMarkerLite(NyARRaster i_image,int i_thresh) throws NyARException\r
+    public int detectMarkerLite(INyARRaster i_image,int i_thresh) throws NyARException\r
     {\r
        NyARSquareList l_square_list=this.square_list;\r
        //スクエアコードを探す\r
-       square.detectSquare(i_image, i_thresh,l_square_list);\r
+       square.detectSquare(i_image,i_thresh,l_square_list);\r
        \r
-       final int number_of_square=l_square_list.getSquareNum();\r
+       final int number_of_square=l_square_list.getCount();\r
        //コードは見つかった?\r
        if(number_of_square<1){\r
            //ないや。おしまい。\r
index 8790ea9..3c3a10c 100644 (file)
@@ -66,7 +66,7 @@ public class NyARSingleDetectMarker{
     public NyARSingleDetectMarker(NyARParam i_param,NyARCode i_code,double i_marker_width) throws NyARException\r
     {\r
        //解析オブジェクトを作る\r
-       this.square=new NyARDetectSquare(i_param);\r
+       this.square=new NyARDetectSquare(i_param,AR_SQUARE_MAX*3);\r
        this.transmat=new NyARTransMat_O2(i_param);\r
        //比較コードを保存\r
        this.code=i_code;\r
@@ -87,14 +87,14 @@ public class NyARSingleDetectMarker{
      * マーカーが検出できたかを真偽値で返します。\r
      * @throws NyARException\r
      */\r
-    public boolean detectMarkerLite(NyARRaster i_image,int i_thresh) throws NyARException\r
+    public boolean detectMarkerLite(INyARRaster i_image,int i_thresh) throws NyARException\r
     {\r
        detected_square=null;\r
        NyARSquareList l_square_list=this.square_list;\r
        //スクエアコードを探す\r
        square.detectSquare(i_image, i_thresh,l_square_list);\r
        \r
-       int number_of_square=l_square_list.getSquareNum();\r
+       int number_of_square=l_square_list.getCount();\r
        //コードは見つかった?\r
        if(number_of_square<1){\r
            return false;\r