【问题标题】:OpenCV matchTemplate threshold values for different methods不同方法的 OpenCV matchTemplate 阈值
【发布时间】:2018-09-03 00:21:07
【问题描述】:

为了找到下面提到的方法的阈值,我进行了很多搜索。

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

【问题讨论】:

    标签: image opencv image-processing opencv3.0 template-matching


    【解决方案1】:

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

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

    假设您有 2 张灰度图像,最小的一张是 10x10
    在这种情况下,TM_SQDIFF 的最小距离为 10x10x0^2=0(图像相同),最大距离为 10x10x255^2=6502500 em>(一张全黑,另一张全白),这会导致 [0, 6502500] 边界。

    当然,对于未定义的尺寸 [A, B],可以计算它。

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

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

    【讨论】:

      猜你喜欢
      • 2014-02-26
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多