9

上司と私は、matchTemplate(); の CV_TM_CCORR_NORMED メソッドで何が起こっているかについて意見が分かれています。openCVで。

ここで何が起こっているのか、特にこの方程式の平方根の側面について説明していただけますか。

4

1 に答える 1

19

相関とは、2 つの信号、ベクトルなどの類似性です。ベクトルがあるとします。

 template=[0 1 0 0 1 0 ]   A=[0 1 1 1 0 0] B =[ 1 0 0 0 0 1]  

ベクトルとテンプレートの間で相関を実行して、どちらがより類似しているかを取得すると、対応するインデックスに 1 が配置されるため、より多くのものAが類似していることがわかります。これは、対応する非ゼロ要素が多いほど、ベクトル間の相関が高くなることを意味します。templateB

グレースケール画像では、値は 0 ~ 255 の範囲です。

template=[10 250 36 30] A=[10 250 36 30] B=[220 251 240 210].

Aここで、は と同じですが、 とtemplateの間の相関はBとよりもtemplate大きいことは明らかです。正規化された相互相関では、式の除数部分がこの問題を解決しています。以下の式を確認すると、 の分母が よりもはるかに大きくなることがわかります。AtemplateB(x)templateA(x)template

opencv documentation に記載されている式: ここに画像の説明を入力

実際には、相互相関を使用すると、画像の一部に明るさがある場合、その部分とテンプレートの相関が大きくなります。しかし、正規化された相互相関を使用すると、より良い結果が得られます。

式はこれだと思います:

ここに画像の説明を入力

要素ごとに乗算する前に、2 つの行列を正規化します。行列内のすべての要素の平方根和を除算することにより、利得を取り除きます。すべての要素が大きい場合、除数は大きくなります。

マトリックス内のすべての要素の合計を除算していると考えてください。ピクセル値がより明るい領域にある場合、その近傍のピクセル値は高くなります。その近傍の合計を除算することにより、照明効果を除去しています。これは、ピクセル値がは常に正です。ただし、2D 行列の場合、負の値が存在する可能性があるため、2 乗では符号が無視されます。

于 2015-02-16T11:43:43.963 に答える