13

私はテンプレートと一致するメソッドをCV_TM_CCORR_NORMEDと使用して2つの画像を比較しています...私はこの回転とスケールを不変にするために作りたいと思います。スケールとローテーションテンプレートマッチング

私は画像とテンプレートのフーリエ変換に同じメソッドを使用しようとしましたが、それでも回転後の結果が異なっている、あなたのオブジェクトがシーンに回転や拡大縮小されたときにmatchTemplateとのマッチング

答えて

28

テンプレートが良くありません。

フレームワークFeatures2DからopenCV関数を試す必要があります。例えば、SIFTまたはSURF記述子、およびFLANNマッチャ。また、findHomographyメソッドが必要です。

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

更新:要するに

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

  1. は、オブジェクトの画像 1.1のキーポイントを見つけます。あなたのシーン画像マッチャー

  2. によってキーポイント

  3. マッチ記述子から 2.1抽出ディスクリプタのキーポイントを見つけるそれらのキーポイント

  4. から抽出記述子は異なるクラスがあり

あなたの試合を分析しますFeatureDetectors、DescriptorExtractors、およびDescriptorMatchesのうち、それらについて読んで、あなたのtaに合ったものを選択することができますsks。

+0

**ありがとう、私はすでにホモグラフィを使用していましたが、サーフィンの代わりに興味のあるポイントとしてコーナーを見つけましたが、これはFLANNで動作しますか?サーフとふるい分けに時間がかかり、パフォーマンスが低下する可能性があります** – Storm2012

+0

「興味のあるポイント」は一般的な用語です。それらはエッジであり、ほとんどがコーナーです。興味のあるポイントはどうやって見つかりましたか? openCVの「FeatureDetector」のいずれかを使用することも、あなた自身で書くこともできます。例えば、「FAST」、「STAR」があります。彼らはシンプルで速いです。しかし、彼らは興味のあるポイントの角度に関する情報を保持していません。 'SURF'と' SIFT'は遅くなりますが、興味のあるポイントについての情報はより大きくなります(角度)。 'SIFT'と' SURF'を使うと、スケール不変のマッチを見つけることができます。しかし、任意のopenCV検出器を使用することができます。 –

+0

ありがとうございました – Storm2012

6

回転

各キーポイント:

  1. キーポイントの周りを取る。
  2. この領域の方位角を勾配法または別の方法で計算します。
  3. この角度のパターンと要求領域を0に回転させます。
  4. この回転領域のディスクリプタを計算して一致させます。

スケール不変

BRISK方法

2

あなたがその本当に唯一の回転やスケールを知っていれば、特徴検出及びホモグラフィを経由して行くよりも、テンプレートの規模に合致し、回転不変の簡単な方法は(ありますを参照してください。 、他のすべては一定です)。 真のオブジェクト検出のためには、上記の提案されたキーポイントベースのアプローチが効果的です。

もしそれが同じテンプレートであり、視点の変更がないと分かっているならば、スケールピースの画像ピラミッドを撮って、そのピラミッドのさまざまなレベルでテンプレートをマッチさせます。 NCC)。ピラミッドのより高い(=より低い解像度)レベルでの大まかなマッチングを見つけることは安いでしょう。実際には、それは非常に安くて、低解像度のレベルでテンプレートを大まかに回転させることができます。テンプレートを高解像度のレベルに戻すときは、より精細な回転ステッピングを使用します。これはかなり標準的なテンプレートマッチング技術であり、実際にはうまくいきます。

関連する問題