Haar-like特征人脸识别

2001年,Paul Viola 和Miachael Jones等人利用Adaboost算法构造了人脸检测器,称为Viola-Jones检测器,即在AdaBoost算法的基础上,使用Haar-like小波特征(简称类haar特征)和积分图方法进行人脸检测,取得很好的效果。之后Rainer Lienhart和Jochen Maydt用对角特征,即Haar-like特征对检测器进行扩展。opencv中自带的人脸检测算法即基于此检测器,称为“Haar分类器”。
AdaBoost是Freund和Schapire在1995年提出的算法,是对传统Boosting算法的一大提升。Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。
下面介绍Viola-Jones分类算法:
OpenCV中的Haar分类器 = 类Haar特征 + 积分图方法 + AdaBoost + 级联;
Viola-Jones分类器算法要点:
1. 使用类Haar输入特征:对矩形图像区域的和或差进行阈值化;
2. 积分图像技术加速了矩形图像区域的45度旋转的值的计算,这个图像结构被用来加速类Haar输入特征的计算。
3. 使用Adaboost来创建二分类问题(人脸与非人脸)的分类器节点(高通过率,低拒绝率)。
4. 把分类器节点组成筛选式级联(在筛选式级联里,一个节点是Adaboost类型的一组分类器)。换句话说:第一组分类器是最优,能通过包含物体的图像区域,同时允许一些不包含物体的图像通过;第二组分类器次优分类器,也有较低的拒绝率;以此类推。只要图像通过了整个级联,则认为里面有物体。这保证了级联的运行速度可以很快,因为它一般可以在前几步就可以拒绝不包含物体的图像区域,而不必走完整个级联。
Haar-like特征可由下图表示:
Haar-like特征人脸识别_第1张图片
每个特征由2~3个矩形组成,在这些小波示意图中,浅色区域表示“累加数据”,深色区域表示“减去该区域的数据”。分别检测边界、线、中心特征,把矩形框(可以理解为特征模板)放到人脸图像区域上,将矩形框内的白色区域像素之和减去黑色区域的像素之和,得到的就是所谓的人脸特征值。类haar特征反映了图像的灰度变化,将人脸特征量化,以区分人脸和非人脸。
这些类Haar特征对于“块特征”(眼睛,嘴,发际线)具有比较好的效果,但对树枝或主要靠外形(如咖啡杯)的物体不适用。

Adaboost
是一种基于统计的学习算法,在学习过程中不断根据事先定义的各个正例和反例的特征所起的效果调整该特征的权值,最终按照特征的性能的好坏给出判断准则。
其基本思想是利用分类能力一般的弱分类器通过一定的方法叠加(boost)起来,构成分类能力很强的强分类器。Adaboost训练强分类器的算法描述如下:
给定一系列训练样本 (x1,y1),(x2,y2),…(xn,yn),其中 xi 表示第 i 个样本, yi=1 时为正样本(人脸), yi=0 表示负样本(非人脸)。对每个特征 featurej ,训练一个弱分类器 hj(x),之后对每个特征生成的弱分类器计算权重误差,将具有最小误差 ej 的分类器叠加到强分类器中,并更新训练样本的概率分布最终构成强分类器。
级联强分类器示意图如下:
Haar-like特征人脸识别_第2张图片
Viola-Jones检测器利用瀑布(Cascade)算法分类器组织为筛选式的级联分类器,级联的每个节点是AdaBoost训练得到的强分类器。在级联的每个节点设置阈值 b,使得几乎所有人脸样本都能通过,而绝大部分非人脸样本不能通过。节点由简单到复杂排列,位置越靠后的节点越复杂,即包含越多的弱分类器。这样能最小化拒绝图像但区域时的计算量,通知保证分类器的高检测率和低拒绝率。例如在识别率为99.9%,拒绝率为50%时,(99.9%的人脸和50%的非人脸可以通过),20个节点的总识别率为 :0.999^20=98%

而错误接受率仅为: 0.5^20=0.0001%

参考博客:
http://blog.csdn.net/xiaowei_cqu/article/details/7670703
http://blog.csdn.net/u011285477/article/details/49659567
http://www.cnblogs.com/mikewolf2002/p/3437883.html

你可能感兴趣的:(opencv)