基于OpenCV Haar实战级联分类器的使用

共 2603字,需浏览 6分钟

 ·

2021-03-08 14:00

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

近年来,对象检测引起了广泛的关注。从智能手机到交通监控,目标检测已遍及每个领域。时间和准确性是对象检测中的关键约束。目标检测算法的成功取决于其特征表示技术和学习算法,后者仅关注图像的关键部分。在本文中,我们将研究一种技术“使用简单特征的增强级联进行快速对象检测”,在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)。


同样,可以在六个数组引用中计算两个矩形特征,对于三个矩形特征,可以计算八个,对于四个矩形特征,则可以计算九个。这些矩形的图像表示为有效学习提供了足够的对象信息。


AdaBoost用于分类器学习


每个图像子窗口有超过180,000个矩形要素,其数量远大于像素数。即使可以非常有效地计算每个功能,但计算完整的集合也很昂贵。弱学习算法用于选择最能区分正例和负例的单个矩形特征。对于每个特征,弱学习者确定最佳阈值分类函数,以使最少数量的示例被错误分类。


在输入图像上移动一个窗口,并为图像的每个子部分计算Haar特征。从分类函数中学习到的阈值将对象和非对象分开。没有任何一个功能可以执行错误率低的分类任务。描述一个对象需要大量特征。通过对弱学习者做出的决策进行加权平均,可以获得准确的分类器。

注意级联


级联的分类器用于提高检测性能,同时从根本上减少计算时间。

图像的所有部分对检测物体都不有用。因此,消除这些负样本可减少计算时间。从上图可以看出,级联分类器有很多阶段。每个阶段都包含根据上一节中提到的增强算法训练的分类器。


窗口将在图像的区域上滑动,这些区域在初始阶段将被分类为正或负。如果该区域标记为负,则窗口将滑动到下一个区域。如果为正,则分类器将进入下一阶段。如果标签在最后阶段为正,则找到对象,通过消除负样本减少了计算时间。


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)


detectMultiScale函数的参数


第一个参数是图像,第二个参数是缩放因子,第三个参数是最小邻居数。Haar级联分类器在滑动窗口协议上运行,并使用缩放因子。目标窗口以最小大小开始,并且在测试了该大小的所有窗口之后,使用缩放因子将窗口放大,直到达到最大大小。


使用上述协议,我们将获得许多对单个面孔的响应。邻居的最小数量是较低的阈值,即,如果响应高于阈值,则该区域为有效对象,最小和最大大小都可以作为参数传递。


使用级联分类器以提高准确性


使用级联分类器,我们可以提高深度神经网络分类器(二进制或多类)的准确性。我们可以使用级联分类器来裁剪仅包含对象的图像,并将其单独传递给分类器。由于消除了图像的不必要部分,因此提高了准确性。


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报