不同方法的OpenCV matchTemplate阈值

查兰

我进行了大量搜索,以查找以下提到的方法的阈值。

methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR',
            'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', cv2.TM_SQDIFF_NORMED']

我也尝试自己找出它们,但是我只能找到最大值为1.0的3种方法的阈值。其他方法的值在10 ^ 5范围内。我想知道这些方法的范围。

有人能指出我正确的方向吗?我的议程是遍历模板匹配的所有方法并获得最佳结果。我浏览了文档和源代码,但没有运气。

这些是我得到的值,我可以理解* NORMED方法的值为0-1。

cv2.TM_CCOEFF -- 25349100.0
cv2.TM_CCOEFF_NORMED -- 0.31208357214927673
cv2.TM_CCORR -- 616707328.0
cv2.TM_CCORR_NORMED -- 0.9031367897987366
cv2.TM_SQDIFF -- 405656000.0
cv2.TM_SQDIFF_NORMED -- 0.737377941608429
德米特里(Dmitrii Z.)

opencv文档中 所述,matchTemplate结果是每个像素的差异之和(随方法而异),因此对于未归一化的方法-阈值将随模板大小而变化。

您可以查看每种方法的公式并计算模板类型的阈值,考虑到CV_8UC1图像的像素之间的最大差为255

在此处输入图片说明

因此,假设您有2张灰度图像,最小的是10x10
在那种情况下,对于TM_SQDIFF,最小距离将为10x10x0 ^ 2 = 0(图像相同),最大距离将为10x10x255 ^ 2 = 6502500(一个图像完全为黑色,另一幅图像为白色),这导致[0,6502500]边界。

当然,可以为未定义的大小[A,B]计算该值。

对于TM_CCORR,它将为AxBxmax(T(x',y')I(x + x',y + y'))= 65025AB

您可以继续计算剩余的方法,请记住,如果您与CV_8UC图像类型(例如32FC或32SC)不同,则需要用相应的值(max(float)max(int32))替换255。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章