Example #1
0
        /**
         * この関数は、現在の基準パターンと検査パターンを比較して、類似度を計算します。
         * @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;
        }