基于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)。

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

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扩展模块中文版教程
(0)

相关推荐

  • OpenCV:快速入门图片人脸识别

    现在正在做论文,数据处理过程中有一个变量是对用户头像进行数据编码.图片有上万张,如果人工编码,我得累死.大致头像数据样式如下: 才开始我想到图片是由像素颜色等组成的,分析图片的主色调,正好之前有一期公 ...

  • 基于OpenCV的实战:轮廓检测(附代码解析)

    重磅干货,第一时间送达 利用轮廓检测物体可以看到物体的各种颜色,在这种情况下放置在静态和动态物体上.如果是统计图像,则需要将图像加载到程序中,然后使用OpenCV库,以便跟踪对象. 每当在框架中检测到 ...

  • 基于OpenCV实战:车牌检测

    重磅干货,第一时间送达 拥有思维导图或流程将引导我们朝着探索和寻找实现目标的正确道路的方向发展.如果要给我一张图片,我们如何找到车牌并提取文字? 一般思维步骤: 识别输入数据是图像. 扫描图像以查看由 ...

  • 基于OpenCV实战的图像处理:色度分割

    重磅干货,第一时间送达 通过HSV色阶使用彩色图像可以分割来分割图像中的对象,但这并不是分割图像的唯一方法.为什么大多数人偏爱色度而不是RGB / HSV分割? 可以获得RGB / HSV通道之间的比 ...

  • 基于OpenCV实战:绘制图像轮廓(附代码)

    重磅干货,第一时间送达 山区和地形图中海拔高的区域划出的线称为地形轮廓,它们提供了地形的高程图.这些线条可以手动绘制,也可以由计算机生成.在本文中,我们将看到如何使用OpenCV在简单图像上绘制轮廓线 ...

  • 基于OpenCV实战:动态物体检测

    重磅干货,第一时间送达 最近,闭路电视安全系统运行着多种算法来确保安全,例如面部识别,物体检测,盗窃检测,火灾警报等.我们在运动检测的基础上实现了许多算法,因为在空闲帧上运行所有这些进程没有任何意义. ...

  • 基于OpenCV实战:对象跟踪

    重磅干货,第一时间送达 介绍 跟踪对象的基本思想是找到对象的轮廓,基于HSV颜色值. 轮廓:突出显示对象的图像片段.例如,如果将二进制阈值应用于具有(180,255)的图像,则大于180的像素将以白色 ...

  • 实战:基于OpenCV 的车牌识别

    重磅干货,第一时间送达 车牌识别是一种图像处理技术,用于识别不同车辆.这项技术被广泛用于各种安全检测中.现在让我一起基于OpenCV编写Python代码来完成这一任务. 车牌识别的相关步骤 1.车牌检 ...

  • 实战:基于OpenCV进行长时间曝光(内含彩蛋)

    重磅干货,第一时间送达 在本文中,我们将学习长时间曝光摄影技术,以及如何使用Python和OpenCV(开源计算机视觉库)对其进行仿真. 一.什么是"长时间曝光"? 直接来自维基百 ...

  • 基于OpenCV的面部关键点检测实战

    重磅干货,第一时间送达 这篇文章概述了用于构建面部关键点检测模型的技术,这些技术是Udacity的AI Nanodegree程序的一部分. 概述 在Udacity的AIND的最终项目中,目标是创建一个 ...