基于OpenCV Haar实战级联分类器的使用
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
近年来,对象检测引起了广泛的关注。从智能手机到交通监控,目标检测已遍及每个领域。时间和准确性是对象检测中的关键约束。目标检测算法的成功取决于其特征表示技术和学习算法,后者仅关注图像的关键部分。在本文中,我们将研究一种技术“使用简单特征的增强级联进行快速对象检测”,在OpenCV级联分类器中使用以及研究级联分类器功能的用法。
图像由像素组成,像素操作成本很高。因此,我们需要更好的图像表示。
1.两个矩形特征:
甲二矩形特征计算两个矩形区域内的像素的总和之间的差。这些区域具有相同的大小和形状,并且在水平或垂直方向上相邻。上图中的A和B是示例。
2.三个矩形特征:
甲三矩形特征计算在一个中心的矩形从总和中减去2米外面的矩形内的总和。上图中的C是三边形特征类型。
3.四个矩形特征:
一个四矩形特征计算对角对矩形之间的区别。上图中的D是示例。
位置x,y处的积分图像包含x,y(含)以上和左侧的像素之和:
ii(x,y)是积分图像,I(x,y)是原始图像。
使用以下重复对:
s(x,y)是累积行总和。s(x,-1)= 0且ii(-1,y)=0。使用积分图像,可以用较少的引用获得任何矩形和。这是示例:
矩形D中像素的总和只能使用四个数组引用来计算。位置1处的积分图像的值是矩形A中像素的总和。位置2处的值为A + B,位置3处的值为A + C,位置4处的值为A + B + C + D。D内的总和可以计算为4 + 1-(2 + 3)。
同样,可以在六个数组引用中计算两个矩形特征,对于三个矩形特征,可以计算八个,对于四个矩形特征,则可以计算九个。这些矩形的图像表示为有效学习提供了足够的对象信息。
每个图像子窗口有超过180,000个矩形要素,其数量远大于像素数。即使可以非常有效地计算每个功能,但计算完整的集合也很昂贵。弱学习算法用于选择最能区分正例和负例的单个矩形特征。对于每个特征,弱学习者确定最佳阈值分类函数,以使最少数量的示例被错误分类。
在输入图像上移动一个窗口,并为图像的每个子部分计算Haar特征。从分类函数中学习到的阈值将对象和非对象分开。没有任何一个功能可以执行错误率低的分类任务。描述一个对象需要大量特征。通过对弱学习者做出的决策进行加权平均,可以获得准确的分类器。
级联的分类器用于提高检测性能,同时从根本上减少计算时间。
图像的所有部分对检测物体都不有用。因此,消除这些负样本可减少计算时间。从上图可以看出,级联分类器有很多阶段。每个阶段都包含根据上一节中提到的增强算法训练的分类器。
窗口将在图像的区域上滑动,这些区域在初始阶段将被分类为正或负。如果该区域标记为负,则窗口将滑动到下一个区域。如果为正,则分类器将进入下一阶段。如果标签在最后阶段为正,则找到对象,通过消除负样本减少了计算时间。
import cv2
face_classifier = cv2.CascadeClassifier('haarcascade_frontalface_alt_tree.xml')
加载图像并应用级联分类器。
img=cv2.imread("wp4419229.jpg")
faces = face_classifier.detectMultiScale(img, 1.001, 4)
现在使用“面”在对象上绘制矩形。
if faces is ():
print("No faces found")
for (x,y,w,h) in faces:
cv2.rectangle(resized, (x,y), (x+w,y+h), (127,0,255), 2)
print("reached")
cv2.imshow('image',resized)
cv2.waitKey(0)
第一个参数是图像,第二个参数是缩放因子,第三个参数是最小邻居数。Haar级联分类器在滑动窗口协议上运行,并使用缩放因子。目标窗口以最小大小开始,并且在测试了该大小的所有窗口之后,使用缩放因子将窗口放大,直到达到最大大小。
使用上述协议,我们将获得许多对单个面孔的响应。邻居的最小数量是较低的阈值,即,如果响应高于阈值,则该区域为有效对象,最小和最大大小都可以作为参数传递。
使用级联分类器,我们可以提高深度神经网络分类器(二进制或多类)的准确性。我们可以使用级联分类器来裁剪仅包含对象的图像,并将其单独传递给分类器。由于消除了图像的不必要部分,因此提高了准确性。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~