opencv中的TM_CCORR和TM_CCOEFF是什么意思?

opencv中的TM_CCORR和TM_CCOEFF是什么意思?,opencv,computer-vision,opencv3.0,Opencv,Computer Vision,Opencv3.0,opencv中的TM_CCORR和TM_CCOEFF是什么意思?我发现TM_CCORR代表相关系数。然而,由于其命名,TM_CCOEFF煤层也可能是相关系数 你知道abbrevations代表什么吗? TM_SQDIFF=T安置MATCHSquareDiff TM\U CCEFF=T侵位MATCHC相关系数icient TM\U CCORR=TemplateMatchingCorrelation???正如HansHire提到的那样,在窗口幻灯片中显示了用于像素求和的公式。此外,示例还包括: TM

opencv中的TM_CCORR和TM_CCOEFF是什么意思?我发现TM_CCORR代表相关系数。然而,由于其命名,TM_CCOEFF煤层也可能是相关系数

你知道abbrevations代表什么吗?

TM_SQDIFF=T安置MATCHSquareDiff

TM\U CCEFF=T侵位MATCHC相关系数icient

TM\U CCORR=TemplateMatchingCorrelation???

正如HansHire提到的那样,在窗口幻灯片中显示了用于像素求和的公式。此外,示例还包括:

TM_CCOEFF

请注意,文档中说:

您可以看到,使用cv2.TM_CCORR的结果并不像我们预期的那样好

如果您想使用始终保持不变的屏幕截图或图像部分(a-la)(而不是照明/变换可以改变的真实世界的相机帧),请使用
匹配模板
,否则请尽量避免使用。它只适用于特定的用例,不同的求和函数在实际结果方面没有太大的差异

为了回答您对缩写
TM_CCORR
TM_cceeff
代表什么的评论:

我真的不知道,但这不会阻止我猜测:))

根据文档公式,我的直觉是,
TM\u CCORR
是模板和图像之间的直接(“最简单”)关联:

结果像素是模板中每个像素的模板像素和图像像素之间的点积之和

当模板在图像中“滑动”时,计算结果图像

TM_CCOEFF
但使用更复杂的“系数”(
T'
)代替当前模板像素(
T
)(
T(x′,y′)−1/(w)⋅h)⋅∑x〃,y〃T(x〃,y〃)
)(类似地(
I'
使用)

我对数学符号的理解非常有限,但从公式中可以看出,
CORR
版本与
COEFF
版本相比,考虑了模板和图像的尺寸以及像素强度的总和

另一种受支持的方法是
TM_SQDIFF
,正如简写名称所示,该方法使用模板和图像像素强度之间的平方距离

对于这三种主要方法中的每一种,都有规范化的版本

好的,这就是我对缩写的理解(例如,直接(点积)关联与更复杂(非双关语)关联)

但这意味着什么

实际上,我主要要注意的是,
TM_CCORR
TM_cceeff
最有可能匹配最亮的像素,而
TM_SQDIFF
则相反:最暗的值很可能匹配(参见链接的示例图像)

我会从
TM_CCOEFF
开始,然后如果当前图像的结果没有返回一致的结果,请修改参数,但如前所述,我只会将其用于非常非常受控的条件

对于不属于同一图像(A- La)的瓦尔多()的截屏或模板的实时数据,我将查看对象检测(例如,用HOG作为特征描述符来训练SVM)< /P> < P>参见“OpenCV 3:用OpenCV库在C++中实现计算机视觉” 作者:阿德里安·凯勒,加里·布拉德斯基

书中说:

TM\u CCORR
=互相关

TM_CCOEFF
=相关系数

FWIW:The
−1/(w)⋅h)⋅∑在
TM_CCOEFF
方法中,x〃,y〃T(x〃,y〃)
仅用于a)使模板和图像零均值,b)使图像的暗部分为负值,而使图像的亮部分为正值

这意味着当模板和图像的明亮部分重叠时,点积中会得到正值,当黑暗部分与黑暗部分重叠时(-ve值x-ve值给出+ve值)。 这意味着您在亮部匹配和暗部匹配方面都获得+ve分数

当模板上有暗(-ve)和图像上有亮(+ve)时,将得到-ve值。当模板上有亮的(+ve)和图像上有暗的(-ve)时,也会得到-ve值。 这意味着你会在不匹配的情况下得到一个负分


另一方面,如果您没有
−1/(w)⋅h)⋅∑x〃,y〃T(x〃,y〃)
术语,即在
TM_CCORR
方法中,当模板和图像之间存在不匹配时,您不会得到任何惩罚。实际上,这种方法是测量图像中与模板形状相同的最亮像素集的位置。(这就是为什么徽标、足球和梅西腿部上方区域在匹配结果中具有高强度的原因)。

以下公式给出了T(x,y)的居中版本:

T′(x′,y′)=T(x′,y′)−1/(w)⋅h)⋅∑x′,y′T(x′,y′)

与I′稍有不同,因为它将I集中在内核(w,h)中

I′(x+x′,y+y′)=I(x+x′,y+y′)−1/(w)⋅h)⋅∑x′,y′I(x+x′,y+y′)

我认为理想情况下,TM_CCORR_NORMED和TM_cceff_NORMED应该给出类似的结果。 这种差异可能是由于计算机四舍五入造成的,因为TM_CCOEFF_NORMED通常在数字接近零的情况下运行

更新

T'=T-m,其中m是T的平均值

I'=I-I*M,其中M是大小为(w,h)的平均滤波器矩阵

其中U-为单位滤波器,锐度=U-M为锐度滤波器

所以,TM_CCOEFF是TM_CCORR的锐度
TM_CCORR
TM_CCOEFF  = T' * I' = (T - m) * (I - I * M) =
           = ((T - m) * I) * (U - M)
           = TM_CCORR * SHARPNESS - m * (I * SHARPNESS)