目标检测是图像处理的重要组成部分。自动驾驶汽车必须检测车道,路面,其他车辆,人,标志和信号等。我们生活在一个动态的世界中,一切都在不断变化。对象检测的应用无处不在。
我们正在研究自动驾驶汽车的深度学习和计算机视觉。特征检测是对象检测的任务之一。那么,什么是特征检测?对于人类,我们了解图案,形状,大小,颜色,长度以及其他可识别物体的物体。它也有点类似于计算机。
特征可以是形状,边缘,长度等任何形式,也可以是所有特征的组合。在我们之前有DeepFake检测的项目,我们使用MSE(均方误差),PSNR(峰值信噪比),SSIM(结构相似性指数)和直方图作为特征从真实图像中识别DeepFake图像。
一个好的算法必须是可重复的和可扩展的。例如,假设目标是从大量图像中检测狗,其中还包含猫和其他动物的图像。
关于特征的表述,它必须是独特的,并且需要在大多数数据中显示。如果我们有大部分与上述两张图片相似的图片,那么这里的不好的特征是什么?
在这种情况下,一个不好的特征就是耳朵的大小。我们的理解是狗耳朵的大小通常较大。但这不是示例图像中的原因。在第一个图像中,狗的耳朵与猫相似,甚至更小。如果我们仅使用耳廓大小作为特征来仅使用这两个图像来训练模型,则我们将有50%的真阴性或假阳性。这带来了另一个重要的观点。如果您想在模型中获得更高的成功,则应谨慎选择该功能。大小尺寸也不是一个好的特征。
我们的目标是识别其他物体,例如道路上的卡车。我们可以使用哈里斯角点检测或精巧边缘检测之类的技术来检测边缘。我们需要将汽车,行人,标志与图像分开。我们可以使用OpenCV专门识别卡车。
代码语言:javascript复制import cv2
cv2.matchTemplate()
模板匹配只是一种将输入图像复制到模板图像上,并在模板图像下比较模板图像和输入图像的技术。它返回一个灰度图像,表示该模板与多少个像素匹配。OpenCV提供了许多模板匹配方法。这是相关系数的数学公式。
一旦在两个图像中都找到匹配项,它将选出相似点。OpenCV官方文档在此处提供了带有代码示例的详细信息。让我们找到路上的卡车。
代码语言:javascript复制import cv2
import numpy as np
import matplotlib.image as mpimg
from matplotlib import pyplot as plt
%matplotlib inline
image_color =cv2.imread('actual_truck.jpg')
plt.imshow(image_color)
我们从文件中读取图像。我们将在此图像中找到卡车。
图像高度和宽度
将图像转换为灰度
使用灰度的原因是使图像尽可能简单。不需要彩色图像。颜色增加了图像的复杂度,并增加了信噪比。
代码语言:javascript复制image_gray = cv2.cvtColor(image_color,cv2.COLOR_BGR2GRAY)
plt.imshow(image_gray,cmap ='gray')
创建模板图像
这是我们的模板图像。OpenCV使用此图像收集了特征并找到了卡车。
代码语言:javascript复制import cv2
import numpy as np
import matplotlib.image as mpimg
from matplotlib import pyplot as plt
%matplotlib inline
image_color =cv2.imread('sample_truck.jpg')
x= 235
y = 350
h = 200
w = 150
cropped=image_color[y:y h, x:x w]
plt.imshow(cropped)
status = cv2.imwrite('t.jpg', cropped)
print("Image written to file-system :",status)
执行模板匹配
代码语言:javascript复制# Perform template matching using OpneCV
result = cv2.matchTemplate(image_gray,template, cv2.TM_CCOEFF_NORMED)
print(result.shape)
plt.imshow(result)
找到卡车
代码语言:javascript复制min_val, max_val, min_loc, max_loc =cv2.minMaxLoc(result)
top_left = max_loc
bottom_right = (top_left[0] w,top_left[1] h)
cv2.rectangle(image_color, top_left,bottom_right, (10,10,255), 5)
plt.imshow(image_color)
结论
我们介绍了什么是图像处理及其应用。然后我们讨论有关cv2.matchTemplate()。最后,我们使用模板匹配来识别道路上的卡车。