目录
传统目标分类器主要包括Viola Jones Detector、HOG Detector、DPM Detector,本文主要介绍VJ检测器,最常用的VJ检测器就是Haar级联检测器。
Viola Jones Detector是作为人脸检测器被Viola和Jones提出来的,后来Rainer Lienhart和Jochen Maydt将这个检测器进行了扩展,opencv中的haar检测器就是以此为基础的。既然提到了人脸检测,那就简单了解一下相关内容吧。
目前人脸检测的方法主要有两大类:基于知识和基于统计。
- 基于知识的方法:主要利用先验知识将人脸看作器官特征的组合,根据眼睛、眉毛、嘴巴、鼻子等器官的特征以及相互之间的几何位置关系来检测人脸。主要包括模板匹配、人脸特征、形状与边缘、纹理特性、颜色特征等方法。
- 基于统计的方法:将人脸看作一个整体的模式——二维像素矩阵,从统计的观点通过大量人脸图像样本构造人脸模式空间,根据相似度量来判断人脸是否存在。主要包括主成分分析与特征脸、神经网络方法、支持向量机、隐马尔可夫模型、Adaboost算法等。
VJ检测器就是基于统计的方法设计的,内部包含了Adaboost算法。由于Haar检测器更为完善、应用范围广,因此本文的VJ检测器特指利用Haar分类器实现的检测算法。
Haar检测器是利用Haar特征、积分图、AdaBoost算法、级联分类器来实现的,实现过程可总结为:
- 使用Haar特征做检测;
- 使用积分图对Haar特征求值进行加速;
- 使用AdaBoost算法训练区分人脸和非人脸的强分类器;
- 使用筛选式级联把强分类器级联到一起,提高准确率和速度。
1. Haar特征
Haar是一种特征描述,随着时代的进步Haar特征也从Haar Basic简单特征扩展到了Haar-Like以及到现在的Haar Extended比较复杂的特征。在opencv中共分为了三类BASIC(边缘特征、线性特征、对角特征)、CORE(中心特征)、Titled(旋转45°),如下图所示,它们共同组成了特征模板。
特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。
上图的特征模板称为“特征原型”;特征原型在图像子窗口中扩展(平移、伸缩)得到的特征称为“矩形特征”;矩形特征的值称为“特征值”。从下图可以看到,矩形特征可用于表示人脸的某些特征,如中间一幅表示眼睛区域的颜色比脸颊区域的颜色深,右边一幅表示鼻梁两侧比鼻梁的颜色要深。
由于特征原型可以平移伸缩,因此矩形特征值和特征模板、矩形位置和矩形大小这三个因素有关。故类别、大小、位置的变化使得很小的检测窗口含有非常多的矩形特征,在24*24像素大小的检测窗口内矩形特征值就达16万之多。为提高计算速度引入了积分图,为了选取高效率分类器引入了AdaBoost级联分类器。
2. Haar特征值的计算
2.1. 积分图
积分图就是只遍历一次图像就可以求出图像中所有区域像素和的快速算法,大大的提高了图像特征值计算的效率。积分图主要的思想是图像某点积分图的值,是某点与起点作为对角点所形成的矩形区域像素之和,它作为一个数组的元素保存在内存中,当要计算某个区域的像素和时可以直接索引数组的元素进行计算,不用重新计算这个区域的像素和,从而加快了计算(这有个相应的称呼,叫做动态规划算法)。积分图能够在多种尺度下,使用相同的时间(常数时间)来计算不同的特征,因此大大提高了检测速度。
积分图是一种能够描述全局信息的矩阵表示方法,其构造方式是位置(i, j)处的值ii(i, j)是原图(i, j)左上角方向所有像素灰度值f(k, l)的和,即
积分图的构建步骤:
- 用s(i, j)表示行方向的累加和,初始化s(i,−1)=0;
- 使用ii(i, j)表示一个积分图像,初始化ii(−1, i)=0;
- 逐行扫描图像,递归计算每个像素(i, j)行方向的累加和s(i, j)和积分图像ii(i, j)的值:
- 扫描图像一遍,当到达图像右下角像素时,图像积分图ii就构建好了。
2.2. 计算Haar特征值
上面已经对积分图做了介绍,那么让我们利用积分图计算下面的边缘矩形特征:
区域A的像素值之和为:Sum(A) = ii(5)+ii(1)−ii(2)−ii(4)
区域B的像素值之和为:Sum(B) = ii(6)+ii(2)−ii(5)−ii(3)
该矩形特征值为:Sum(A)-Sum(B) = ii(5)+ii(1)−ii(2)−ii(4)−[ii(6)+ii(2)−ii(5)−ii(3)]
积分图的出现就使Haar特征值的相关变量由三个 (特征类型、大小、位置) 变成了显性的积分图的值,而且只需要遍历一次图像,因此特征值的计算速度得到了极大的提升。