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

时间:2019-04-02 07:45:08

标签: opencv computer-vision opencv3.0

opencv中的TM_CCORR和TM_CCOEFF是什么意思?我发现TM_CCORR代表相关系数。但是,TM_CCOEFF接缝也因其命名而成为相关系数。

您知道缩写的含义吗?

TM_SQDIFF = T 模板 M 匹配 Sq uare Diff erence

TM_CCOEFF = T 模板 M 匹配 C orOrlation关系 Coeff 内容?< / p>

TM_CCORR = T 嵌板 M 匹配 Corr 关联

3 个答案:

答案 0 :(得分:4)

正如HansHire所提到的,official documentation给出了窗口滑动时用于像素求和的公式。此外,Python OpenCV docs显示示例:

TM_CCOEFF

TM_COEFF

TM_CCORR

TM_CORR

请注意文档说:

  

您可以看到使用cv2.TM_CCORR的结果不如我们预期的那样。

如果您想使用始终保持不变的屏幕截图或图像部分(a-la Sikuli)(不是现实世界的相机框架,可以更改照明/变换),请使用matchTemplate,否则请尽量避免。仅对特定用例而言这非常好,并且就实际结果而言,不同的求和函数之间并没有太大差异。

要对您的缩写TM_CCORRTM_CCOEFF代表什么发表评论:

说实话,我要成为100%的人,但这不会阻止我进行猜测:)))

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

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

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

TM_CCOEFF,而不是当前模板像素(T),而是使用更复杂的“系数”(T')(T(x′,y′)−1/(w⋅h)⋅∑x″,y″T(x″,y″))(类似({{1 }}使用)。

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

唯一受支持的另一种方法是COEFF,这是速记名称所暗示的,公式确认使用模板和图像像素强度之间的平方距离。

这3种主要方法中的每一种都有规范版本。

好吧,这就是我对缩写的含义(例如,直接(点积)相关与更复杂的(无双关)相关)

但这意味着什么?

实际上,我主要关注以下事实:TM_SQDIFFTM_CCORR最有可能匹配最亮的像素,而TM_CCOEFF相反:最暗的值可能匹配(请参见示例图片链接)。

我将从TM_SQDIFF开始,如果当前图像的结果没有返回与参数一致的一致结果,但是如前所述,我只会将它用于非常 >控制条件。

对于不是同一图像的屏幕截图或模板的实时数据(a-la“哪里是Waldo”),我将研究对象检测(例如,使用HOG作为特征描述符来训练SVM)

答案 1 :(得分:1)

请参阅“使用OpenCV库学习C ++中的OpenCV 3:计算机视觉” 艾德里安·凯勒(Adrian Kaehler),加里·布拉德斯基(Gary Bradski)

https://books.google.com.au/books?id=SKy3DQAAQBAJ&lpg=PT607&ots=XGg5zrJXPp&dq=TM_CCOEFF&pg=PT606#v=onepage&q=TM_CCOEFF&f=false

根据这本书:

TM_CCORR =互相关

TM_CCOEFF =相关系数

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

这意味着,当模板和图像的亮部分重叠时,点积将为正值,而当暗部分与暗部分重叠时(-ve值x -ve值得到+ ve值) 。 这意味着您在明亮部分匹配和黑暗部分匹配上都获得+ ve得分。

如果模板上的(-ve)较暗,图像上的(+ ve)较亮,则会得到-ve值。当模板上的亮度较高(+ ve)而图像上的亮度较高(-ve)时,您还将获得-ve值。 这意味着您的不匹配得分为负。

另一方面,如果您没有−1/(w⋅h)⋅∑x″,y″T(x″,y″)字词,即使用TM_CCORR方法,那么当模板和图像之间不匹配时,您不会受到任何惩罚。实际上,此方法可以测量图像中与模板形状相同的最亮像素集的位置。 (这就是徽标,足球和梅西腿上方区域具有较高强度的匹配结果的原因。

答案 2 :(得分:0)

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

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

与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_CCOEFF_NORMED最好能给出相似的结果。 差异可能是由于计算机舍入,因为TM_CCOEFF_NORMED通常以接近零的数字进行操作。

更新

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

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

TM_CCOEFF  = T' * I' = (T - m) * (I - I * M) =
           = ((T - m) * I) * (U - M)
           = TM_CCORR * SHARPNESS - m * (I * SHARPNESS)

       

其中U-是单位过滤器,SHARPNESS = U-M是清晰度过滤器。

因此,TM_CCOEFF是经过一定标准化的TM_CCORR的清晰度。