2

私は自分のプロジェクトにSIFTを実装しようとしていましたが、キーポイントがあります。同じ画像のすべてのキーポイントを縮小して、画像の各キーポイントのユークリッド距離を取得してみました。クエリ画像の1つのキーポイントと、データベース画像の残りのキーポイントとの距離が非常に似ている場合があります。最近傍を選択するにはどうすればよいですか。また、これが正しい一致であることを確認するにはどうすればよいですか。

ユークリッド距離は、i = 1〜128 sqrt [(pi-qi)^ 2]、p = 1の場合、データベース内のキーポイントの数として計算されました。

どのように進めるかについてのアイデアは非常に高く評価されます

4

1 に答える 1

21

クエリ画像を比較している画像のデータベースがあると述べたので、画像検索にSIFTを使用しようとしていると思います。

クエリ画像内のすべての SIFT 記述子ベクトルを画像データベース内の他のすべての記述子ベクトルと比較することは、指数関数的な数の比較が必要になるため、現実的ではないことに注意してください。SIFT 記述子を使用して画像検索を行う現在一般的なアプローチは、ドキュメント検索から借用したバッグ オブ ワード モデルです。

まず、与えられた画像を、データベース内の他の画像のベクトルと比較できる SINGLE ベクトルを使用して表現します。これは、各画像に多くの SIFT 記述子ベクトル (キーポイントごとに 1 つ) がある現在のアプローチとは異なります。バッグ オブ ワード (BOW) モデルでは、最初にいわゆるビジュアル コードブック (辞書と呼ばれることもあります) を作成する必要があります。これは次の方法で行います。

  1. 画像データベースから代表的な画像を選択する
  2. 1) の画像からすべての SIFT 記述子を収集します。
  3. K Means を使用して、これらの記述子を k 個のクラスターにクラスター化します。ここで、k は設定した数値です。これらのクラスターの中心は、「ビジュアル ワード」、つまり画像のデータベース内の代表的な特徴です。
  4. データベース内のすべての画像に対して v、ディクショナリ内のさまざまな特徴が発生する頻度をカウントするベクトルを作成します。これにより、各画像は次の形式のベクトルで表されます<# times feature 1 in dictionary occur, ... feature 2 in dictionary occur..., ..., ... feature k in dictionary occur>。つまり、k 次元ベクトルです。次の方法で、画像のこのベクトルを取得します。

    4.1. 画像内の SIFT 記述子の抽出

    4.2. イメージ内の各 SIFT 記述子について、コードブック/辞書で (ユークリッド距離を使用して) 最も近いクラスター中心を見つけ、ベクトル内の対応するカウントをv1 増やします。

    たとえば、5 つのクラスター辞書 (k = 5 など) があり、画像に 3 つの SIFT 記述子があるとします。そのうちの 2 つは最初のクラスターの中心に最も近く、1 つは 5 番目のクラスターの中心に最も近いです。あなたのベクトルvv = <2, 0, 0, 0, 1>. v代表ベクトルが画像内に出現する回数をカウントするためv、頻度ヒストグラムと呼ばれることもあります。

    この段階で、検出された SIFT キーポイントの数が非常に異なる画像を比較できるように、各エントリをすべてのエントリの合計で割ってヒストグラムを正規化することができます。

  5. ここで、2 つの画像を比較するvには、SIFT 記述子自体ではなく、この新しいベクトルを比較します。比較は、ユークリッド距離 (L2 距離とも呼ばれます) を使用して行うことができます。カイ二乗距離またはヘリンジャー距離を使用すると、結果が改善される場合があることがわかっています。このページに記載されている詳細を参照してください。

基本的に、画像内の SIFT 記述子自体を別の SIFT 記述子と比較することはできません。画像内に複数の SIFT 記述子が存在することになり、それらの数はそれらを抽出する方法によって異なるためです。

あなたが望むのは比較のための共通の基礎であり、それは記述子を画像のデータベースの代表的な特徴を説明する共通のコードブック/辞書に一致させることによってBOWモデルで行われます。

于 2011-12-18T04:45:19.677 に答える