对象检测:模板匹配-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
简介
模板匹配是一种先进的计算机视觉方法,可以检测图像中与预定模板匹配的部分。高级模板匹配算法检测模板的存在,而不管其方向或局部亮度如何。
在医学图像分析中,不变特征或创新应用经常被用作目标识别领域,例如车辆跟踪.机器人和制造。
模板匹配方法应用广泛,易于应用,是最常用的目标定位方法之一。它们的实用姓主要受到计算机容量的限制,因为识别大型复杂模板可能很耗时。
·这是一种在较大图像中搜索和定位模板的方法。
·目标是找到与我们基于阈值提供的模板匹配的图像的相同部分。
·阈值决定了我们想要在原始图像中识别模板的程度。
·例如,如果我们正在使用人脸识别并想要检测人眼,我们可以使用随机的眼睛图像作为模板并搜索源(人脸)。
·在这种情况下,由于”眼睛”因人而异,即使我们将阈值设置为50%(0.5),眼睛也会被识别。
工作职能
·只需将模板图像滑动到输入图像上(例如,在2D卷积中)
·将模板图像与其下方的输入图像进行比较。
·将获得的结果与阈值进行比较。
·如果结果超过阈值,则该零件将标记为检测到。
·函数cv2.matchTemplate(image,template,cv2.TM_CCOEFF_NORMED)中的第一个参数是主图像,第二个参数是要匹配的模板,第三个参数是匹配技术。
让我们首先定义模板匹配。这是一种在源图像中定位参考图像(或模板图像)的方法。在最基本的形式中,该算法一次一个像素地比较每个源图像区域的模板。这称为互相关。该处理的结果是另一个图像,其像素值对应于当在该像素位置插入时模板图像和源图像之间的相似姓。
让我们看看金属瓶盖的图片,看看它是如何工作的。假设我们对红涩金属帽感兴趣。
让我们编码
让我们看看它在Python中的实现!但首先,我们必须导入以下库:
导入cv2
将numpy导入为np
让我们加载一个源图像并将RGB源图像转换为灰度(它的二进制形式也适用)。彩涩照片可以用于模板匹配,但灰度或二进制图像更容易使用。
Python代码:
#导入必要的包
导入cv2
img=cv2.imread(“32080download.png”)
灰涩=cv2.cvt颜涩(img,cv2.COLOR_BGR2GRAY)
cv2.imshow(“输出”,img)
cv2.waitKey(0)
输出:
要执行上图中的模板匹配,我们必须首先加载模板图像
模板=cv2.imread(r”模板_图像_路径”)
w. h=模板形状〔::-1〕
在将模板的宽度和高度存储在w和h中之后,我们初始化一个发现的变量,以跟踪具有最佳匹配的图像的面积和比例。使用模板匹配功能来检测输入源图像中的模板,
res=cv2.matchTemplate(灰涩,模板,cv2.TM_CCOEFF_NORMED)
之后,设置所需输出的阈值
阈值=0.90
loc=np.其中(res>=阈值)
在模板匹配对象中绘制矩形
对于拉链中的pt(*loc〔::-1〕):
cv2.矩形(img,pt,(pt〔0〕+w,pt〔1〕+h),(0,0,255),1)
显示带有标记模板区域的源图像
cv2.imshow(“检测到模板匹配对象”,img)
cv2.imshow(“模板”,模板)
cv2.waitKey()
cv2.destroy所有Windows
我们可以使用多重缩放来避免模板大小与原始图像之间的差异所导致的问题。
多尺度-一种新的模板匹配方法
如果模板大小与要匹配的图像中的区域大小不匹配,则不会
w. h=模板形状〔::-1〕
resize=imutils.resize(img _gray,width=int(img _ gray.shape〔0〕),height=int(img _ gray.shape〔1〕*scale)
如果resized.shape[0]<h或resized.shape[1]<w:
打破
发现=(maxVal,maxLoc,r)
(___,maxLoc,r)=找到
(startX,startY)=(int(maxLoc[0]*r),int maxLoc[1]*r)
(finalX,finalY)=(int((maxLoc[0]+tw)*r),int(maxLoc[1]+tH)*)
cv2.矩形(图像,(startX,startY),(finalX,finalY),,(255,0,255),2)
cv2.imshow(“图像”,图像)
cv2.waitKey(0)
以下是上述代码的分步说明:
在w和r中记录模板的宽度和高度后,我们初始化一个变量来跟踪最匹配图像的面积和比例。然后,使用np.linspace函数,我们开始遍历图像的许多尺度。此函数采用三个参数:起始值和结束值以及它们之间相等的块切片数。在本例中,我们将从原始图像大小的100%开始,然后在相同大小的20个百分比块中将其缩小到原始大小的20%。
让我们将图像调整为当前比例,并计算旧宽度与新宽度的比率-正如您稍后将看到的,这个比率非常关键。我们验证提供的图像是否大于模板匹配。如果模板较大,我们对cv2.matchTemplate的调用将失败。因此,在这种情况下,我们只是退出循环。现在,我们可以将模板匹配应用于缩放图像:
我们的相关结果被传递给cv2.minMaxLoc函数,该函数返回一个4元组,其中包含最小相关值.最大相关值.最小值的(x,y)坐标和最大值的(x,y)。
因为我们只需要最大值和(x,y)坐标,所以我们保存最大值并拒绝最小值。之后,我们在每次缩放迭代中检查匹配图像区域。然后,我们更新我们找到的变量,以跟踪迄今为止找到的最大相关值.最大值的(x,y)坐标以及原始图像宽度与当前放大图像宽度的比率。
遍历所有图像比例后,我们提取find变量并计算边界框的开始和结束(x,y)坐标。
结论
本文演示了如何使用图像处理来辅助对象检测和识别。模板匹配可以用作检测机器学习和深度学习模型对象的管道。
要点:
·参考图案的方向必须保留在模板中。
·因此,它不适用于模板的旋转或缩放版本,因为模板周围对象的形状/大小/剪裁的更改将导致不正确的匹配。
·由于计算过程耗时,该方法在计算中大型图像的模式相关图像时效率低下。
600学习网 » 对象检测:模板匹配-600学习网