/** * この関数は、現在の基準パターンと検査パターンを比較して、類似度を計算します。 * @param i_patt * 検査パターンを格納したオブジェクトです。このサイズは、基準パターンと一致している必要があります。 * @param o_result * 結果を受け取るオブジェクトです。 * @return * 検査に成功するとtrueを返します。 * @ */ public bool evaluate(NyARMatchPattDeviationColorData i_patt, NyARMatchPattResult o_result) { Debug.Assert(this._code_patt != null); // int[] linput = i_patt.getData(); int sum; double max = double.MinValue; int res = NyARMatchPattResult.DIRECTION_UNKNOWN; int for_mod = this._optimize_for_mod; for (int j = 0; j < 4; j++) { //合計値初期化 sum = 0; NyARMatchPattDeviationColorData code_patt = this._code_patt.getColorData(j); int[] pat_j = code_patt.getData(); //<全画素について、比較(FORの1/16展開)> int i; for (i = this._rgbpixels - 1; i >= for_mod; i--) { sum += linput[i] * pat_j[i]; } for (; i >= 0;) { sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; } //<全画素について、比較(FORの1/16展開)/> double sum2 = sum / code_patt.getPow();// sum2 = sum / patpow[k][j]/ datapow; if (sum2 > max) { max = sum2; res = j; } } o_result.direction = res; o_result.confidence = max / i_patt.getPow(); return(true); }
protected NyARSingleDetectMarker(NyARParam i_ref_param, NyARCode i_ref_code, double i_marker_width) { this._deviation_data = new NyARMatchPattDeviationColorData(i_ref_code.getWidth(), i_ref_code.getHeight()); this._match_patt = new NyARMatchPatt_Color_WITHOUT_PCA(i_ref_code); this._offset = new NyARRectOffset(); this._offset.setSquare(i_marker_width); this._coordline = new NyARCoord2Linear(i_ref_param.getScreenSize(), i_ref_param.getDistortionFactor()); //2値画像バッファを作る NyARIntSize s = i_ref_param.getScreenSize(); this._bin_raster = new NyARBinRaster(s.w, s.h); }
/** * この関数は、現在の基準パターンと検査パターンを比較して、類似度を計算します。 * @param i_patt * 検査パターンを格納したオブジェクトです。このサイズは、基準パターンと一致している必要があります。 * @param o_result * 結果を受け取るオブジェクトです。 * @return * 検査に成功するとtrueを返します。 * @ */ public bool evaluate(NyARMatchPattDeviationColorData i_patt, NyARMatchPattResult o_result) { Debug.Assert(this._code_patt != null); // int[] linput = i_patt.getData(); int sum; double max = double.MinValue; int res = NyARMatchPattResult.DIRECTION_UNKNOWN; int for_mod = this._optimize_for_mod; for (int j = 0; j < 4; j++) { //合計値初期化 sum = 0; NyARMatchPattDeviationColorData code_patt = this._code_patt.getColorData(j); int[] pat_j = code_patt.getData(); //<全画素について、比較(FORの1/16展開)> int i; for (i = this._rgbpixels - 1; i >= for_mod; i--) { sum += linput[i] * pat_j[i]; } for (; i >= 0; ) { sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; sum += linput[i] * pat_j[i]; i--; } //<全画素について、比較(FORの1/16展開)/> double sum2 = sum / code_patt.getPow();// sum2 = sum / patpow[k][j]/ datapow; if (sum2 > max) { max = sum2; res = j; } } o_result.direction = res; o_result.confidence = max / i_patt.getPow(); return true; }
public Item(int i_patt_w, int i_patt_h, int i_edge_percentage) { int r = 1; //解像度は幅を基準にする。 while (i_patt_w * r < 64) { r *= 2; } this._patt = new NyARRgbRaster(i_patt_w, i_patt_h, NyARBufferType.INT1D_X8R8G8B8_32, true); this._patt_d = new NyARMatchPattDeviationColorData(i_patt_w, i_patt_h); this._patt_edge = i_edge_percentage; this._patt_resolution = r; }
public void setNyARCodeTable(NyARCode[] i_ref_code, int i_code_resolution) { /*unmanagedで実装するときは、ここでリソース解放をすること。*/ this._deviation_data = new NyARMatchPattDeviationColorData(i_code_resolution, i_code_resolution); this._inst_patt = new NyARColorPatt_Perspective(i_code_resolution, i_code_resolution, 4, 25); this._match_patt = new NyARMatchPatt_Color_WITHOUT_PCA[i_ref_code.Length]; for (int i = 0; i < i_ref_code.Length; i++) { this._match_patt[i] = new NyARMatchPatt_Color_WITHOUT_PCA(i_ref_code[i]); } }