2012-10-10 14 views
6

2つの画像AとBがあります。それらからキーポイント(a [i]とb [i])を抽出します。
a [i]とb [j]のマッチングを効率的に決定するにはどうすればよいのでしょうか?SIFT記述子照合のための効率的な方法

明らかな方法は、Aの各点とBの各点を比較することです。しかし、大きな画像データベースの場合は時間がかかります。どのようにして点a [i]とb [k]とを単に比較することができますか?

kd-treeが良い選択でしょうか? 良い例はありますかkd-tree

他の提案はありますか?

+1

kd- SIFT(これは[次元の呪い](http://en.wikipedia.org/wiki/Curse_of_dimensionality)として知られている)のような高次元を持つ記述子にとっては効率的ではありません。しかし、高次元空間における近似近似探索のための他の索引付け方法が存在する。 OpenCVに含まれるFLANNは1つです。そして、FLANNを使ったキーポイントマッチングの実装があります。私の答えは – remi

答えて

11

KDツリーは、マッチングを実行するときに最も類似したディスクリプタを見つけるのが本当に速くなるように、訓練されたディスクリプタを格納します。KD-木を本当に使いやすいですOpenCVので

、私はFLANNマッチャーのためにあなたの例を与える:

flann::GenericIndex< cvflann::L2<int> > *tree; // the flann searching tree 
tree = new flann::GenericIndex< cvflann::L2<int> >(descriptors, cvflann::KDTreeIndexParams(4)); // a 4 k-d tree 

を次に、あなたがマッチングを行うとき:

const cvflann::SearchParams params(32); 
tree.knnSearch(queryDescriptors, indices, dists, 2, cvflann::SearchParams(8)); 
+2

のリンクを参照してください。コメントにする必要があるか、まさにリンクのみである場合には、「非常に低い品質」ではなく、ワークフローの観点から私たちを助けてくれます。しかし、私たちはそれを感謝し続ける! – casperOne

8

質問は、あなたが実際に 2の間の画像のマッチングキーポイントを決定し、または類似性尺度を計算したい天気です。

もしあなたがマッチングを決定したいのであれば、2つのイメージ間のすべての可能なディスクリプタペアをブルートフォースサーチする必要があります(FLANN - Fast Approximate Nearest Neighbor Search、しかし、私の経験では、画像あたり2000またはそれ以下のキーポイントを持っていれば、スピードアップは重要ではありません。空間的一貫性に関するセクション - 2番目の最も近い一致

  • J. Sivic and A. Zisserman. Video Google: A text retrieval approach to object matching in videosとの比較 -

    一方で、あなたはデータベース経由のみ類似度をしたい、場合は、起動するための適切な場所は次のようになります。

  • 4

    にアプローチをunderstanすることは非常に便利ですキーポイントのセットを一致させるために実装され、いくつかの戦略があります。 Common Interfaces of Descriptor Matchersに関するドキュメントをご覧ください。

    関連する問題