2013-01-15 4 views
8

私はいくつかの画像を持っているロゴ(テンプレート)にマッチさせようとしています。私のイメージはすべて本質的に色づけされています。私がやっているやり方は、openCVのcvMatchTemplate()を使って、ソースイメージ上にテンプレート(ロゴ)を実行しています。私は最高の一致を見つけるためにテンプレートを複数のレベルにスケールします。私はイメージにデジタルで刻印されたロゴを見つけているだけで、シーンにあるロゴは見つけられません。 例:(画像は私のタスクの表現と明確にするため、純粋であるので、私は800×600標準にそれをスケールアップ解像度を固定のされていない私はOpenCVマッチテンプレート

私のイメージで働いていた画像ではありません、この画像http://i56.tinypic.com/2v3j3wx.jpgからスカイスポーツの検出。私のソース画像の解像度が300x300と非常に悪い時は、結果は非常に普通です。私はテンプレートパラメータでCV_TM_CCOEFF_NORMEDメソッドを使用していますが、正確なマッチングのためのスコアはかなり低く(0のスケール私はこのロゴが存在するかどうか自信を持って言うことができません。 私はこれに関する2つの質問があります:

1 - それはどのようにカラー画像を扱うのですか?ドキュメントと私の推測からそれぞれのチャンネルを別々に計算し、ベストが取られたということです。その場合は、私は良い結果のためにすべての3つのチャンネルを考慮に入れようとしませんでした

2 - 任意の代替アプローチ! :)

何かが明確でない場合は教えてください!

EDIT(追加情報): コメントで説明したように、私は現在のマッチング技術を適用していますが、これはスケーリングされたテンプレートマッチングです。添付画像は、テスト目的のために純粋であり、私はマッチング ソースイメージA screen shot from youtube ロゴ画像Got from wikipedia 出力イメージ使用してテンプレートを(画像はproprieotryあるとして投稿することはできません)で働いていた画像の私の実際のセットではありませんのでご注意くださいRed block indicating the best match wrt highest score

テンプレートは一致していますが、ここで得られたスコアはこのベストマッチで0.59です。比較的マッチの良いスコアだが、それでも私は希望のロゴが存在するかどうかを確実に伝えるのに十分ではない。私のテスト画像では、画面上のロゴが透明になっていても、それでもロゴは検出されますが、スコアは0.3-0.4と低くなります。 SURF/SIFTを使用するとより良い結果が得られますか?

EDIT(SURFで試行) opencvオフィシャルドキュメント(minHessian = 2000)で既に例として示したSURFコードを実行しようとしました。 link here ここに出力します。私はそれをどのように解釈するかを確認していない(2,3の点が期待される境界内にあると思われる。これは良いと考えていますか?どれさらに提案ですか? enter image description here おかげ

+0

正規化された相互相関は、仕事。 2つの画像でキーポイントの一致が続くキーポイント検出器が必要な場合があります。そのようなもののための典型的な方法の1つはSURFと呼ばれています。あなたは、一致したい実際の画像(悪いものとテンプレート)を含めることができますか? – mmgp

+0

ありがとうございます。私はSIFT/SURFテクニックを検討しましたが、私はいくつかのアドバイスを受けました。しかし、SURFが私の精度を向上させることを確かめたい。 SURFサンプルコードを読みとることとは別に、どのようにタスクを進めていくかについては頭がいっぱいです。 画像は本質的に独占的ですが、問題をより明確にするために、自由に利用できる画像でその動作を複製して投稿します。 –

+0

SURFが精度を向上させることを確認するには、それを使用して精度を向上させるかどうかチェックしてください。誰がそれに対してあなたにアドバイスしましたか?理由は何ですか? (あまりにも過剰なのは理由ではない)。 – mmgp

答えて

3

はあなたが前に、元の画像にブラー(ガウス)を使用してみましたテンプレートマッチングを実行しますか?別の方法としては、ヒストグラム比較を試みることができる

OpenCV Python Gaussian Blur

:私はそれはOpenCVのドキュメントでガウスぼかしに悪化し、一致

リンクを与えている元画像の品質だと思うので、これはあなたがより正確な結果を与える可能性

Drawing Histograms

:エリアテンプレートマッチングの技術は、小さなが、正しい値であったとしても、テンプレートマッチ相関が返さ余分な確認のため、示唆しますヒストグラムを描画

はオプションで、それは、

Comparing the Histograms

^この方法は、あなたのイメージのヒストグラム(ソースおよびテンプレート)とそれらの間の相関を計算し... ただし、独自のアプリケーションのために役に立つかもしれませんテンプレートマッチングで最良の相関があると考える場所、または画像内の他の場所で、ソース全体のヒストグラムを必要としないので、関心領域(ROI)のヒストグラムを取得したい場合は、次のC++コード:

Mat OriginalImage = imread("source.jpg", 0); 
Rect RegionOfInterest = Rect(150, 150, 250, 250); 
Mat ROIImage = OriginalImage(RegionOfInterest); 

これにより、関心領域のヒストグラムを計算することができます。テンプレートのヒストグラムと、テンプレートマッチングがソースにあると判断した地域のヒストグラムを取得し、比較してテンプレートマッチングの出力を確認または反論します。

+0

こんにちは、私はガウスのぼかしをやっていませんでした。そして、私のテンプレート画像が高品質の画像では、品質が苦しんでいます。テンプレートのロゴ画像にガウスブラーをする必要がありますか? –

+0

ガウスぼかしのアイデアは、情報を削除することです - テンプレートマッチング(相関)しきい値の設定を簡略化すると思うので、システムに追加することをお勧めしました。テンプレートは、私がこのメソッドで遊んでいたより良い品質です。主にテンプレートとソースをぼかしたり、テンプレートをぼかすだけでした(しかし、画像を見たことがないので、ソースのぼかしもうまくいく可能性があります他の2つの解決策ではありません...) ドキュメントには、Gaussian Blurへのリンクが添付されています – MattTheHack

+0

BTW、テンプレートマッチングが機能しない場合は、検出に使用できる別の簡単な画像処理テクニックがありますガウスのぼかしが役立つかどうかがわかります – MattTheHack