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