OSDN Git Service

[更新]NyARToolkit/nyatlaブランチ
authornyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Wed, 20 Aug 2008 12:01:10 +0000 (12:01 +0000)
committernyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Wed, 20 Aug 2008 12:01:10 +0000 (12:01 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/nyartoolkit/NyARToolkit@121 7cac0a50-4618-4814-88d0-24b83990f816

25 files changed:
branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O2.java [deleted file]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARDetectMarker.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARDetectSquare.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARObservSize.java [deleted file]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARSquare.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/NyLabelingImage.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/NyLabelingLabel.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/NyARLabel.java with 70% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/NyLabelingLabelList.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/NyARLabelList.java with 82% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/processor/INyLabeling.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/INyLabeling.java with 68% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/labeling/processor/NyARLabeling.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARLabeling.java with 93% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_BlackWhite.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_Color_WITHOUT_PCA.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_Color_WITH_PCA.java
branches/nyatla/src/jp/nyatla/nyartoolkit/core/pickup/INyColorPatt.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARColorPatt.java with 93% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/pickup/NyARColorPatt_O1.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O1.java with 95% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/pickup/NyARColorPatt_O3.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O3.java with 81% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/transmat/INyARTransMat.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARTransMat.java with 90% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/transmat/NyARTransMatResult.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARTransMatResult.java with 93% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/transmat/NyARTransMat_O1.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARTransMat_O1.java with 96% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/transmat/NyARTransMat_O2.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARTransMat_O2.java with 95% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/core/transmat/NyARTransRot.java [moved from branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARTransRot.java with 96% similarity]
branches/nyatla/src/jp/nyatla/nyartoolkit/detector/NyARDetectMarker.java
branches/nyatla/src/jp/nyatla/nyartoolkit/detector/NyARSingleDetectMarker.java
branches/nyatla/src/jp/nyatla/nyartoolkit/sample/RawFileTest.java

diff --git a/branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O2.java b/branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O2.java
deleted file mode 100644 (file)
index fe7786d..0000000
+++ /dev/null
@@ -1,325 +0,0 @@
-/* \r
- * PROJECT: NyARToolkit\r
- * --------------------------------------------------------------------------------\r
- * This work is based on the original ARToolKit developed by\r
- *   Hirokazu Kato\r
- *   Mark Billinghurst\r
- *   HITLab, University of Washington, Seattle\r
- * http://www.hitl.washington.edu/artoolkit/\r
- *\r
- * The NyARToolkit is Java version ARToolkit class library.\r
- * Copyright (C)2008 R.Iizuka\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * \r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- * \r
- * You should have received a copy of the GNU General Public License\r
- * along with this framework; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
- * \r
- * For further information please contact.\r
- *     http://nyatla.jp/nyatoolkit/\r
- *     <airmail(at)ebony.plala.or.jp>\r
- * \r
- */\r
-package jp.nyatla.nyartoolkit.core;\r
-\r
-import jp.nyatla.nyartoolkit.NyARException;\r
-import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
-\r
-/**\r
- * 24ビットカラーのマーカーを保持するために使うクラスです。\r
- * このクラスは、ARToolkitのパターンと、ラスタから取得したパターンを保持します。\r
- * 演算順序を含む最適化をしたもの\r
- *\r
- */\r
-public class NyARColorPatt_O2 implements NyARColorPatt\r
-{\r
-    private static final int AR_PATT_SAMPLE_NUM=64;//#define   AR_PATT_SAMPLE_NUM   64\r
-    private int extpat[][][];\r
-    private int width;\r
-    private int height;\r
-    public NyARColorPatt_O2(int i_width,int i_height)\r
-    {\r
-       this.width=i_width;\r
-       this.height=i_height;\r
-       this.extpat=new int[i_height][i_width][3];\r
-       this.wk_pickFromRaster_ext_pat2=new int[i_height][i_width][3];\r
-    }\r
-//    public void setSize(int i_new_width,int i_new_height)\r
-//    {\r
-//     int array_w=this.extpat[0].length;\r
-//     int array_h=this.extpat.length;\r
-//     //十分なサイズのバッファがあるか確認\r
-//     if(array_w>=i_new_width && array_h>=i_new_height){\r
-//         //OK 十分だ→サイズ調整のみ\r
-//     }else{\r
-//         //足りないよ→取り直し\r
-//         this.wk_pickFromRaster_ext_pat2=new int[i_new_height][i_new_width][3];\r
-//         this.extpat=new int[i_new_height][i_new_width][3];\r
-//     }\r
-//        this.width =i_new_width;\r
-//        this.height=i_new_height;\r
-//        return;\r
-//    }\r
-    public int[][][] getPatArray()\r
-    {\r
-       return extpat;\r
-    }\r
-    public int getWidth()\r
-    {\r
-       return width;\r
-    }\r
-    public int getHeight()\r
-    {\r
-       return height;\r
-    }\r
-    private final NyARMat wk_get_cpara_a=new NyARMat(8,8);\r
-    private final NyARMat wk_get_cpara_b=new NyARMat(8,1);\r
-//    private final NyARMat wk_get_cpara_c=new NyARMat(8,1);\r
-    /**\r
-     * @param world\r
-     * @param vertex\r
-     * @param o_para\r
-     * @throws NyARException\r
-     */\r
-    private boolean get_cpara(double vertex_0[], double vertex_1[],NyARMat o_para) throws NyARException\r
-    {\r
-       double world[][]=this.wk_pickFromRaster_world;\r
-       NyARMat a =wk_get_cpara_a;//次処理で値を設定するので、初期化不要// new NyARMat( 8, 8 );\r
-       double[][] a_array=a.getArray();\r
-       NyARMat b =wk_get_cpara_b;//次処理で値を設定するので、初期化不要// new NyARMat( 8, 1 );\r
-       double[][] b_array=b.getArray();\r
-       double[] a_pt0,a_pt1,world_pti;\r
-\r
-       for(int i = 0; i < 4; i++ ) {\r
-           a_pt0=a_array[i*2];\r
-           a_pt1=a_array[i*2+1];\r
-           world_pti=world[i];\r
-\r
-           a_pt0[0]=world_pti[0];//a->m[i*16+0]  = world[i][0];\r
-           a_pt0[1]=world_pti[1];//a->m[i*16+1]  = world[i][1];\r
-           a_pt0[2]=1.0;//a->m[i*16+2]  = 1.0;\r
-           a_pt0[3]=0.0;//a->m[i*16+3]  = 0.0;\r
-           a_pt0[4]=0.0;//a->m[i*16+4]  = 0.0;\r
-           a_pt0[5]=0.0;//a->m[i*16+5]  = 0.0;\r
-           a_pt0[6]=-world_pti[0] * vertex_0[i];//a->m[i*16+6]  = -world[i][0] * vertex[i][0];\r
-           a_pt0[7]=-world_pti[1] * vertex_0[i];//a->m[i*16+7]  = -world[i][1] * vertex[i][0];\r
-           a_pt1[0]=0.0;//a->m[i*16+8]  = 0.0;\r
-           a_pt1[1]=0.0;//a->m[i*16+9]  = 0.0;\r
-           a_pt1[2]=0.0;//a->m[i*16+10] = 0.0;\r
-           a_pt1[3]=world_pti[0];//a->m[i*16+11] = world[i][0];\r
-           a_pt1[4]=world_pti[1];//a->m[i*16+12] = world[i][1];\r
-           a_pt1[5]=1.0;//a->m[i*16+13] = 1.0;\r
-           a_pt1[6]=-world_pti[0] * vertex_1[i];//a->m[i*16+14] = -world[i][0] * vertex[i][1];\r
-           a_pt1[7]=-world_pti[1] * vertex_1[i];//a->m[i*16+15] = -world[i][1] * vertex[i][1];\r
-           b_array[i*2+0][0]=vertex_0[i];//b->m[i*2+0] = vertex[i][0];\r
-           b_array[i*2+1][0]=vertex_1[i];//b->m[i*2+1] = vertex[i][1];\r
-       }\r
-//     JartkException.trap("未チェックのパス");\r
-       if(!a.matrixSelfInv()){\r
-           return false;\r
-       }\r
-\r
-//     JartkException.trap("未チェックのパス");\r
-//     NyARMat c = wk_get_cpara_c;//次処理で結果を受け取るので、初期化不要//new NyARMat( 8, 1 );\r
-//     double[][] c_array=c.getArray();\r
-\r
-       o_para.matrixMul(a, b);\r
-//     para[0*3+0] = c_array[0*3+0][0];//para[i][0] = c->m[i*3+0];\r
-//     para[0*3+1] = c_array[0*3+1][0];//para[i][1] = c->m[i*3+1];\r
-//     para[0*3+2] = c_array[0*3+2][0];//para[i][2] = c->m[i*3+2];\r
-//     para[1*3+0] = c_array[1*3+0][0];//para[i][0] = c->m[i*3+0];\r
-//     para[1*3+1] = c_array[1*3+1][0];//para[i][1] = c->m[i*3+1];\r
-//     para[i*3+2] = c_array[1*3+2][0];//para[i][2] = c->m[i*3+2];\r
-//     para[2*3+0] = c_array[2*3+0][0];//para[2][0] = c->m[2*3+0];\r
-//     para[2*3+1] = c_array[2*3+1][0];//para[2][1] = c->m[2*3+1];\r
-//     para[2*3+2] = 1.0;//para[2][2] = 1.0;\r
-       return true;\r
-    }\r
-\r
-  //   private final double[] wk_pickFromRaster_para=new double[9];//[3][3];\r
-    private int[][][] wk_pickFromRaster_ext_pat2=null;//コンストラクタでint[height][width][3]を作る\r
-    private final double[][] wk_pickFromRaster_world={//double    world[4][2];\r
-           {100.0,     100.0},\r
-           {100.0+10.0,100.0},\r
-           {100.0+10.0,100.0 + 10.0},\r
-           {100.0,     100.0 + 10.0}\r
-    };\r
-    /**\r
-     * pickFromRaster関数から使う変数です。\r
-     *\r
-     */\r
-    private static void initValue_wk_pickFromRaster_ext_pat2(int[][][] i_ext_pat2,int i_width,int i_height)\r
-    {\r
-       int i,i2;\r
-       int[][] pt2;\r
-       int[]   pt1;\r
-       for(i=i_height-1;i>=0;i--){\r
-           pt2=i_ext_pat2[i];\r
-           for(i2=i_width-1;i2>=0;i2--){\r
-               pt1=pt2[i2];\r
-               pt1[0]=0;\r
-               pt1[1]=0;\r
-               pt1[2]=0;\r
-           }\r
-       }\r
-    }\r
-    private final double[][] wk_pickFromRaster_local=new double[2][4];\r
-    private final int[] wk_pickFromRaster_rgb_tmp=new int[3];\r
-    private final NyARMat wk_pickFromRaster_cpara=new NyARMat(8,1);\r
-    /**\r
-     * imageから、i_markerの位置にあるパターンを切り出して、保持します。\r
-     * Optimize:STEP[769->750]\r
-     * @param image\r
-     * @param i_marker\r
-     * @throws Exception\r
-     */\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] = 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
-       double w1,w2;\r
-\r
-       //x計算\r
-       w1=local_0[0] - local_0[1];\r
-       w2=local_1[0] - local_1[1];\r
-       l1 = (int)(w1*w1+w2*w2);\r
-       w1=local_0[2] - local_0[3];\r
-       w2=local_1[2] - local_1[3];\r
-       l2 = (int)(w1*w1+w2*w2);\r
-       if( l2 > l1 ){\r
-           l1 = l2;\r
-       }\r
-       l1=l1/4;\r
-       xdiv2 =this.width;\r
-       while( xdiv2*xdiv2 < l1 ){\r
-           xdiv2*=2;\r
-       }\r
-       if( xdiv2 > AR_PATT_SAMPLE_NUM)\r
-       {\r
-           xdiv2 =AR_PATT_SAMPLE_NUM;\r
-       }\r
-       \r
-       //y計算\r
-       w1=local_0[1] - local_0[2];\r
-       w2=local_1[1] - local_1[2];\r
-       l1 = (int)(w1*w1+ w2*w2);\r
-       w1=local_0[3] - local_0[0];\r
-       w2=local_1[3] - local_1[0];\r
-       l2 = (int)(w1*w1+ w2*w2);\r
-       if( l2 > l1 ){\r
-           l1 = l2;\r
-       }\r
-       ydiv2 =this.height;\r
-       l1=l1/4;\r
-       while( ydiv2*ydiv2 < l1 ){\r
-           ydiv2*=2;\r
-       }\r
-       if( ydiv2 >AR_PATT_SAMPLE_NUM)\r
-       {\r
-           ydiv2 = AR_PATT_SAMPLE_NUM;\r
-       }       \r
-       \r
-       //cparaの計算\r
-       if(!get_cpara(local_0,local_1,cpara)){\r
-           return false;\r
-       }\r
-\r
-       int img_x=image.getWidth();\r
-       int img_y=image.getHeight();\r
-\r
-       /*wk_pickFromRaster_ext_pat2ワーク変数を初期化する。*/\r
-       int[][][] ext_pat2=wk_pickFromRaster_ext_pat2;//ARUint32  ext_pat2[AR_PATT_SIZE_Y][AR_PATT_SIZE_X][3];\r
-       int extpat_j[][],extpat_j_i[];\r
-       int ext_pat2_j[][],ext_pat2_j_i[];\r
-\r
-       initValue_wk_pickFromRaster_ext_pat2(ext_pat2,this.width,this.height);\r
-\r
-       double[][] cpara_array=cpara.getArray();\r
-       double para21_x_yw,para01_x_yw,para11_x_yw;\r
-       double para00,para01,para02,para10,para11,para12,para20,para21;\r
-        para00 = cpara_array[0*3+0][0];//para[i][0] = c->m[i*3+0];\r
-        para01 = cpara_array[0*3+1][0];//para[i][1] = c->m[i*3+1];\r
-        para02 = cpara_array[0*3+2][0];//para[i][2] = c->m[i*3+2];\r
-        para10 = cpara_array[1*3+0][0];//para[i][0] = c->m[i*3+0];\r
-        para11 = cpara_array[1*3+1][0];//para[i][1] = c->m[i*3+1];\r
-        para12 = cpara_array[1*3+2][0];//para[i][2] = c->m[i*3+2];\r
-        para20 = cpara_array[2*3+0][0];//para[2][0] = c->m[2*3+0];\r
-        para21 = cpara_array[2*3+1][0];//para[2][1] = c->m[2*3+1];\r
-        //para22 = 1.0;//para[2][2] = 1.0;\r
-\r
-       \r
-       double          d, xw, yw;\r
-       int             xc, yc;\r
-       int i,j;\r
-       int[] rgb_tmp=wk_pickFromRaster_rgb_tmp;\r
-       //      arGetCode_put_zero(ext_pat2);//put_zero( (ARUint8 *)ext_pat2, AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3*sizeof(ARUint32) );\r
-       int xdiv = xdiv2/width;//xdiv = xdiv2/Config.AR_PATT_SIZE_X;\r
-       int ydiv = ydiv2/height;//ydiv = ydiv2/Config.AR_PATT_SIZE_Y;\r
-       double xdiv2_reciprocal = 1.0 / xdiv2;\r
-       double ydiv2_reciprocal = 1.0 / ydiv2;\r
-\r
-       for(j = 0; j < ydiv2; j++ ) {\r
-           yw = 102.5 + 5.0 * ((double)j+0.5) * ydiv2_reciprocal;\r
-           para21_x_yw=para21*yw+1.0;\r
-           para11_x_yw=para11*yw+para12;\r
-           para01_x_yw=para01*yw+para02;\r
-           ext_pat2_j=ext_pat2[j/ydiv];\r
-           for(i = 0; i < xdiv2; i++ ) {\r
-               xw = 102.5 + 5.0 * ((double)i+0.5) * xdiv2_reciprocal;\r
-               d = para20*xw + para21_x_yw;\r
-               if( d == 0 ){\r
-                   throw new NyARException();\r
-               }\r
-               xc = (int)((para00*xw + para01_x_yw)/d);\r
-               yc = (int)((para10*xw + para11_x_yw)/d);\r
-\r
-\r
-               if( xc >= 0 && xc < img_x && yc >= 0 && yc < img_y ) {\r
-                   image.getPixel(xc, yc, rgb_tmp);\r
-                   ext_pat2_j_i=ext_pat2_j[i/xdiv];\r
-\r
-                   ext_pat2_j_i[0] += rgb_tmp[0];//R\r
-                   ext_pat2_j_i[1] += rgb_tmp[1];//G\r
-                   ext_pat2_j_i[2] += rgb_tmp[2];//B\r
-               }\r
-           }\r
-       }\r
-       /*<Optimize>*/\r
-       int xdiv_x_ydiv=xdiv*ydiv;\r
-       for(j =this.height-1; j>=0; j--){\r
-           extpat_j=extpat[j];\r
-           ext_pat2_j=ext_pat2[j];\r
-           for(i = this.width-1; i>=0; i--){                           // PRL 2006-06-08.\r
-               ext_pat2_j_i=ext_pat2_j[i];\r
-               extpat_j_i=extpat_j[i];\r
-               extpat_j_i[0]=(ext_pat2_j_i[0] / xdiv_x_ydiv);//ext_pat[j][i][0] = (byte)(ext_pat2[j][i][0] / (xdiv*ydiv));\r
-               extpat_j_i[1]=(ext_pat2_j_i[1] / xdiv_x_ydiv);//ext_pat[j][i][1] = (byte)(ext_pat2[j][i][1] / (xdiv*ydiv));\r
-               extpat_j_i[2]=(ext_pat2_j_i[2] / xdiv_x_ydiv);//ext_pat[j][i][2] = (byte)(ext_pat2[j][i][2] / (xdiv*ydiv));\r
-           }\r
-       }\r
-       return true;\r
-    }\r
-}
\ No newline at end of file
index 580fc50..37e6f7c 100644 (file)
@@ -89,7 +89,7 @@ public class NyARDetectMarker {
      * @param clip\r
      * @throws NyARException\r
      */\r
-    private final void arGetContour(NyARMarker o_marker,int[][] limage,int i_labelnum, NyARLabel i_label) throws NyARException\r
+    private final void arGetContour(NyARMarker o_marker,int[][] limage,int i_labelnum, NyLabelingLabel i_label) throws NyARException\r
     {\r
        final int[] xcoord=wk_arGetContour_xcoord;\r
        final int[] ycoord=wk_arGetContour_ycoord;\r
@@ -209,7 +209,7 @@ public class NyARDetectMarker {
        int label_area;\r
        int i;\r
        int xsize, ysize;\r
-       NyARLabel[] labels=i_labeling.getLabelList().getArray();\r
+       NyLabelingLabel[] labels=i_labeling.getLabelList().getArray();\r
 //     int[] warea     =i_labeling.getArea();\r
        int label_num   =i_labeling.getLabelList().getCount();\r
 //     int[][] wclip   =i_labeling.getClip();\r
@@ -223,7 +223,7 @@ public class NyARDetectMarker {
        ysize =height;\r
 //     マーカーをmarker_holderに蓄積する。\r
        NyARMarker current_marker=o_marker_list.getCurrentHolder();\r
-       NyARLabel label_pt;\r
+       NyLabelingLabel label_pt;\r
        for(i=0; i<label_num; i++ ){\r
            label_pt=labels[i];\r
            label_area=label_pt.area;\r
index 0a69765..324dbc8 100644 (file)
@@ -34,11 +34,11 @@ package jp.nyatla.nyartoolkit.core;
 import jp.nyatla.nyartoolkit.*;\r
 import jp.nyatla.nyartoolkit.core.raster.*;\r
 import jp.nyatla.nyartoolkit.core.labeling.*;\r
-\r
+import jp.nyatla.nyartoolkit.core.labeling.processor.NyARLabeling;\r
 \r
 public class NyARDetectSquare\r
 {\r
-    private final NyARLabeling_O2 _labeling;\r
+    private final NyARLabeling _labeling;\r
     private final NyARDetectMarker _detecter;\r
     private final NyLabelingImage _limage;\r
     private final NyARParam _param;\r
@@ -60,7 +60,7 @@ public class NyARDetectSquare
        \r
 \r
        this._detecter=new NyARDetectMarker(width,height);\r
-       this._labeling=new NyARLabeling_O2();\r
+       this._labeling=new NyARLabeling();\r
        this._limage=new NyLabelingImage(width,height);\r
        this._marker_list=new NyARMarkerList(i_max_marker);\r
        \r
diff --git a/branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARObservSize.java b/branches/nyatla/src/jp/nyatla/nyartoolkit/core/NyARObservSize.java
deleted file mode 100644 (file)
index 8fca2ce..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-package jp.nyatla.nyartoolkit.core;\r
-\r
-public class NyARObservSize\r
-{\r
-    public int w;\r
-    public int h;\r
-    public NyARObservSize(int i_w,int i_h)\r
-    {\r
-       this.w=i_w;\r
-       this.h=i_h;\r
-    }\r
-}\r
index 85586d9..4d37502 100644 (file)
@@ -39,75 +39,7 @@ package jp.nyatla.nyartoolkit.core;
  *\r
  */\r
 public class NyARSquare{\r
-//    private NyARMarker marker;\r
-//    public int area;\r
-//    public double[] pos;\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
-    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
-    public boolean getLine(NyARParam i_cparam) throws NyARException\r
-    {\r
-       double   w1;\r
-       int      st, ed, n;\r
-       int      i;\r
-\r
-       final double[][] l_sqvertex=this.sqvertex;\r
-       final double[][] l_line=this.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
-//         for( j = 0; j < n; j++ ) {\r
-//             i_cparam.observ2Ideal(l_x_coord[st+j], l_y_coord[st+j],dv1,dv2);//arParamObserv2Ideal( dist_factor, x_coord[st+j], y_coord[st+j],&(input->m[j*2+0]), &(input->m[j*2+1]) );\r
-//             in_array[j][0]=dv1.value;\r
-//             in_array[j][1]=dv2.value;\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
-       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
-           l_sqvertex[i][0] = (  l_line_2[1] * l_line_i[2]- l_line_i[1] * l_line_2[2] ) / w1;\r
-           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
index 85486cd..1ac7c80 100644 (file)
@@ -6,7 +6,7 @@ public class NyLabelingImage
 {\r
     private TNyIntSize _size;\r
     private int[][] _image;\r
-    private NyARLabelList _label_list;\r
+    private NyLabelingLabelList _label_list;\r
     /**\r
      * \r
      * @param i_width\r
@@ -18,7 +18,7 @@ public class NyLabelingImage
        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
+       this._label_list=new NyLabelingLabelList();\r
     }\r
     public TNyIntSize getSize()\r
     {\r
@@ -28,7 +28,7 @@ public class NyLabelingImage
     {\r
        return this._image;\r
     }\r
-    public NyARLabelList getLabelList()\r
+    public NyLabelingLabelList getLabelList()\r
     {\r
        return this._label_list;\r
     }\r
@@ -1,14 +1,12 @@
 package jp.nyatla.nyartoolkit.core.labeling;\r
 \r
-public class NyARLabel\r
+public class NyLabelingLabel\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
@@ -6,21 +6,21 @@ import jp.nyatla.nyartoolkit.NyARException;
  * NyLabelの予約型動的配列\r
  *\r
  */\r
-public class NyARLabelList\r
+public class NyLabelingLabelList\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 final NyLabelingLabel[] _labels;\r
     private int _allocated_size;\r
     private int _length;\r
     /**\r
      * 最大ARRAY_MAX個の動的割り当てバッファを準備する。\r
      * @param i_holder_size\r
      */\r
-    public NyARLabelList()\r
+    public NyLabelingLabelList()\r
     {\r
        //ポインタだけははじめに確保しておく\r
-       this._labels=new NyARLabel[ARRAY_MAX];\r
+       this._labels=new NyLabelingLabel[ARRAY_MAX];\r
        //現在アロケート中の個数は0\r
        this._allocated_size=0;\r
        this._length=0;\r
@@ -47,11 +47,11 @@ public class NyARLabelList
        //アロケート\r
        for(int i=this._allocated_size;i<range;i++)\r
        {\r
-           this._labels[i]=new NyARLabel();\r
+           this._labels[i]=new NyLabelingLabel();\r
        }\r
        this._allocated_size=range;\r
     }\r
-    public final NyARLabel[] getArray()\r
+    public final NyLabelingLabel[] getArray()\r
     {\r
        return this._labels;\r
     }\r
@@ -1,6 +1,7 @@
-package jp.nyatla.nyartoolkit.core.labeling;\r
+package jp.nyatla.nyartoolkit.core.labeling.processor;\r
 \r
 import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.labeling.NyLabelingImage;\r
 import jp.nyatla.nyartoolkit.core.raster.*;\r
 \r
 \r
@@ -29,7 +29,7 @@
  *     <airmail(at)ebony.plala.or.jp>\r
  * \r
  */\r
-package jp.nyatla.nyartoolkit.core;\r
+package jp.nyatla.nyartoolkit.core.labeling.processor;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.raster.*;\r
@@ -42,70 +42,21 @@ import jp.nyatla.nyartoolkit.core.types.*;
 \r
 \r
 \r
-/**\r
- * NyARLabeling_O2のworkとwork2を可変長にするためのクラス\r
- * \r
- *\r
- */\r
-class NyARWorkHolder\r
-{\r
-    private final static int ARRAY_APPEND_STEP=256;\r
-    public final int[] work;\r
-    public final int[][] work2;\r
-    private int allocate_size;\r
-    /**\r
-     * 最大i_holder_size個の動的割り当てバッファを準備する。\r
-     * @param i_holder_size\r
-     */\r
-    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
-    /**\r
-     * i_indexで指定した番号までのバッファを準備する。\r
-     * @param i_index\r
-     */\r
-    public 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.work.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
-       }\r
-       //アロケート\r
-       for(int i=this.allocate_size;i<range;i++)\r
-       {\r
-           this.work2[i]=new int[7];\r
-       }\r
-       this.allocate_size=range;\r
-    }\r
-}\r
 \r
 \r
 /**\r
- * ラベリングクラス。NyARRasterをラベリングして、結果値を保持します。\r
- * 構造を維持して最適化をしたバージョン\r
+ * ARToolKit互換のラベリングクラスです。\r
+ * ARToolKitと同一な評価結果を返します。\r
  *\r
  */\r
-class NyARLabeling_O2 implements INyLabeling\r
+public class NyARLabeling implements INyLabeling\r
 {\r
     private static final int WORK_SIZE=1024*32;//#define WORK_SIZE   1024*32\r
     private final NyARWorkHolder work_holder=new NyARWorkHolder(WORK_SIZE);\r
     private int _thresh;\r
     private TNyIntSize _dest_size;\r
     private NyLabelingImage _out_image;\r
-    public NyARLabeling_O2()\r
+    public NyARLabeling()\r
     {\r
        this._thresh=110;\r
     }\r
@@ -367,14 +318,14 @@ class NyARLabeling_O2 implements INyLabeling
 \r
        \r
        //ラベル情報の保存等\r
-       NyARLabelList label_list=out_image.getLabelList();\r
+       NyLabelingLabelList label_list=out_image.getLabelList();\r
 \r
        //ラベルバッファを予約\r
        label_list.reserv(wlabel_num);\r
 \r
        //エリアと重心、クリップ領域を計算\r
-       NyARLabel label_pt;\r
-       NyARLabel[] labels=label_list.getArray();\r
+       NyLabelingLabel label_pt;\r
+       NyLabelingLabel[] labels=label_list.getArray();\r
        for(i=0;i<wlabel_num;i++)\r
        {\r
            label_pt=labels[i];\r
@@ -419,3 +370,52 @@ class NyARLabeling_O2 implements INyLabeling
     }\r
 }\r
 \r
+/**\r
+ * NyARLabeling_O2のworkとwork2を可変長にするためのクラス\r
+ * \r
+ *\r
+ */\r
+class NyARWorkHolder\r
+{\r
+    private final static int ARRAY_APPEND_STEP=256;\r
+    public final int[] work;\r
+    public final int[][] work2;\r
+    private int allocate_size;\r
+    /**\r
+     * 最大i_holder_size個の動的割り当てバッファを準備する。\r
+     * @param i_holder_size\r
+     */\r
+    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
+    /**\r
+     * i_indexで指定した番号までのバッファを準備する。\r
+     * @param i_index\r
+     */\r
+    public 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.work.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
+       }\r
+       //アロケート\r
+       for(int i=this.allocate_size;i<range;i++)\r
+       {\r
+           this.work2[i]=new int[7];\r
+       }\r
+       this.allocate_size=range;\r
+    }\r
+}\r
index c939985..6896a41 100644 (file)
@@ -33,7 +33,7 @@ package jp.nyatla.nyartoolkit.core.match;
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.NyARCode;\r
-import jp.nyatla.nyartoolkit.core.NyARColorPatt;\r
+import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
 \r
 \r
 \r
@@ -49,7 +49,7 @@ public interface NyARMatchPatt{
     public double getConfidence();\r
     public int getDirection();\r
     public void evaluate(NyARCode i_code);\r
-    public boolean setPatt(NyARColorPatt i_target_patt) throws NyARException;\r
+    public boolean setPatt(INyColorPatt i_target_patt) throws NyARException;\r
 }\r
 \r
 \r
index 6c2450c..f7adc6f 100644 (file)
@@ -33,6 +33,7 @@ package jp.nyatla.nyartoolkit.core.match;
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.*;\r
+import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
 \r
 /**\r
  * AR_TEMPLATE_MATCHING_BWと同等のルールで\r
@@ -47,7 +48,7 @@ public class NyARMatchPatt_BlackWhite implements NyARMatchPatt{
     private int dir=0;\r
     private int ave;\r
     private int[][][]  input=new int[height][width][3];\r
-    public boolean setPatt(NyARColorPatt i_target_patt) throws NyARException\r
+    public boolean setPatt(INyColorPatt i_target_patt) throws NyARException\r
     {\r
        width=i_target_patt.getWidth();\r
        height=i_target_patt.getHeight();\r
index 6bb033d..2de4a0e 100644 (file)
@@ -33,6 +33,7 @@ package jp.nyatla.nyartoolkit.core.match;
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.*;\r
+import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
 \r
 /**\r
  * AR_TEMPLATE_MATCHING_COLORかつAR_MATCHING_WITHOUT_PCAと同等のルールで\r
@@ -68,7 +69,7 @@ public class NyARMatchPatt_Color_WITHOUT_PCA implements NyARMatchPatt{
         this.height=i_height;\r
         this.width =i_width;\r
     }\r
-    public boolean setPatt(NyARColorPatt i_target_patt) throws NyARException\r
+    public boolean setPatt(INyColorPatt i_target_patt) throws NyARException\r
     { \r
        int i,k;\r
        int[][][] data,linput;\r
index 1f387b6..b87e0f9 100644 (file)
@@ -33,7 +33,7 @@ package jp.nyatla.nyartoolkit.core.match;
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.NyARCode;\r
-import jp.nyatla.nyartoolkit.core.NyARColorPatt;\r
+import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
 \r
 /**\r
  * AR_TEMPLATE_MATCHING_COLORかつAR_MATCHING_WITH_PCAと同等のルールで\r
@@ -59,7 +59,7 @@ public class NyARMatchPatt_Color_WITH_PCA implements NyARMatchPatt{
     public int getDirection(){\r
        return dir;\r
     }\r
-    public boolean setPatt(NyARColorPatt i_target_patt) throws NyARException\r
+    public boolean setPatt(INyColorPatt i_target_patt) throws NyARException\r
     {\r
        width=i_target_patt.getWidth();\r
        height=i_target_patt.getHeight();\r
  *     <airmail(at)ebony.plala.or.jp>\r
  * \r
  */\r
-package jp.nyatla.nyartoolkit.core;\r
+package jp.nyatla.nyartoolkit.core.pickup;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.NyARSquare;\r
 import jp.nyatla.nyartoolkit.core.raster.*;\r
 \r
-public interface NyARColorPatt\r
+public interface INyColorPatt\r
 {\r
 //     消すかも。\r
 //    /**\r
  *     <airmail(at)ebony.plala.or.jp>\r
  * \r
  */\r
-package jp.nyatla.nyartoolkit.core;\r
+package jp.nyatla.nyartoolkit.core.pickup;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.NyARMat;\r
+import jp.nyatla.nyartoolkit.core.NyARSquare;\r
 import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
 \r
 /**\r
@@ -40,7 +42,7 @@ import jp.nyatla.nyartoolkit.core.raster.INyARRaster;
  * 演算順序以外の最適化をしたもの\r
  *\r
  */\r
-public class NyARColorPatt_O1 implements NyARColorPatt\r
+public class NyARColorPatt_O1 implements INyColorPatt\r
 {\r
     private static final int AR_PATT_SAMPLE_NUM=64;//#define   AR_PATT_SAMPLE_NUM   64\r
     private int extpat[][][];\r
  *     <airmail(at)ebony.plala.or.jp>\r
  * \r
  */\r
-package jp.nyatla.nyartoolkit.core;\r
+package jp.nyatla.nyartoolkit.core.pickup;\r
 \r
 \r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.NyARMat;\r
+import jp.nyatla.nyartoolkit.core.NyARSquare;\r
 import jp.nyatla.nyartoolkit.core.raster.INyARRaster;\r
 \r
 /**\r
@@ -42,7 +44,7 @@ import jp.nyatla.nyartoolkit.core.raster.INyARRaster;
  * 演算順序を含む最適化をしたもの\r
  *\r
  */\r
-public class NyARColorPatt_O3 implements NyARColorPatt\r
+public class NyARColorPatt_O3 implements INyColorPatt\r
 {\r
     private static final int AR_PATT_SAMPLE_NUM=64;//#define   AR_PATT_SAMPLE_NUM   64\r
     private int extpat[][][];\r
@@ -90,38 +92,39 @@ public class NyARColorPatt_O3 implements NyARColorPatt
      * @param o_para\r
      * @throws NyARException\r
      */\r
-    private boolean get_cpara(double vertex_0[], double vertex_1[],NyARMat o_para) throws NyARException\r
+    private boolean get_cpara(int[][] vertex,NyARMat o_para) throws NyARException\r
     {\r
-       double world[][]=this.wk_pickFromRaster_world;\r
+       int world[][]=this.wk_pickFromRaster_world;\r
        NyARMat a =wk_get_cpara_a;//次処理で値を設定するので、初期化不要// new NyARMat( 8, 8 );\r
        double[][] a_array=a.getArray();\r
        NyARMat b =wk_get_cpara_b;//次処理で値を設定するので、初期化不要// new NyARMat( 8, 1 );\r
        double[][] b_array=b.getArray();\r
-       double[] a_pt0,a_pt1,world_pti;\r
+       double[] a_pt0,a_pt1;\r
+       int[] world_pti;\r
 \r
        for(int i = 0; i < 4; i++ ) {\r
            a_pt0=a_array[i*2];\r
            a_pt1=a_array[i*2+1];\r
            world_pti=world[i];\r
 \r
-           a_pt0[0]=world_pti[0];//a->m[i*16+0]  = world[i][0];\r
-           a_pt0[1]=world_pti[1];//a->m[i*16+1]  = world[i][1];\r
+           a_pt0[0]=(double)world_pti[0];//a->m[i*16+0]  = world[i][0];\r
+           a_pt0[1]=(double)world_pti[1];//a->m[i*16+1]  = world[i][1];\r
            a_pt0[2]=1.0;//a->m[i*16+2]  = 1.0;\r
            a_pt0[3]=0.0;//a->m[i*16+3]  = 0.0;\r
            a_pt0[4]=0.0;//a->m[i*16+4]  = 0.0;\r
            a_pt0[5]=0.0;//a->m[i*16+5]  = 0.0;\r
-           a_pt0[6]=-world_pti[0] * vertex_0[i];//a->m[i*16+6]  = -world[i][0] * vertex[i][0];\r
-           a_pt0[7]=-world_pti[1] * vertex_0[i];//a->m[i*16+7]  = -world[i][1] * vertex[i][0];\r
+           a_pt0[6]=(double)(-world_pti[0] * vertex[i][0]);//a->m[i*16+6]  = -world[i][0] * vertex[i][0];\r
+           a_pt0[7]=(double)(-world_pti[1] * vertex[i][0]);//a->m[i*16+7]  = -world[i][1] * vertex[i][0];\r
            a_pt1[0]=0.0;//a->m[i*16+8]  = 0.0;\r
            a_pt1[1]=0.0;//a->m[i*16+9]  = 0.0;\r
            a_pt1[2]=0.0;//a->m[i*16+10] = 0.0;\r
-           a_pt1[3]=world_pti[0];//a->m[i*16+11] = world[i][0];\r
-           a_pt1[4]=world_pti[1];//a->m[i*16+12] = world[i][1];\r
+           a_pt1[3]=(double)world_pti[0];//a->m[i*16+11] = world[i][0];\r
+           a_pt1[4]=(double)world_pti[1];//a->m[i*16+12] = world[i][1];\r
            a_pt1[5]=1.0;//a->m[i*16+13] = 1.0;\r
-           a_pt1[6]=-world_pti[0] * vertex_1[i];//a->m[i*16+14] = -world[i][0] * vertex[i][1];\r
-           a_pt1[7]=-world_pti[1] * vertex_1[i];//a->m[i*16+15] = -world[i][1] * vertex[i][1];\r
-           b_array[i*2+0][0]=vertex_0[i];//b->m[i*2+0] = vertex[i][0];\r
-           b_array[i*2+1][0]=vertex_1[i];//b->m[i*2+1] = vertex[i][1];\r
+           a_pt1[6]=(double)(-world_pti[0] * vertex[i][1]);//a->m[i*16+14] = -world[i][0] * vertex[i][1];\r
+           a_pt1[7]=(double)(-world_pti[1] * vertex[i][1]);//a->m[i*16+15] = -world[i][1] * vertex[i][1];\r
+           b_array[i*2+0][0]=(double)vertex[i][0];//b->m[i*2+0] = vertex[i][0];\r
+           b_array[i*2+1][0]=(double)vertex[i][1];//b->m[i*2+1] = vertex[i][1];\r
        }\r
        if(!a.matrixSelfInv()){\r
            return false;\r
@@ -132,11 +135,11 @@ public class NyARColorPatt_O3 implements NyARColorPatt
     }\r
 \r
   //   private final double[] wk_pickFromRaster_para=new double[9];//[3][3];\r
-    private final double[][] wk_pickFromRaster_world={//double    world[4][2];\r
-           {100.0,     100.0},\r
-           {100.0+10.0,100.0},\r
-           {100.0+10.0,100.0 + 10.0},\r
-           {100.0,     100.0 + 10.0}\r
+    private final int[][] wk_pickFromRaster_world={//double    world[4][2];\r
+           {100,   100},\r
+           {100+10,100},\r
+           {100+10,100 + 10},\r
+           {100,   100 + 10}\r
     };\r
     /**\r
      * pickFromRaster関数から使う変数です。\r
@@ -157,7 +160,6 @@ public class NyARColorPatt_O3 implements NyARColorPatt
            }\r
        }\r
     }\r
-    private final double[][] wk_pickFromRaster_local=new double[2][4];\r
     private final NyARMat wk_pickFromRaster_cpara=new NyARMat(8,1);\r
     /**\r
      * imageから、i_markerの位置にあるパターンを切り出して、保持します。\r
@@ -169,26 +171,27 @@ public class NyARColorPatt_O3 implements NyARColorPatt
     public boolean pickFromRaster(INyARRaster image, NyARSquare i_square) throws NyARException\r
     {\r
        NyARMat cpara=this.wk_pickFromRaster_cpara;\r
-       //localの計算\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] = i_square.imvertex[i][0];\r
-           local_1[i] = i_square.imvertex[i][1];\r
-       }\r
+       int[][] local=i_square.imvertex;\r
+//     //localの計算\r
+//     int[] local_0=wk_pickFromRaster_local[0];//double    local[4][2];       \r
+//     int[] local_1=wk_pickFromRaster_local[1];//double    local[4][2];       \r
+//     //\r
+//     for(int i = 0; i < 4; 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
        int l1,l2;\r
-       double w1,w2;\r
+       int w1,w2;\r
 \r
        //x計算\r
-       w1=local_0[0] - local_0[1];\r
-       w2=local_1[0] - local_1[1];\r
-       l1 = (int)(w1*w1+w2*w2);\r
-       w1=local_0[2] - local_0[3];\r
-       w2=local_1[2] - local_1[3];\r
-       l2 = (int)(w1*w1+w2*w2);\r
+       w1=local[0][0] - local[1][0];\r
+       w2=local[0][1] - local[1][1];\r
+       l1 =(w1*w1+w2*w2);\r
+       w1=local[2][0] - local[3][0];\r
+       w2=local[2][1] - local[3][1];\r
+       l2 =(w1*w1+w2*w2);\r
        if( l2 > l1 ){\r
            l1 = l2;\r
        }\r
@@ -203,12 +206,12 @@ public class NyARColorPatt_O3 implements NyARColorPatt
        }\r
        \r
        //y計算\r
-       w1=local_0[1] - local_0[2];\r
-       w2=local_1[1] - local_1[2];\r
-       l1 = (int)(w1*w1+ w2*w2);\r
-       w1=local_0[3] - local_0[0];\r
-       w2=local_1[3] - local_1[0];\r
-       l2 = (int)(w1*w1+ w2*w2);\r
+       w1=local[1][0] - local[2][0];\r
+       w2=local[1][1] - local[2][1];\r
+       l1 = (w1*w1+ w2*w2);\r
+       w1=local[3][0] - local[0][0];\r
+       w2=local[3][1] - local[0][1];\r
+       l2 = (w1*w1+ w2*w2);\r
        if( l2 > l1 ){\r
            l1 = l2;\r
        }\r
@@ -223,7 +226,7 @@ public class NyARColorPatt_O3 implements NyARColorPatt
        }       \r
        \r
        //cparaの計算\r
-       if(!get_cpara(local_0,local_1,cpara)){\r
+       if(!get_cpara(local,cpara)){\r
            return false;\r
        }\r
        updateExtpat(image,cpara,xdiv2,ydiv2);\r
  *     <airmail(at)ebony.plala.or.jp>\r
  * \r
  */\r
-package jp.nyatla.nyartoolkit.core;\r
+package jp.nyatla.nyartoolkit.core.transmat;\r
 \r
 \r
 \r
 \r
 import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.NyARSquare;\r
 \r
 \r
 /**\r
@@ -43,7 +44,7 @@ import jp.nyatla.nyartoolkit.*;
  * 変換行列を計算するクラス。\r
  *\r
  */\r
-public interface NyARTransMat{\r
+public interface INyARTransMat{\r
     public void setCenter(double i_x,double i_y);\r
     public double transMat(NyARSquare i_square,int i_direction, double i_width,NyARTransMatResult o_result)throws NyARException;\r
     public double transMatContinue(NyARSquare i_square,int i_direction, double i_width,NyARTransMatResult io_result_conv)throws NyARException;\r
  *     <airmail(at)ebony.plala.or.jp>\r
  * \r
  */\r
-package jp.nyatla.nyartoolkit.core;\r
-\r
+package jp.nyatla.nyartoolkit.core.transmat;\r
 import jp.nyatla.nyartoolkit.*;\r
+import jp.nyatla.nyartoolkit.core.NyARMat;\r
+\r
 /**\r
  * NyARTransMat戻り値専用のNyARMat\r
  *\r
  *     <airmail(at)ebony.plala.or.jp>\r
  * \r
  */\r
-package jp.nyatla.nyartoolkit.core;\r
+package jp.nyatla.nyartoolkit.core.transmat;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.NyARMat;\r
+import jp.nyatla.nyartoolkit.core.NyARParam;\r
+import jp.nyatla.nyartoolkit.core.NyARSquare;\r
 import jp.nyatla.util.DoubleValue;\r
 \r
-public class NyARTransMat_O1 implements NyARTransMat{\r
+public class NyARTransMat_O1 implements INyARTransMat{\r
     private final static int AR_FITTING_TO_IDEAL=0;//#define  AR_FITTING_TO_IDEAL          0\r
     private final static int AR_FITTING_TO_INPUT=1;//#define  AR_FITTING_TO_INPUT          1\r
     private final static int   arFittingMode   =AR_FITTING_TO_INPUT;\r
  *     <airmail(at)ebony.plala.or.jp>\r
  * \r
  */\r
-package jp.nyatla.nyartoolkit.core;\r
+package jp.nyatla.nyartoolkit.core.transmat;\r
 \r
 \r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.NyARMat;\r
+import jp.nyatla.nyartoolkit.core.NyARParam;\r
+import jp.nyatla.nyartoolkit.core.NyARSquare;\r
 import jp.nyatla.util.DoubleValue;\r
 \r
 \r
@@ -46,7 +49,7 @@ import jp.nyatla.util.DoubleValue;
  * 変換行列を計算して、結果を保持するクラス。\r
  *\r
  */\r
-public class NyARTransMat_O2 implements NyARTransMat\r
+public class NyARTransMat_O2 implements INyARTransMat\r
 {\r
     private final static int AR_FITTING_TO_IDEAL=0;//#define  AR_FITTING_TO_IDEAL          0\r
     private final static int AR_FITTING_TO_INPUT=1;//#define  AR_FITTING_TO_INPUT          1\r
@@ -1,8 +1,11 @@
-package jp.nyatla.nyartoolkit.core;\r
+package jp.nyatla.nyartoolkit.core.transmat;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.NyARMat;\r
+import jp.nyatla.nyartoolkit.core.NyARParam;\r
+import jp.nyatla.nyartoolkit.core.NyARSquare;\r
 \r
-interface NyARTransRot\r
+public interface NyARTransRot\r
 {\r
     public double[] getArray();\r
     /**\r
index 4f61c84..6063ca4 100644 (file)
@@ -34,7 +34,12 @@ package jp.nyatla.nyartoolkit.detector;
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.*;\r
 import jp.nyatla.nyartoolkit.core.match.NyARMatchPatt_Color_WITHOUT_PCA;\r
+import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
+import jp.nyatla.nyartoolkit.core.pickup.NyARColorPatt_O3;\r
 import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.core.transmat.INyARTransMat;\r
+import jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;\r
+import jp.nyatla.nyartoolkit.core.transmat.NyARTransMat_O2;\r
 \r
 \r
 \r
@@ -75,11 +80,11 @@ public class NyARDetectMarker{
     private NyARDetectSquare square;\r
     private final NyARSquareList square_list=new NyARSquareList(AR_SQUARE_MAX);\r
     private NyARCode[] codes;\r
-    protected NyARTransMat transmat;\r
+    protected INyARTransMat transmat;\r
     private double[] marker_width;\r
     private int number_of_code;\r
     //検出結果の保存用\r
-    private NyARColorPatt patt;\r
+    private INyColorPatt patt;\r
     \r
     private NyARDetectMarkerResultHolder result_holder=new NyARDetectMarkerResultHolder();\r
     \r
index 3c3a10c..2c2c858 100644 (file)
@@ -34,7 +34,12 @@ package jp.nyatla.nyartoolkit.detector;
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.*;\r
 import jp.nyatla.nyartoolkit.core.match.NyARMatchPatt_Color_WITHOUT_PCA;\r
+import jp.nyatla.nyartoolkit.core.pickup.INyColorPatt;\r
+import jp.nyatla.nyartoolkit.core.pickup.NyARColorPatt_O3;\r
 import jp.nyatla.nyartoolkit.core.raster.*;\r
+import jp.nyatla.nyartoolkit.core.transmat.INyARTransMat;\r
+import jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;\r
+import jp.nyatla.nyartoolkit.core.transmat.NyARTransMat_O2;\r
 /**\r
  * 画像からARCodeに最も一致するマーカーを1個検出し、その変換行列を計算するクラスです。\r
  *\r
@@ -46,13 +51,13 @@ public class NyARSingleDetectMarker{
     private NyARDetectSquare square;\r
     private final NyARSquareList square_list=new NyARSquareList(AR_SQUARE_MAX);\r
     private NyARCode code;\r
-    protected NyARTransMat transmat;\r
+    protected INyARTransMat transmat;\r
     private double marker_width;\r
     //検出結果の保存用\r
     private int detected_direction;\r
     private double detected_confidence;\r
     private NyARSquare detected_square;\r
-    private NyARColorPatt patt;\r
+    private INyColorPatt patt;\r
     /**\r
      * 検出するARCodeとカメラパラメータから、1個のARCodeを検出するNyARSingleDetectMarkerインスタンスを作ります。\r
      * @param i_param\r
index 8fc2013..e0517cb 100644 (file)
@@ -33,6 +33,7 @@ import java.util.*;
 import jp.nyatla.nyartoolkit.core.*;\r
 import jp.nyatla.nyartoolkit.core.raster.*;\r
 import jp.nyatla.nyartoolkit.detector.*;\r
+import jp.nyatla.nyartoolkit.core.transmat.*;\r
 \r
 /**\r
  * 320x240のBGRA32で記録されたRAWイメージから、1種類のパターンを認識し、\r