4

LSH はバイナリ文字列で使用され、インデックス作成と検索に非常に効率的です。SIFT はバイナリ ディスクリプタではありませんが、そこで利用できる最良のディスクリプタです。LSH で SIFT を使用することは可能ですか? また、SIFT 機能に使用できるより優れたインデックス作成手法はありますか?

OpenCV で LSH を使用する FLANNBased Matcher で SIFT を使用しようとしましたが、次のエラーが発生します。

what(): C:\OpenCV\opencv\modules\flann\src\miniflann.cpp:315: エラー: (-210) type=5 in function buildIndex_

コード:

cv::Ptr<cv::FlannBasedMatcher> matcher = new cv::FlannBasedMatcher(new cv::flann::LshIndexParams(5, 24, 2));
        matcher->match( descriptors, descriptors1, matches );

注: この質問は dsp.stackexchange.com でより適切でしたが、現在は読み取り専用モードになっています。

4

2 に答える 2

3

SIFT に使用される 2 つの最適なインデックス作成手法はkd-tree と k-meansです。試してみてください。どちらもOpenCV の一部である FLANN マッチャーに実装されています。この 2 つの論文では、SIFT の FLANN と LSH を比較しています。

"ローカリティに敏感なハッシング: ハッシュ関数のタイプとクエリメカニズムの比較"

SIFT ベクトルを使用してデータベース テンプレートで画像を分析する方法

実際、Alexandr Andoni は、あなたが望むものと非常によく似たものを実装しました。

于 2013-11-10T14:03:16.300 に答える
3

LSH は、バイナリ文字列を出力する次元削減のアルゴリズムです。これは、実数値の高次元データ (ただし多様体などの本質的に低次元のデータ) をバイナリ コードでインデックス化するように設計されています。

LSH を自分で実装して、SIFT 記述子で動作できるようにすることができます。単純で最も簡単な方法は、ランダムな射影を使用することですが、SIFT 記述子が勾配方向ヒストグラムの集合体であるという事実を使用した、より巧妙なスキームを利用して、より効率的なハッシュ関数を生成できる可能性があります。

于 2013-11-09T20:46:24.247 に答える