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();
より多くのフィルター方法があることを知っています。ご覧のとおり、最終試合の数で距離を重み付けしようとしています。しかし、私はこれを正しくやっているという感覚はありません。他のアプローチを見ると、それらはすべて、画像に存在するすべての抽出対象ポイントで計算されているように見えます。誰かがこれに対する良いアプローチを持っていますか? または、距離に重み付けすることをお勧めしますか?
絶対的な解決策がないことはわかっていますが、いくつかの経験、アイデア、およびその他のアプローチが非常に役立ちます。