/** * この関数は、現在の基準パターンと検査パターンを比較して、類似度を計算します。 * @param i_patt * 検査パターンを格納したオブジェクトです。このサイズは、基準パターンと一致している必要があります。 * @param o_result * 結果を受け取るオブジェクトです。 * @return * 検査に成功するとtrueを返します。 * @ */ public bool evaluate(NyARMatchPattDeviationBlackWhiteData i_patt, NyARMatchPattResult o_result) { Debug.Assert(this._ref_code_patt != null); int[] linput = i_patt.getData(); int sum; double max = 0.0; int res = NyARMatchPattResult.DIRECTION_UNKNOWN; for (int j = 0; j < 4; j++) { //合計値初期化 sum = 0; NyARMatchPattDeviationBlackWhiteData code_patt = this._ref_code_patt.getBlackWhiteData(j); int[] pat_j = code_patt.getData(); //<全画素について、比較(FORの1/16展開)/> int i; for (i = this._pixels - 1; i >= 0; i--) { sum += linput[i] * pat_j[i]; } //0.7776737688877927がでればOK double sum2 = sum / code_patt.getPow() / i_patt.getPow();// sum2 = sum / patpow[k][j]/ datapow; if (sum2 > max) { max = sum2; res = j; } } o_result.direction = res; o_result.confidence = max; return(true); }
/** * 現在セットされているコードとパターンを比較して、結果値o_resultを更新します。 * 比較部分はFor文を16倍展開してあります。 */ public bool evaluate(NyARMatchPattDeviationBlackWhiteData i_patt, NyARMatchPattResult o_result) { Debug.Assert(this._code_patt != null); int[] linput = i_patt.refData(); int sum; double max = 0.0; int res = NyARMatchPattResult.DIRECTION_UNKNOWN; for (int j = 0; j < 4; j++) { //合計値初期化 sum = 0; NyARMatchPattDeviationBlackWhiteData code_patt = this._code_patt.getBlackWhiteData(j); int[] pat_j = code_patt.refData(); //<全画素について、比較(FORの1/16展開)/> int i; for (i = this._pixels - 1; i >= 0; i--) { sum += linput[i] * pat_j[i]; } //0.7776737688877927がでればOK double sum2 = sum / code_patt.getPow() / i_patt.getPow();// sum2 = sum / patpow[k][j]/ datapow; if (sum2 > max) { max = sum2; res = j; } } o_result.direction = res; o_result.confidence = max; return true; }