1

1000枚を超える画像の一連の画像があります。すべての画像について、SURF 記述子を抽出します。ここで、クエリ Image を追加し、画像セット内で最も類似した画像を見つけようとします。パフォーマンスとメモリの理由から、記述子を使用して各画像 200 キーポイントを抽出するだけです。そして、これは多かれ少なかれ私の問題です。現時点では、次のようにして一致をフィルタリングします。

Symmetrie Matching: 両方向の単純な BruteForce マッチング。したがって、Image1 から Image2 へ、Image2 から Image1 へ。両方向に存在する一致を保持するだけです。

    List<Matches> match1 = BruteForceMatching.BFMatch(act.interestPoints, query.interestPoints);
    List<Matches> match2 = BruteForceMatching.BFMatch(query.interestPoints, act.interestPoints);

    List<Matches> finalMatch = FeatureMatchFilter.DoSymmetryTest(match1, match2);

    float distance = 0;
    for(int i = 0; i < finalMatch.size(); i++)
        distance += finalMatch.get(i).distance;

    act.pic.distance = distance * (float) query.interestPoints.size() / (float) finalMatch.size();

より多くのフィルター方法があることを知っています。ご覧のとおり、最終試合の数で距離を重み付けしようとしています。しかし、私はこれを正しくやっているという感覚はありません。他のアプローチを見ると、それらはすべて、画像に存在するすべての抽出対象ポイントで計算されているように見えます。誰かがこれに対する良いアプローチを持っていますか? または、距離に重み付けすることをお勧めしますか?

絶対的な解決策がないことはわかっていますが、いくつかの経験、アイデア、およびその他のアプローチが非常に役立ちます。

4

1 に答える 1

0

したがって、「match1」はデータベース画像の 1 つの直接一致を表し、「match2」はクエリ画像を表し、「finalMatch」はこれらの画像間のすべての一致であり、「finalMatch.get(i).distance」は間のある種の平均値です。 2 つの有向距離。

つまり、距離の合計の平均を計算し、関心のあるポイントの数でスケーリングします。私が想定している目標は、全体的な画像がどの程度一致しているかを適切に測定することです。

あなたが計算した距離は、その類似性をうまく反映していないと確信しています。距離の合計を一致数で割ることはある程度理にかなっています。これにより、他のクエリ画像と比較した場合の類似性がわかりますが、この値を関心点の数でスケーリングしても意味はありません。

まず、このスケーリングを取り除くことをお勧めします。ブルートフォースマッチングが正確に何をするのかわかりませんが、対称性テストに加えて、最初の候補と2番目の候補の比率が高すぎる一致を破棄する必要があります(私の記憶が正しければ、Loweは0.8のしきい値を提案しています) . 次に、固定シーンの場合は、ある種の基本的な行列推定 (8 ポイント アルゴリズム + RANSAC) を適用し、エピポーラ ジオメトリを使用して結果をフィルタリングすることをお勧めします。「実際の」一致の平均記述子距離から、データベース画像とクエリの「類似性」について良い考えが得られると確信しています。

于 2014-06-26T10:01:39.800 に答える