学习模板匹配算法时整理

参考

[1]林广栋,黄光红.工业界常用目标检测方法及其展望[J].集成电路应用,2022,39(12):54-57.DOI:10.19339/j.issn.1674-2583.2022.12.020.
[1]冯博迪,杨海涛,李高源,王晋宇,张长弓.神经网络在SAR图像目标识别中的研究综述[J].兵器装备工程学报,2021,42(10):15-22.
https://blog.csdn.net/weixin_57440207/article/details/122647050
https://blog.csdn.net/qq_46418503/article/details/119675943
[1]张卫星.模板匹配技术在图像识别中的应用[J].中国高新科技,2022(08):18-20.DOI:10.13535/j.cnki.10-1507/n.2022.08.07.

模板匹配算法综述

模板匹配是相对比较原始的目标检测方法,思路是把目标的图像模板在待检测图像的所有窗口上逐个进行匹配,找到匹配结果最好的窗口,若该位置的匹配度大于一定阈值,则认为在该位置检测到了目标。
模板匹配法的识别流程分为模板构建和分类识别 2个阶段。先将已标注的训练图像构建形成一系列的模板集,然后在分类阶段将待测数据按照某种相似度配准规则与该模板集进行配准得到识别结果。

  • 最简单的模板匹配方法是直接模板匹配法(相似性测度法),即直接将训练图像用作模板,通常为了提高识别准确度,会对其进行旋转、位移、去噪等相关操作。问题是当目标类别较多时,存在模板库存储量大,计算复杂度较高等问题,大大限制了该方法在实际场景中的应用。(多目标模板匹配自适应目标匹配

  • 为了抑制图像的杂波干扰,提高算法鲁棒性,获得更稳健的识别效果,研究者们提出了先将原图像进行相关变换操作,在变换域再进行模板匹配的相关滤波匹配法。典型的方法有 Casasent 提出的合成判决函数方法,除此之外,还有例如最小平均能量相关滤波器和最小噪声和相关能量滤波器等方法也取得了不错的识别效果。

  • 高速模板匹配法
    传统的模板匹配算法的基本搜索策略是遍历性的,为了找到最优匹配点,传统方法均必须在搜索区域内的每一个像素点上进行区域相关匹配计算,图像相关匹配的数据量和计算量很大,匹配速度较慢,通常的解决方案是并行计算以提高匹配速度,但是受到计算机硬件的限制,匹配速度也会受到不同程度的影响。模板匹配的检测速度主要取决于算法的搜索策略。

    • 1. 序贯相似性检测算法(SSDA)

      序贯相似性检测算法(SSDA)是针对传统模板匹配算法提出的一种高效的图像匹配算法。思路是通过人为设定一个固定阈值,及早地终止在不匹配位置上的计算,以此减小计算量,达到提高运算速度的目的。
      其步骤如下:

      • 1.选取一个误差准则,作为终止不匹配点计算的标准,通常可选取绝对误差;
      • 2.设定一个不变阈值;
      • 3.在子图象中随机选取一点,计算它与模板中相应点的绝对误差值, 将每一随机点对的误差累加起来,若累加到第r次时误差超过设定阈值,则停止累加,记下此时的累加次数r;
      • 4.对于整幅图像计算误差e,可得到一个由r值构成的曲面,曲面最大值处对应的位置即为模板最佳匹配位置。这是因为该点需要多次累加误差才能超过阈值,因此相对于其它点,它最有可能是匹配位置。
    • 2. 分层搜索序贯判决算法

      分层算法首先对目标图像进行分层处理,将图像降维获得低分辨率的小图像,然后对小图像再次进行分层处理,获取到更小的图像,经过n次分层处理后,与原图像一起构建出n个维数不同、分辨率不同的分层图像,将这些图像按照分层次数由大到小排序,然后使用已知模板就可进行分层搜索、分层匹配,从而达到提高匹配速度和匹配精度的目的。

    • 3. 幅度排序相关算法

    • 4. FFT相关算法

    • 5. 还有一种把在图像上的模板移动分为粗检索和细检索两个阶段进行的匹配方法。

      • 原理:一般的图像中有较强的自相关性,因此,进行模板匹配计算的相似度就在以对象物存在的地方为中心形成平缓的峰。这样,即使模板匹配时从图像对象物的真实位置稍微离开一点,也表现出相当高的相似度。
      • 步骤:首先进行粗检索,它不是让模板每次移动一个像素,而是每隔若干个像素把模板和图像重叠,并计算匹配的尺度,从而求出对象物大致存在的范围。然后,在这个大致范围内,让模板每隔一个像素移动一次,根据求出的匹配尺度确定对象所在的位置。这样,整体上计算模板匹配的次数减少,计算时间短,匹配速度就提高了。
      • 缺点:使用这种方法存在漏掉图像中最适当位置的危险性。
  • 高精度定位的模板匹配。为了求得对象物在图像中的精确位置,总希望相似度分布尽可能尖锐一些。为了达到这一目的,人们提出了基于图案轮廓的特征匹配方法。图案轮廓的匹配与一般的匹配法比较,相似度表现出更尖锐的分布,从而利于精确定位。

一般来说,在检测对象的大小和方向未知的情况下进行模板匹配,必须具备各式各样大小和方向的模板,用各种模板进行匹配,从而求出最一致的对象及其位置。另外,在对象的形状复杂时,最好不把整个对象作为一个模板,而是把对象分割成几个图案,把各个分图案作为模板进行匹配,然后研究分图案之间的位置关系,从而求图像中对象的位置。这样即使对象物的形状稍微变化,也能很好地确定位置。

应用

模板匹配方法常用于工业产品外观检测领域;若目标的形态固定,模板匹配方法可以作为一种简单有效的目标检测方法使用,如检测在固定位置拍摄的固定大小的刚性物体等。

模板匹配算法实现

原理

如果输入图像(原始图像)尺寸是W * H,模板的尺寸是w * h,则返回值的大小为(W-w+1)*(H-h+1)。如下图。
在这里插入图片描述

函数cv2.matchTemplate():

Opencv提供了matchTemplate用来支持模板匹配方法。模板匹配时衡量目标图像与滑动窗口是否匹配的方法包括平方差、标准平方差、相关性、标准相关性、相关性系数、标准相关性系统数等。

语法格式为:

result=cv2.matchTemplate(image,templ,method[,mask])
  • image:为原始图像,必须是8位或者32位的浮点型图像(灰度图);
  • templ:为模板图像。它的尺寸必须小于或等于原始图像,并且与原始图像具有同样的类型;
  • method:为匹配方法。该参数通过TemplateMatchModes实现,有6种可能的值,如表所示:
    在这里插入图片描述
    其具体对应的计算公式:
    在这里插入图片描述
  • mask: 为模板图像掩模。它必须和模板图像 templ 具有相同的类型和大小。通常情况下该值使用默认值即可。当前,该参数仅支持TM_SQDIFF和TM_CCORR_NORMED两个值。

函数cv2.matchTemplate()的返回值result 是一个结果集。类型是单通道32位浮点型。是由每个位置的比较结果所构成的。(模板左上角点位置)

查找最值

需要注意的是,函数cv2.matchTemplate()通过参数method来决定使用不同的查找方法。对于不同的查找方法,返回值result具有不同的含义。

  • method的值为cv2.TM_SQDIFF和cv2.TM_SQDIFF_NORMED时,result值为0表示匹配度最好,值越大,表示匹配度越差。
  • method 的值为 cv2.TM_CCORR、cv2.TM_CCORR_NORMED、cv2.TM_CCOEFF 和cv2.TM_CCOEFF_NORMED时,result的值越小表示匹配度越差,值越大表示匹配度越好。

查找最值(极值)与最值所在的位置,可以使用cv2.minMaxLoc()函数实现。语法格式如下:

  • minVal,maxVal,minLoc,maxLoc=cv2.minMaxLoc(src[,mask])
    • src:为单通道数组。
    • minVal:为返回的最小值,如果没有最小值,则可以是NULL(空值)。
    • maxVal:为返回的最大值,如果没有最小值,则可以是NULL。
    • minLoc:为最大值的位置,如果没有最大值,则可以是NULL。
    • maxLoc:为最大值的位置,如果没有最大值,则可以是NULL。
    • mask:为用来选取掩模的子集,可选项

可以借助函数cv2.rectangle()将该位置用白色标记出来。

  • Img=cv.rectangle(img,pt1,pt2,color[,thickness])
    • img:表示要标记的目标图像。
    • pt1:是矩形的顶点。
    • pt2:是pt1的对角顶点。
    • color:是要绘制矩形的颜色或灰度级(灰度图像)。
    • thickness:是矩形边线的宽度。

多目标模板匹配

有些情况下,要搜索的模板图像很可能在输入图像内出现了多次,这时就需要找出多个匹配结果。
numpy模块中的函数where()能够获取模板匹配位置的集合。对于不同的输入,其返回的值是不同的。

  • 当输入(参数)是一维数组时,返回值是一维索引,只有一组索引数组。
  • 当输入是二维数组时,返回的是匹配值的位置索引,因此会有两组索引数组表示返回值的位置。

自适应尺寸的模板匹配

针对一般模板匹配的缺点:只能进行平移的搜索,不能应对于目标形状变化、角度变化、大小变化的场景。提出了自适应尺寸的模板匹配方法。思路是在载入模板图像后每次缩放一定的比例进行模板匹配,得到不同比例下的ROI,对所有的ROI区域与我们的模板图片进行相似度的比较,选出相似度最高的匹配图像,同时获得最佳的匹配比例。

猜你喜欢

转载自blog.csdn.net/weixin_45246566/article/details/128883284