--- /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.match;\r
+\r
+import jp.nyatla.nyartoolkit.NyARException;\r
+import jp.nyatla.nyartoolkit.core.*;\r
+\r
+/**\r
+ * AR_TEMPLATE_MATCHING_COLORかつAR_MATCHING_WITHOUT_PCAと同等のルールで\r
+ * マーカーを評価します。\r
+ *\r
+ */\r
+public class NyARMatchPatt_Color_WITHOUT_PCA implements NyARMatchPatt{\r
+ private int[][][] input=new int[1][1][3];\r
+ private double datapow;\r
+\r
+ private int width =1;\r
+ private int height=1;\r
+ private double cf=0;\r
+ private int dir=0;\r
+ public double getConfidence(){\r
+ return cf;\r
+ }\r
+ public int getDirection(){\r
+ return dir;\r
+ }\r
+ /**\r
+ * input配列サイズを必要に応じて再アロケートする。\r
+ *\r
+ * @param i_width\r
+ * @param i_height\r
+ */\r
+ private void reallocInputArray(int i_width,int i_height)\r
+ {\r
+ if(this.input.length<i_height || this.input[0].length<i_width){\r
+ //配列が十分なサイズでなければ取り直す\r
+ this.input=new int[i_height][i_width][3]; \r
+ }\r
+ this.height=i_height;\r
+ this.width =i_width;\r
+ }\r
+ public boolean setPatt(NyARColorPatt i_target_patt) throws NyARException\r
+ { \r
+ int i,k;\r
+ int[][][] data,linput;\r
+ \r
+ //input配列のサイズとwhも更新// input=new int[height][width][3];\r
+ reallocInputArray(i_target_patt.getWidth(),i_target_patt.getHeight());\r
+ int lwidth =this.width;\r
+ int lheight=this.height;\r
+ linput=this.input;\r
+ data=i_target_patt.getPatArray();\r
+\r
+ int sum=0,l_ave=0,w_sum;\r
+ int[][] data_i,input_i;\r
+ int[] data_i_k,input_i_k;\r
+ for(i=lheight-1;i>=0;i--){//<Optimize/>for(int i=0;i<height;i++) {//for(int i=0;i<Config.AR_PATT_SIZE_Y;i++){\r
+ data_i=data[i];\r
+ for(k=lwidth-1;k>=0;k--) {//<Optimize/>for(int i2=0;i2<Config.AR_PATT_SIZE_X;i2++){\r
+ //<Optimize/>l_ave += (255-data[i][i2][0])+(255-data[i][i2][1])+(255-data[i][i2][2]);\r
+ data_i_k=data_i[k];\r
+ l_ave += 255*3-data_i_k[0]-data_i_k[1]-data_i_k[2];\r
+ }\r
+ }\r
+ l_ave /= (lheight*lwidth*3);\r
+ for(i=lheight-1;i>=0;i--){//for(i=0;i<height;i++){//for(int i=0;i<Config.AR_PATT_SIZE_Y;i++){\r
+ input_i=linput[i];\r
+ data_i=data[i];\r
+ for(k=lwidth-1;k>=0;k--){//for(i2=0;i2<width;i2++){//for(int i2=0;i2<Config.AR_PATT_SIZE_X;i2++){\r
+ //<Optimize>\r
+ //for(int i3=0;i3<3;i3++){\r
+ // input[i][i2][i3] = (255-data[i][i2][i3]) - l_ave;\r
+ // sum += input[i][i2][i3]*input[i][i2][i3];\r
+ //}\r
+ data_i_k =data_i[k];\r
+ input_i_k=input_i[k];\r
+ w_sum=(255-data_i_k[0]) - l_ave;\r
+ input_i_k[0]=w_sum;\r
+ sum += w_sum*w_sum;\r
+ \r
+ w_sum=(255-data_i_k[1]) - l_ave;\r
+ input_i_k[1]=w_sum;\r
+ sum += w_sum*w_sum;\r
+ \r
+ w_sum=(255-data_i_k[2]) - l_ave;\r
+ input_i_k[2]=w_sum;\r
+ sum+=w_sum*w_sum;\r
+ //</Optimize>\r
+ }\r
+ }\r
+ datapow = Math.sqrt( (double)sum );\r
+ if(datapow == 0.0){\r
+ return false;// throw new NyARException();\r
+// dir.set(0);//*dir = 0;\r
+// cf.set(-1.0);//*cf = -1.0;\r
+// return -1;\r
+ }\r
+ return true;\r
+ }\r
+ /**\r
+ * public int pattern_match(short[][][] data,IntPointer dir,DoublePointer cf)\r
+\r
+ */\r
+ public void evaluate(NyARCode i_code)\r
+ {\r
+ int[][][][] pat=i_code.getPat();\r
+ double[] patpow=i_code.getPatPow();\r
+ int res= -1;\r
+ double max=0.0;\r
+ int[][][] pat_j,linput;\r
+ int[][] pat_j_i,input_i;\r
+ int[] pat_j_i_k,input_i_k;\r
+ int l_width=this.width;\r
+ int l_height=this.height;\r
+ linput=this.input;\r
+ for(int j = 0; j < 4; j++ ) {\r
+ int sum = 0;\r
+ pat_j=pat[j];\r
+ for(int i=l_height-1;i>=0;i--){//for(int i=0;i<Config.AR_PATT_SIZE_Y;i++){\r
+ input_i=linput[i];\r
+ pat_j_i=pat_j[i];\r
+ for(int k=l_width-1;k>=0;k--){\r
+ pat_j_i_k=pat_j_i[k];\r
+ input_i_k=input_i[k];\r
+// for(int i3=0;i3<3;i3++){\r
+ sum += input_i_k[0]*pat_j_i_k[0];//sum += input[i][i2][i3]*pat[k][j][i][i2][i3];\r
+ sum += input_i_k[1]*pat_j_i_k[1];//sum += input[i][i2][i3]*pat[k][j][i][i2][i3];\r
+ sum += input_i_k[2]*pat_j_i_k[2];//sum += input[i][i2][i3]*pat[k][j][i][i2][i3];\r
+// }\r
+ }\r
+ }\r
+ double sum2 = sum / patpow[j] / datapow;//sum2 = sum / patpow[k][j] / datapow;\r
+ if( sum2 > max ){\r
+ max = sum2;\r
+ res = j;\r
+ }\r
+ }\r
+ dir=res;\r
+ cf=max;\r
+ }\r
+}
\ No newline at end of file