学习OpenCV:matchTemplate模板匹配原理分析 您所在的位置:网站首页 opencv模板匹配多目标 学习OpenCV:matchTemplate模板匹配原理分析

学习OpenCV:matchTemplate模板匹配原理分析

2023-08-16 04:13| 来源: 网络整理| 查看: 265

自己的一些理解,仅供参考。

模板匹配无法就是在目标图中找出与模板图最相似的对应的坐标位置 。

通过整体图像的整体灰度值来判断就是灰度匹配;通过图像的边缘信息来判断就是形状匹配;通过图像的角点等特征点来判断就是特征匹配。

模板匹配中,最重要的就是定义两幅图像的相似度,根据相似度的最值即可在目标图中找到对应的坐标。

定义两幅图片相似度需要根据图片的实际情况选择,OpenCV这里提供了包含以下方法,MATLAB中还提供了一些其他方法。

差值平方和匹配 TM_SQDIFF 标准化差值平方和匹配 TM_SQDIFF_NORMED 相关性匹配 TM_CCORR 标准化相关匹配 TM_CCORR_NORMED 相关性系数匹配 TM_CCOEFF 标准相关性系数匹配 TM_CCOEFF_NORMED

 这里简单说明一下这几个方法的区别,欢迎留言指正。

TM_SQDIFF:即为SSD,得到结果其实为不相似度,如果你在寻找精确或非常接近精确的匹配,使用SSD。它速度很快,而且它肯定会找到相似值的最小值。不具备光照不变性。对应的TM_SQDIFF_NORMED得到的结果的具体数学意义不知道是什么,公式本身是可以大于1的,但实际试验发现大于1的值会等于1。

y=kx+b,y为输出图像,x为输入图像,则斜率k为对比度,截距b为亮度。

TM_CCORR_NORMED:向量相乘公式a·b=x1x2+y1y2=|a||b|cosθ,把图片当成向量,相似值则cosθ,在0到1之间,当两个向量平行时cosθ=1,对应的当图像整体乘于某个值时两张图像仍然为相似,即可不用考虑斜率k。而TM_CCOEFF_NORMED则是为了忽略截距b的影响,将向量平移到均值中,相乘的两个向量为与均值相减之后的向量。

(好难描述,将就一下。。。)

 这里简单介绍一下模板匹配过程中需要用到的其他扩展功能的思路,实现起来都比较简单,这里就不帖代码了。

1、旋转匹配:在建立模板的时候,设置好起始角度,终止角度,跨度,根据这些值对模板进行旋转,可通过warpAffine依次生成各个角度的模板;在匹配过程中将目标图与这些各个角度的模板进行匹配,选择相似度最高时的角度。

2、金字塔:最重要的功能是为了减少计算量。就是将一张大图通过resize成比较小的图,一般是依次长宽都除于2,在最高层进行模板匹配操作,得到匹配坐标之后再从最高层依次映射到原图中,在这映射过程中为了提高精度,需要在匹配坐标两边10个像素内继续继续匹配。注意金字塔层数不能选得太多,根据我经验一般最高出层需应该大于10个像素。如果有旋转操作一般在最高层确定好角度后在底层对角度就不进行匹配了。

3、形状匹配:对模板用Canny提取模板边缘,转化为0,1的二值化图像;对目标图同样用Canny提取模板边缘,另外增加一个膨胀系数增加适应性,转化为0,1的二值化图像;运行matchTemplate,方法为TM_CCORR,得到的相似度即为模板边缘图在目标边缘图中的个数,处于模板边缘图的个数即可进行归一化。最后即可通过选定的阈值构建连通域,确定各连通域中相似度最大的坐标即为我们要找的模板位置。当然可根据实际情况添加旋转匹配的与金字塔的功能鲁棒。

4、亚像素:选取最值旁边的几个像素坐标,构建二元方程,选择该工程中最值对应的亚像素坐标即可。

对于非线性变换图像、扭曲、光照不均等特性的图像这些匹配方法可能无能为力。Halcon大神Andreas Hofhauser有论文可参考

参考链接:

https://stackoverflow.com/questions/58158129/understanding-and-evaluating-template-matching-methods

https://blog.csdn.net/huixingshao/article/details/45560643

《机器视觉算法与应用(双语版).pdf》第三章



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有