1

私のプロジェクトは、アンドロイドに基づくハーブ認識です。ORB を使用して、キーポイント、機能、および機能の照合を取得します。

このアルゴリズムを使用したい:

  1. 4 つの参照画像を使用し、それらの特徴 image1 を image1、1-2、1-3、1-4、2-3、3,4 に一致させます。
  2. 次に、データベースまでの最小距離と最大距離をしきい値として保存します。(最小しきい値 = 合計最小値/6)
  3. 新しい画像を認識したら、その新しい最小距離と最大距離をデータベースと比較します。しかし、私はそれを行う方法がわかりません。

{

for (j=MinID; j<=MaxID; j++){
                        MatOfDMatch matches = DetectUtility.match(features, matFromJson(DB.GetORBFitur(j)));
                        List<DMatch> matchesList = matches.toList();
                        Double max_dist = 0.0;
                        Double min_dist = 100.0;
                        for (int i = 0; i < matchesList.size(); i++){
                            Double dist = (double) matchesList.get(i).distance;
                            if (dist < min_dist && dist != 0){
                                min_dist = dist;
                            }
                            if (dist > max_dist){
                                max_dist = dist;
                            }
                        }

このサイトから、次のコードを取得します。

//-- Draw only "good" matches (i.e. whose distance is less than 3*min_dist )
std::vector< DMatch > good_matches;

for( int i = 0; i < descriptors_object.rows; i++ )
{ if( matches[i].distance < 3*min_dist )
 { good_matches.push_back( matches[i]); }
}   

その魔法の数 3 を取得する方法? そして、最大距離まで何をしなければなりませんか?

私が使用したいアルゴリズムは、以前に使用した Invariant Moment と City Block Distance を使用して、画像を最小距離に一致させました。

4

1 に答える 1

8

私も知りません。距離は特徴点の類似度の尺度であり、少ないほど良いです。元のORB 論文(図 5、下) は、良い一致と悪い一致の距離の分布を示しています。「適切な」距離のしきい値は 64 前後であると言えます。 ORBの距離分布

したがって、より正しいのは次のとおりです。

double dist_th = 64;
for( int i = 0; i < descriptors_object.rows; i++ )
{ if( matches[i].distance < dist_th )
 { good_matches.push_back( matches[i]); }
} 

そして、RANSAC を使用して一貫性のない一致をフィルタリングする必要があります。したがって、最も簡単な解決策は、クエリ イメージを 4 つのデータベース イメージすべてと一致させることです。

ただし、マッチングだけでなく、分類子を使用することをお勧めします。この男のアプローチを参照してください(うまくいきます、私は彼を知っています) - http://cmp.felk.cvut.cz/~sulcmila/

于 2014-04-04T09:24:11.860 に答える