opencv中的TM_CCORR和TM_CCOEFF是什么意思?
What does the TM_CCORR and TM_CCOEFF in opencv mean?
opencv中的TM_CCORR和TM_CCOEFF是什么意思?我发现 TM_CCORR 代表相关系数。但是,TM_CCOEFF seams 由于其命名也是相关系数。
你知道缩写代表什么吗?
TM_SQDIFF = T模板M匹配 Square Difference
TM_CCOEFF = T模板M匹配 Correlation Coefficient ?
TM_CCORR = T模板M匹配 Corr兴高采烈???
正如 HansHire 提到的,official documentation presents the formulas used for pixel summing as the windows slide. Additionally the Python OpenCV docs 显示示例:
TM_CCOEFF
TM_CCORR
请注意文档说:
You can see that the result using cv2.TM_CCORR is not good as we expected.
如果您想使用始终保持不变的屏幕截图或图像部分 (a-la Sikuli)(而不是 lighting/transformations 可以更改的真实相机帧),请使用 matchTemplate
,否则尽量避免。它仅适用于特定用例,并且在实际结果方面,不同求和函数之间没有太大差异。
要解决您对缩写 TM_CCORR
和 TM_CCOEFF
代表什么的评论?:
100% 我真的不知道,但这不会阻止我猜测:)))
根据文档公式,我的预感是 TM_CCORR
是模板和图像之间的直接 ("simplest") 相关性:
结果像素是模板像素与模板中每个像素的图像像素点积之和。
作为模板"slides"通过图像,计算出结果图像。
TM_CCOEFF
但不是当前模板像素 (T
),而是使用更复杂的 "coefficient"(T'
) (T(x′,y′)−1/(w⋅h)⋅∑x″,y″T(x″,y″)
)(类似地(I'
使用)。
我对数学符号的理解非常有限,但据我从公式中可以看出,CORR
版本相对于 COEFF
考虑了模板和图像的尺寸以及像素强度的总和。
唯一受支持的方法是 TM_SQDIFF
,正如 shorthand 名称所暗示的那样,公式确认使用模板和图像像素强度之间的平方距离。
这 3 种主要方法中的每一种都有标准版本。
好的,这就是我对缩写含义的理解(例如,直接(点积)相关与更复杂的(无双关语)相关)
但这就是这个意思吗?
实际上,我主要关注的是 TM_CCORR
和 TM_CCOEFF
最有可能匹配最亮的像素,而 TM_SQDIFF
相反:最暗的值很可能匹配(参见示例图片链接)。
我会从 TM_CCOEFF
开始,然后如果当前图像的结果 return 与参数不一致 fiddle,但如前所述,我会使用这个仅适用于非常非常 受控条件。
对于不是屏幕截图或模板的实时数据,它们是同一图像的一部分 (a-la "where's Waldo"),我会研究对象检测(例如,使用 HOG 作为特征描述符训练 SVM)
见"Learning OpenCV 3: Computer Vision in C++ with the OpenCV Library"
作者:阿德里安·凯勒 (Adrian Kaehler)、加里·布拉德斯基 (Gary Bradski)
据书:
TM_CCORR
= 互相关
TM_CCOEFF
= 相关系数
FWIW: TM_CCOEFF
方法中的 −1/(w⋅h)⋅∑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' 有点不同,因为它在内核 (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) 的平均滤波器矩阵
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 的清晰度,经过一些归一化处理。
opencv中的TM_CCORR和TM_CCOEFF是什么意思?我发现 TM_CCORR 代表相关系数。但是,TM_CCOEFF seams 由于其命名也是相关系数。
你知道缩写代表什么吗?
TM_SQDIFF = T模板M匹配 Square Difference
TM_CCOEFF = T模板M匹配 Correlation Coefficient ?
TM_CCORR = T模板M匹配 Corr兴高采烈???
正如 HansHire 提到的,official documentation presents the formulas used for pixel summing as the windows slide. Additionally the Python OpenCV docs 显示示例:
TM_CCOEFF
TM_CCORR
请注意文档说:
You can see that the result using cv2.TM_CCORR is not good as we expected.
如果您想使用始终保持不变的屏幕截图或图像部分 (a-la Sikuli)(而不是 lighting/transformations 可以更改的真实相机帧),请使用 matchTemplate
,否则尽量避免。它仅适用于特定用例,并且在实际结果方面,不同求和函数之间没有太大差异。
要解决您对缩写 TM_CCORR
和 TM_CCOEFF
代表什么的评论?:
100% 我真的不知道,但这不会阻止我猜测:)))
根据文档公式,我的预感是 TM_CCORR
是模板和图像之间的直接 ("simplest") 相关性:
结果像素是模板像素与模板中每个像素的图像像素点积之和。
作为模板"slides"通过图像,计算出结果图像。
TM_CCOEFF
但不是当前模板像素 (T
),而是使用更复杂的 "coefficient"(T'
) (T(x′,y′)−1/(w⋅h)⋅∑x″,y″T(x″,y″)
)(类似地(I'
使用)。
我对数学符号的理解非常有限,但据我从公式中可以看出,CORR
版本相对于 COEFF
考虑了模板和图像的尺寸以及像素强度的总和。
唯一受支持的方法是 TM_SQDIFF
,正如 shorthand 名称所暗示的那样,公式确认使用模板和图像像素强度之间的平方距离。
这 3 种主要方法中的每一种都有标准版本。
好的,这就是我对缩写含义的理解(例如,直接(点积)相关与更复杂的(无双关语)相关)
但这就是这个意思吗?
实际上,我主要关注的是 TM_CCORR
和 TM_CCOEFF
最有可能匹配最亮的像素,而 TM_SQDIFF
相反:最暗的值很可能匹配(参见示例图片链接)。
我会从 TM_CCOEFF
开始,然后如果当前图像的结果 return 与参数不一致 fiddle,但如前所述,我会使用这个仅适用于非常非常 受控条件。
对于不是屏幕截图或模板的实时数据,它们是同一图像的一部分 (a-la "where's Waldo"),我会研究对象检测(例如,使用 HOG 作为特征描述符训练 SVM)
见"Learning OpenCV 3: Computer Vision in C++ with the OpenCV Library" 作者:阿德里安·凯勒 (Adrian Kaehler)、加里·布拉德斯基 (Gary Bradski)
据书:
TM_CCORR
= 互相关
TM_CCOEFF
= 相关系数
FWIW: TM_CCOEFF
方法中的 −1/(w⋅h)⋅∑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' 有点不同,因为它在内核 (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) 的平均滤波器矩阵
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 的清晰度,经过一些归一化处理。