0

そこで、FAST 検出器と FREAK 記述子を使用してアプリケーションを作成しています。マッチングに関しては、BRUTEFORCE_HAMMING マッチングを使用したかったのですが、期待した結果が得られません (元の画像とは関係のない画像との一致が多くなり、次に似ている画像が得られます)。

次のコードを試しました

 MatOfDMatch matches = new MatOfDMatch();

        matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMING);
        matcher.match(descriptors,descriptors1,matches);
        MatOfDMatch goedematches = new MatOfDMatch();

        double max_dist = 0;
        double min_dist = 100;
        //if (descriptors.cols() == descriptors1.cols())
        //{
        for( int i = 0; i < descriptors.rows(); i++ )
        { double dist = matches.toArray()[i].distance;
          if( dist < min_dist ) min_dist = dist;
          if( dist > max_dist ) max_dist = dist;
        }
        // should only draw good matches
       for( int i = 0; i < descriptors.rows(); i++ )
        {  MatOfDMatch temp = new MatOfDMatch();
           if( matches.toArray()[i].distance <= 2*min_dist )
           {   temp.fromArray(matches.toArray()[i]);
               goedematches.push_back(temp); 
               }        
       // }
        }

       Log.d("LOG!", "Number of good matches= " + goedematches.size());

しかし、それは「悪い」結果を返します。私の質問は、これを FREAK 記述子と一致させる他の方法はありますか? (私は OpenCV ライブラリ 2.4.4 と Java ラッパーを使用しているため、C コードはありません)

4

3 に答える 3

1

記述子を取得したら、最初の画像の記述子を 2 番目の画像のすべての記述子と一致させようとするため、ブルート フォース アプローチにより、最も近い一致を見つけることができます。

したがって、答えはノーです。FREAK ディスクリプターを使用して得られる最良の結果 (ハミング距離に関して) は、ブルート フォース マッチングで得られる結果です。

(これは、画像が類似している場合、多くの良い一致と悪い一致が得られるはずです。一致を描画しようとしましたか?フィルタリング手順を使用せずに、一致の間に線を引いてみてください。)

于 2013-05-03T16:14:07.043 に答える
0

FREAK はそれ自体では回転およびスケール不変ではないため、悪い結果が得られる可能性があります。それらのキーポイントの周りで BRISK キーポイント検出と FREAK 記述子を使用してみてください。

JavaCV では、記述子マットを null に設定すると、BRISK キーポイント検出を使用できます。

于 2013-12-05T01:01:12.223 に答える