本文参考了算法原文和网上的资料,是笔者自己对Viola-Jones算法的理解,可能会有些偏差,请读者指正。
Viola-Jones算法是基于人脸的haar特征值进行人脸检测的方法,整体框架分成三个部分:
1、提取目标的特征,作者提取的是haar特征
2、分类器学习的过程,训练弱分类器成为最优弱分类器,多个最优弱分类器组合形成强分类器
3、强分类器进行级联,提高检测的速度和准确率
首先讲一下haar特征:
VJ使用的haar特征仅与一个矩形区域内像素取值的和有关,其特征取值为白色区域对应图像的像素值之和减去黑色区域对应图像的像素值之和。
那么haar特征是如何应用于人脸的呢?
我们来看上面的三幅图像,比如中间一幅表示眼睛区域的颜色比脸颊区域的颜色深,右边一幅表示鼻梁两侧比鼻梁的颜色要深。同样,其他目标,也可以用一些矩形特征来表示。
上面图像中显示的矩形区域是放大之后的,为了看起来方便,实际上一副图像中这样的特征数量太多,其计算复杂性是个问题,为此作者引入引入积分图技术,使得其计算效率大大提高。那什么是积分图技术呢?
积分图是一张与原图大小一致的图,其每个像素/点的取值为其原图左上角所有像素取值的和。假设积分图中某点x的取值记为i(x),当要计算矩形D的像素和时只需要使用i(p4)-i(p2)-i(p3)+i(p1)即可.有了这样一张积分图之后,要计算某一区域的像素和就简化为四个点的加减运算,大大简化了运算
第二部分是分类器学习的过程
VJ采用的目标检测框架是基于Adaboost的分类器学习方法, 其用此选择特