LSH に関するいくつかの論文を読みましたが、それが近似 k-NN 問題の解決に使用されていることを知っています。アルゴリズムを 2 つの部分に分けることができます。
D
任意の値の次元 ( whereD
は大きい) のベクトルを指定すると、一連のN
( whereN<<D
) ハッシュ関数を使用してN
次元のバイナリ ベクトルに変換します。ハミング距離を使用して、フェーズ 1 から取得した特定のバイナリ コードのセットに検索手法を適用して、k-NN を見つけます。
N
重要な点は、 XOR を使用すると次元のベクトルのハミング距離を高速に計算できることです。
とにかく、私は2つの質問があります:
ポイント 1. ORB のようなバイナリ記述子を使用する場合は、まだ必要ですか? ORB の記述子は既にバイナリであり、それらを比較するためにハミング距離を使用するのに、なぜ最初のポイントを実行する必要があるのでしょうか?
SIFT で記述された画像の変換はどのように行われますか? 各 SIFT 記述子は 128 ビットで、各画像は一連の記述子によって記述されます。そのため、行列
descX128
(desc
は使用される記述子の数) がありますが、LSH は通常、ベクトルを入力として受け入れます。