+++ /dev/null
-/* \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
* @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
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
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
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
\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
+++ /dev/null
-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
*\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
{\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
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
{\r
return this._image;\r
}\r
- public NyARLabelList getLabelList()\r
+ public NyLabelingLabelList getLabelList()\r
{\r
return this._label_list;\r
}\r
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
* 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
//アロケート\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
-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
* <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
\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
\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
}\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
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
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
\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
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
\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
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
\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
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
* 演算順序以外の最適化をしたもの\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
* 演算順序を含む最適化をしたもの\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
* @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
}\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
}\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
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
}\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
} \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
* 変換行列を計算するクラス。\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
* 変換行列を計算して、結果を保持するクラス。\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
-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
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
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
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
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
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