2010-12-31 16 views
5

は、次のような問題のためのOpenCVから使用されるように、最も賢明なアルゴリズム、またはアルゴリズムの組み合わせ情報:2Dサブイメージ検出

  • 私は小さな2D画像のセットを持っています。私は、これらのサブ画像の位置をより大きな画像で検出したいと考えています。
  • サブ画像は通常約32x32ピクセルで、大きな画像は約400x400です。
  • サブ画像は必ずしも正方形ではなく、アルファチャンネルが含まれています。
  • 任意に - 大きい画像が3Dで回転し、粒状圧縮することができる、またはそうでなければ、わずかに私は、非常に悪い結果(正確に一致するのが困難であり、偽陽性の数が多い、cvMatchTemplateを試みた

を歪めすべての一致方法で)。問題のいくつかは、OpenCVがアルファチャンネルのテンプレートマッチングを扱うことができないという事実から来ている。

私は手動検索を試しましたが、これはうまくいくようですが、アルファチャンネルを含めることはできますが、非常に遅いです。

ありがとうございました。

答えて

7
  1. cvMatchTemplateは、マッチングにMSE(SQDIFF/SQDIFF_NORMED)種類のメトリックを使用します。この種のメトリックでは、さまざまなアルファ値が(方程式の四角形のために)別々にペナルティを課します。相互相関を正規化しようとしましたか?画素強度の線形変化をよりよくモデル化することが知られている。
  2. NCCが仕事をしていない場合は、強度の違いがそれほど効果がない場所に画像を変換する必要があります。例えばエッジ強度イメージ(canny、sobelなど)を計算し、これらのイメージでcvMatchTemplateを実行します。
  3. 画像のスケールの大きな違い(〜10倍)を考慮してください。画像のピラミッドを使用して、マッチングの正しい縮尺を把握する必要があります。あなたはスケール(2^1/x:xは正しいスケールです)から始めることをお勧めし、ピラミッドの上に見積もりを伝播してください。
+0

私は、信頼性の向上が認められず、他のメトリクスを試しました。エッジ強度の前処理は良い計画のように聞こえますが、私はそれを試みます。 – Sam

+0

Humm、画像があまり役立たないようです。わずかな圧縮差が悪いNCC結果との鋭いエッジ差を生み出すからです...それ以上のヒント? – Sam

+1

これは画像にスケール差があるためです。あなたのターゲット画像はソースよりも10倍小さいです。その結果、マッチングを行うためにスケール空間を推定する必要があります。 – nav

2

SIFTやSURFのようなものが必要です。

+0

偉大なもの、私はサーフを試してみて、それは私が必要とするもののように見えます。私の唯一の問題は、それがグレースケールの画像で動作することです。 SURF検索にその情報を含めるために巧みに何をすべきですか?すべてのチャンネルでSURF?色相のサーフ? – Sam

+1

私はVチャンネルを使うのが一番うまくいくと思います。 –