web-dev-qa-db-ja.com

画像処理のキーポイントは何ですか?

たとえばOpenCVを使用する場合、キーポイントの検出にはSIFTやSURFなどのアルゴリズムがよく使用されます。私の質問は、実際にこれらのキーポイントは何ですか?

私は、それらがイメージのある種の「関心のあるポイント」であることを理解しています。また、スケール不変であり、円形であることも知っています。

また、彼らにはオリエンテーションがあることがわかりましたが、これが実際に何であるかを理解できませんでした。それは角度ですが、半径と何かの間ですか?説明をお願いできますか?最初に必要なものはもっと簡単なものである必要があり、その後、論文を理解しやすくなると思います。

63
definera

これらは非常に良い質問です。各ポイントに1つずつ取り組みましょう。

私の質問は、実際にこれらのキーポイントは何ですか?

キーポイントは、関心ポイントと同じものです。それらは空間的位置、または何が興味深いまたは何が目立つか画像内。関心点の検出は、実際には blob detection のサブセットであり、画像内の興味深い領域または空間領域を見つけることを目的としています。キーポイントが特別である理由は、画像がどのように変化しても...画像が回転、縮小/拡大、変換されるかどうかにかかわらず(これらはすべて アフィン変換 であるためです... )または歪みの影響を受ける(つまり、射影変換または ホモグラフィ )場合、sameキーポイントを見つけることができるはずです元の画像と比較するときに、この変更された画像。ここに私が少し前に書いた投稿からの例があります:

ソース: モジュールオブジェクトには 'drawMatches'属性がありませんopencv python

右側の画像は、左側の画像を回転させたものです。また、2つの画像間の上位10個の一致のみを表示しました。上位10個の一致を見ると、これらの点に焦点を当てたいと思うので、画像の内容を思い出すことができます。カメラマンの顔だけでなく、カメラ、三脚、背景の建物の興味深いテクスチャにも注目したいと思います。これらの同じポイントが2つの画像の間に見つかり、これらが正常に一致したことがわかります。

したがって、これから取り除く必要があるのは、これらが画像内の興味深い点であり、画像がどのように歪んでも見つけられるべきであるということです。

それらはある種の画像の「関心のあるポイント」であることを理解しています。また、スケール不変であり、円形であることも知っています。

あなたは正しいです。スケール不変とは、画像をどのようにスケーリングしても、それらのポイントを見つけることができることを意味します。


次に、descriptor部分に進みます。フレームワーク間でキーポイントを異ならせるのは、これらのキーポイントをdescribeする方法です。これらは記述子として知られています。検出した各キーポイントには、それに付随する記述子が関連付けられています。一部のフレームワークはキーポイント検出のみを行いますが、他のフレームワークは単なる記述フレームワークであり、ポイントを検出しません。 both-andキーポイントを検出するものもあります。 SIFTとSURFは、キーポイントを検出して記述するフレームワークの例です。

記述子は主に、キーポイントのscaleorientationの両方に関係します。この概念を打ち出したキーポイントですが、異なる画像のキーポイント間で一致を試みることが目的である場合は、descriptor部分が必要です。さて、あなたが「円形」とはどういう意味ですか...これは、ポイントが検出されたスケールと相関しています。 VLFeat Toolbox tutorial から取得したこの画像を例に取ります。

VLFeat example

黄色のポイントは関心ポイントですが、これらのポイントの一部は異なる円半径を持っていることがわかります。これらはscaleを扱います。一般的な意味での関心点の仕組みは、画像を複数のスケールに分解することです。各スケールで関心点をチェックし、これらすべての関心点を組み合わせて最終的な出力を作成します。 「円」が大きいほど、大きいスケールがポイントが検出されたことになります。また、円の中心から端まで放射状に伸びる線があります。これは、キーポイントの方向であり、次に説明します。

また、彼らはオリエンテーションを持っていることがわかりましたが、実際にそれが何であるか理解できませんでした。角度ですが、半径と何かの間ですか?

基本的に、スケールと方向に関係なくキーポイントを検出したい場合、キーポイントのorientationについて話すとき、本当に意味するのは、ピクセル近傍を検索することですキーポイントを囲み、このピクセル近傍がどのように方向付けられているか、このパッチがどの方向に向いているかを把握します。それは、どの記述子フレームワークを見るかに依存しますが、一般的な要点は、最も支配的な 勾配の方向角度 パッチ内。これはmatchingにとって重要であるため、キーポイントを一緒に一致させることができます。 2人のカメラマンが持っている最初の図を見てみましょう。1人は回転し、もう1人は回転しません。これらのポイントのいくつかを見てみると、あるポイントが別のポイントとどのように一致するかをどのように把握できますか? surroundキーポイントのポイントを見て見ると、注目ポイントとしてのカメラマンの上部が回転したバージョンと一致していることを簡単に識別できます。これらの点のすべてがどの方向にあるか...そしてそこから、それが方向の計算方法です。

通常、キーポイントを検出する場合は、場所を確認するだけです。ただし、画像間でキーポイントをmatchしたい場合は、これを容易にするためにスケールと方向が必ず必要です。


お役に立てれば!

98
rayryeng

私はSURFにはそれほど詳しくありませんが、SURFのベースとなっているSIFTについては説明できます。最後に、SURFに関するいくつかのメモを提供しましたが、すべての詳細はわかりません。


[〜#〜] sift [〜#〜] 画像内の非常に特徴的な場所(またはkeypoints)を見つけることを目的としています。場所は、画像上の単なる2Dの場所ではなく、画像のスケールスペースの場所です。つまり、3つの座標があります:xy、およびscale。 SIFTキーポイントを見つけるプロセスは次のとおりです。

  1. さまざまなぼかし幅とサンプリングレートで画像をぼかしてリサンプリングし、スケールスペースを作成する
  2. ガウスの差 メソッドを使用して、さまざまなスケールのブロブを検出します。ブロブ中心は、指定されたxyでキーポイントになります。 スケール
  3. すべてのキーポイントにorientationを割り当てます。近隣のすべてのピクセルの勾配方向のヒストグラムを計算し、カウント数が最も多い方向ビンを選択します。
  4. すべてのキーポイントに、16の局所近傍のピクセルの勾配方向に基づいて、128次元特徴ベクトルを割り当てます。

ステップ2はスケール不変性、ステップ3は回転不変性、ステップ4はキーポイントの識別に使用できる種類の「指紋」を提供します。これらを一緒に使用して、複数の画像の任意の方向とスケールで同じ特徴の出現を一致させることができます。


[〜#〜] surf [〜#〜] SIFTと同じ目標を達成することを目指していますが、速度を上げるためにいくつかの巧妙なトリックを使用しています。

Blob検出では、 ヘッセ行列の決定因子 メソッドを使用します。ドミナントオリエンテーションは、 harr wavelets に対する水平および垂直応答を調べることで見つかります。特徴記述子はSIFTに似ており、16の局所近傍のピクセルの向きを調べますが、結果は64次元のベクトルになります。

SURFフィーチャーは、SIFTフィーチャーよりも最大3倍高速に計算できますが、ほとんどの状況で同様に堅牢です。


参考のため:

優れたSIFTチュートリアル

SURFの紹介

19
eigenchris