web-dev-qa-db-ja.com

スケールと回転テンプレートマッチング

2つの画像を比較するためにCV_TM_CCORR_NORMEDでテンプレートを一致させる方法を使用しています...この回転とスケールを不変にするために作成したい..何かアイデアはありますか?

画像とテンプレートのフーリエ変換で同じ方法を使用しようとしましたが、それでも回転後の結果は異なります

21
Storm2012

オブジェクトがシーン内で回転またはスケーリングされている場合、matchTemplateとのテンプレートマッチングは適切ではありません。

Features2D FrameworkからopenCV関数を試してみてください。たとえば、SIFTまたはSURF記述子、およびFLANNマッチャー。また、findHomographyメソッドが必要です。

ここ は、シーン内で回転したオブジェクトを見つける良い例です。

更新:

要するに、アルゴリズムはこれです:

  1. オブジェクト画像のキーポイントを見つける1.1。それらのキーポイントから記述子を抽出する

  2. シーン画像のキーポイントを見つける2.1キーポイントから記述子を抽出する

  3. マッチャーによる記述子の照合

  4. 対戦を分析する

FeatureDetectors、DescriptorExtractors、およびDescriptorMatchesにはさまざまなクラスがあります。それらについて読んで、タスクに適したものを選択してください。

36
Larry Cinnabar

回転不変

各キーポイントについて:

  1. 要所周辺を取りましょう。
  2. 勾配または別の方法を使用して、この領域の配向角度を計算します。
  3. パターンを回転させ、この角度で領域を0にリクエストします。
  4. この回転した領域の記述子を計算し、それらを一致させます。

スケール不変

[〜#〜] brisk [〜#〜] メソッドを参照

6
George

テンプレートのスケールと回転不変量を一致させる方法は、特徴の検出とホモグラフィを使用するよりも簡単です(実際には回転とスケールのみがわかっていて、それ以外はすべて一定である場合)。真のオブジェクト検出では、上記のキーポイントベースのアプローチがより効果的です。

同じテンプレートであることがわかっていて、パースペクティブの変更がない場合は、スケールスペースを検出するために画像ピラミッドを取得し、そのピラミッドのさまざまなレベルでテンプレートを照合します(SSDやNCCなどの単純なものを使用)。ピラミッドの高い(=低い解像度)レベルで大まかな一致を見つけるのは安上がりです。実際、非常に安価なので、テンプレートを低解像度レベルで大まかに回転させることもできます。テンプレートをトレースして高解像度レベルに戻すと、より細かい粒度の回転ステップを使用します。これはかなり標準的なテンプレートマッチング手法であり、実際にはうまく機能します。

5
Tom