OpenCV中的模版匹配:
matchTemplate()
Image是运行搜索的图像。它必须是8位或32位浮点。templ搜索模板。它必须不大于源图像并具有相同的数据类型。结果比较结果的地图。它必须是单通道32位浮点。如果图像是W×H并且templ是w×h,则结果是(W-w 1)×(H-h 1)。method指定比较方法的参数,请参见TemplateMatchModes掩码搜索模板的掩码。它必须与templ具有相同的数据类型和大小。默认情况下不设置。目前,仅支持TM_SQDIFF和TM_CCORR_NORMED方法。
但是,其中的method又是什么呢?以下是模版匹配的六种method:
1. 平方差匹配法CV_TM_SQDIFF
这类方法利用图像与模板各个像素差值的平方和来进行匹配,最好匹配为 0。 匹配越差,匹配值越大。
2. 归一化平方差匹配法CV_TM_SQDIFF_NORMED
这个方法其实和差值平方和算法是类似的。只不过对图像和模板进行了标准化操作,这种标准化操作可以保证当模板和图像各个像素的亮度都乘上了同一个系数时,相关度不发生变化。
3. 相关匹配法CV_TM_CCORR
这类方法采用模板和图像的互相关计算作为相似度的度量方法,所以较大的数表示匹配程度较高,0标识最坏的匹配效果。
4. 归一化相关匹配法CV_TM_CCORR_NORMED
这个方法和 标准化差值平方和匹配 类似,都是去除了亮度线性变化对相似度计算的影响。可以保证图像和模板同时变亮或变暗k倍时结果不变。
5. 相关系数匹配法CV_TM_CCOEFF
这种方法也叫做相关匹配,但是和上面的 CV_TM_CCORR 匹配方法还是有不通过的。简单的说,这里是把图像和模板都减去了各自的平均值,使得这两幅图像都没有直流分量。
6. 归一化相关系数匹配法CV_TM_CCOEFF_NORMED
这是 OpenCV 支持的最复杂的一种相似度算法。这里的相关运算就是数理统计学科的相关系数计算方法。具体的说,就是在减去了各自的平均值之外,还要各自除以各自的方差。经过减去平均值和除以方差这么两步操作之后,无论是我们的待检图像还是模板都被标准化了,这样可以保证图像和模板分别改变光照亮不影响计算结果。计算出的相关系数被限制在了 -1 到 1 之间,1 表示完全相同,-1 表示两幅图像的亮度正好相反,0 表示两幅图像之间没有线性关系。
六种模式算法
将模板与重叠的图像区域进行比较。该函数滑过图像,使用指定的方法将大小为w×h的重叠面片与templ进行比较,并将比较结果存储在结果中。以下是可用比较方法的公式(I表示图像,T模板,R结果)。总和在模板和/或图像补丁上完成:x'= 0 ... w-1,y'= 0 ... h-1在函数完成比较后,可以使用minMaxLoc函数找到最佳匹配作为全局最小值(使用TM_SQDIFF时)或最大值(使用TM_CCORR或TM_CCOEFF时)。在彩色图像的情况下,分子中的模板求和以及分母中的每个和在所有通道上完成,并且对于每个通道使用单独的平均值。也就是说,该功能可以采用颜色模板和彩色图像。结果仍然是单通道图像,更容易分析。参数image运行搜索的图像。它必须是8位或32位浮点。templ搜索模板。它必须不大于源图像并具有相同的数据类型。结果比较结果的地图。它必须是单通道32位浮点。如果图像是W×H并且templ是w×h,则结果是(W-w 1)×(H-h 1)。method指定比较方法的参数,请参见TemplateMatchModes掩码搜索模板的掩码。它必须与templ具有相同的数据类型和大小。默认情况下不设置。目前,仅支持TM_SQDIFF和TM_CCORR_NORMED方法。
第一种的方法试用,有一定误差存在。
试用第六种方法结果,
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved