对于matchTemplate()的CV_TM_CCORR_NORMED方法,我的老板和我不同意这是怎么回事;在openCV中。
你能解释一下这里发生了什么,特别是这个等式的平方根方面。
答案 0 :(得分:14)
相关性是两个信号,矢量等的相似性。假设你有矢量
template=[0 1 0 0 1 0 ] A=[0 1 1 1 0 0] B =[ 1 0 0 0 0 1]
如果您在矢量和模板之间执行相关以获得哪一个更相似,那么您会看到A
与template
相似,而不是B
因为放置了1 {1}}在相应的索引中。这意味着非零元素对应的矢量之间的相关性越大。
在灰度图像中,值的范围为0-255。让我们这样做:
template=[10 250 36 30] A=[10 250 36 30] B=[220 251 240 210]
。
很明显,A
与template
相同,但B
和template
之间的相关性大于A
和template
在归一化的互相关分析器中,公式的一部分正在解决这个问题。如果您查看下面的公式,则可以看到B(x)template
的计分器将比A(x)template
大得多。
opencv文档中声明的公式:
实际上,如果使用互相关,如果图像的某个部分存在亮度,则该部分与模板之间的相关性会更大。但如果使用标准化的互相关,则会得到更好的结果。
认为公式是这样的:
在逐个元素相乘之前,你要对两个矩阵进行归一化。通过划分矩阵中所有元素的平方和的根除去增益;如果所有元素都很大,则除数很大。
认为你正在划分矩阵中所有元素的总和。如果一个像素值在一个更亮的区域,那么它的邻居像素值将会很高。通过它的邻域的除法和你去除照明效果。这是用于图像处理像素值总是正的。但对于2D矩阵,可能会有一些负值,因此平方忽略符号。