解释openCV匹配模板的交叉关联和规范化

时间:2015-02-13 18:53:28

标签: opencv normalization cross-correlation matchtemplate

对于matchTemplate()的CV_TM_CCORR_NORMED方法,我的老板和我不同意这是怎么回事;在openCV中。

你能解释一下这里发生了什么,特别是这个等式的平方根方面。

1 个答案:

答案 0 :(得分:14)

相关性是两个信号,矢量等的相似性。假设你有矢量

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

如果您在矢量和模板之间执行相关以获得哪一个更相似,那么您会看到Atemplate相似,而不是B因为放置了1 {1}}在相应的索引中。这意味着非零元素对应的矢量之间的相关性越大。

在灰度图像中,值的范围为0-255。让我们这样做:

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

很明显,Atemplate相同,但Btemplate之间的相关性大于Atemplate在归一化的互相关分析器中,公式的一部分正在解决这个问题。如果您查看下面的公式,则可以看到B(x)template的计分器将比A(x)template大得多。

opencv文档中声明的公式: enter image description here

实际上,如果使用互相关,如果图像的某个部分存在亮度,则该部分与模板之间的相关性会更大。但如果使用标准化的互相关,则会得到更好的结果。

认为公式是这样的:

enter image description here

在逐个元素相乘之前,你要对两个矩阵进行归一化。通过划分矩阵中所有元素的平方和的根除去增益;如果所有元素都很大,则除数很大。

认为你正在划分矩阵中所有元素的总和。如果一个像素值在一个更亮的区域,那么它的邻居像素值将会很高。通过它的邻域的除法和你去除照明效果。这是用于图像处理像素值总是正的。但对于2D矩阵,可能会有一些负值,因此平方忽略符号。