不同方法的OpenCV matchTemplate阈值数值

4

我花了很多时间寻找以下方法的阈值。

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

我尝试自己找出它们的值,但我只能找到3种方法的阈值,其最大值为1.0。其他方法的值在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
1个回答

5

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

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

enter image description here

假设您有两个灰度图像,最小的一个是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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接