首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opencv中的TM_CCORR和TM_CCOEFF是什么意思?

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

Stack Overflow用户
提问于 2019-04-02 07:45:07
回答 3查看 21.5K关注 0票数 9

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

你知道缩写是什么意思吗?

TM_SQDIFF = Template Matching Square Diff>E 211erence

TM_CCOEFF = Template Matching C或CoeffE 221的原因?

TM_CCORR = Template Matching Corr?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-05 03:32:15

参见禤浩焯Kaehler,Gary著的“学习OpenCV 3: C++中的计算机视觉与OpenCV图书馆”

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方法中,那么当模板和图像之间存在不匹配时,就不会受到任何惩罚。实际上,这种方法是测量图像中与模板形状相同的最亮像素集的位置。(这就是为什么这个标志,足球和梅西腿部上方的区域在匹配结果上有很高的强度)。

票数 11
EN

Stack Overflow用户

发布于 2019-04-02 08:06:55

正如HansHire提到的,正式文件给出了窗口幻灯片中像素相加的公式。此外,Python OpenCV文档还显示了一些示例:

代码语言:javascript
复制
TM_CCOEFF

代码语言:javascript
复制
TM_CCORR

请注意,医生们说:

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

如果您想使用屏幕截图或图像(a-la 西库利)的部分总是保持不变(而不是真实的相机帧,在那里照明/转换可以改变),那么使用matchTemplate,否则尽量避免它。它只适用于特定的用例,不同的求和函数在实际结果上没有太大的差异。

要说明您对缩写TM_CCORRTM_CCOEFF代表什么的评论?:

我不知道,但这并不能阻止我猜测:)

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

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

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

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

我对数学表示法的理解非常有限,但据我所知,从公式中可以看出,CORR版本(相对于COEFF )考虑了模板和图像的尺寸以及像素强度之和。

唯一支持的方法是TM_SQDIFF,顾名思义和公式确认使用模板和图像像素强度之间的平方距离。

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

好的,这就是我对缩写的意思的理解(例如,直接(点积)相关性相对于更复杂(没有双关意)的关联)。

但这是否意味着?

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

我将从TM_CCOEFF开始,如果当前图像的结果不返回一致的结果,就会篡改参数,但正如前面提到的,我只在非常非常控制的条件下使用这一方法。

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

票数 7
EN

Stack Overflow用户

发布于 2020-11-25 11:44:02

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

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

与i‘有点不同,因为它在内核(w,h)中以i为中心。

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)的平均滤波器矩阵。

代码语言:javascript
复制
TM_CCOEFF  = T' * I' = (T - m) * (I - I * M) =
           = ((T - m) * I) * (U - M)
           = TM_CCORR * SHARPNESS - m * (I * SHARPNESS)

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

因此,TM_CCOEFF是TM_CCORR的锐度,具有一定的归一化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55469431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档