SIFT 特徴マッチングは、ユークリッド距離ベースの最近傍法によって行われます。これを説明してもらえますか?計算はありますか?誰かが私のSIFT特徴ベクトルのユークリッド距離を計算するのを手伝ってくれますか? 計算されたユークリッド距離を保存して、画像の丸みや色などの機能を備えたニューラル ネットワークにフィードしたいと考えています。
2 に答える
ユークリッド距離による SIFT 特徴マッチングは、難しい作業ではありません。このプロセスは次のように説明できます。
両方のイメージの SIFT キーポイント記述子を抽出します。
1 つの画像から 1 つのキーポイント記述子 (参照記述子) を取得します。
2.1 次に、参照記述子と他の画像のすべてのキーポイント記述子の間のユークリッド距離を見つけます。
2.2 したがって、参照記述子から image2 のすべてのキーポイント記述子までのユークリッド距離があります。それらを昇順に並べ替えます。(image1 のキーポイントから image2 のキーポイントまでの最も近い距離を意味します)
2.3 ここで、しきい値 T を設定します (ほとんどの場合、0.3 から 0.7 の範囲)。
2.4 最初に最も近い距離と 2 番目に近い距離の比率を取り、それがしきい値 T を下回っている場合、それは一致しているため、そのインデックスを保存します。それ以外の場合、一致はありません。
image1 のすべてのキーポイント記述子に対してこれを繰り返します。
- これでマッチができました。2 つのイメージを追加し、キーポイントの位置に基づいて一致をプロットできます。
あなたの疑問は、ユークリッド距離とは何かだと思います。ユークリッド距離は、ユークリッド (または 2 次元) 平面で見た 2 点間の距離です。2 次元平面の場合は非常に視覚的ですが、SIFT 記述子は 128 次元のベクトルであるため、注意が必要です。公式に固執するだけです(https://en.wikipedia.org/wiki/Euclidean_distance)
これは、ユークリッド距離を計算するための私のコードです:
for j = 1 : length(SIFT2)
euclideanDist(j) = sqrt(sum((SIFT1{i} - SIFT2{j}).^2));
end
このコードは、最初の画像の点「i」から 2 番目の画像 (この場合は「j」) で検出されたすべての点までの距離を見つけます。この距離をベクトル euclideanDist に保存します。
セル配列 SIFT1 および SIFT2 には、各イメージの記述子が含まれています。