人脸检测算法原理及OPENCV人脸检测程序分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人脸检测算法原理及OpenCV 人脸检测程序分析
罗海风
2011-3-30
人脸检测研究背景:人脸检测
基于肤色特征基于灰度特征
启发模型统计模型
肤色区域分割方法人脸模板方法等特征空间方法PCA
、fisherfaces 方法等ANN SVM
概率模型方法
贝叶斯概率模型HMM 集成机器学习
以上所列方法中,基于统计模型的方法是目前比较流行的方法[1],具有较大的优越性。其优点有:
1.不依赖于人脸的先验知识和参数模型,可以避免不精确或不完整的知识造成的错误;
2.采用实例学习的方法获取模型的参数,统计意义上更加可靠;
3.通过增加学习的实例可以扩种检测模式范围,提高鲁棒性。
在统计模型方法中,2001年左右由Viola 和Jones 提出的基于集成机器学习的人脸检测算法相对于其他方法具有明显优势[123]。近期文献也表明目前尚未发现优于Viola &Jones 方法的其他人脸检测方法[4]。该方法不仅检测精度高,最关键的是其运算速度大大快于其他方法。Viola &Jones 人脸检测方法原理:
该方法中几个关键性概念[5]:
1.Haar-like 特征
Haar-like 型特征是Viola 等人提出的一种简单矩形特征,因为类似Haar 小波而得名。Haar
型特征的定义是黑色矩形和白色矩形在图像子窗口中对应的区域的权重灰度级总和之差。上图显示了两种最简单的特征算子。在上述图中,可以看到,在人脸特定结构处,算子计算得到较大的值。
2.积分图
算子数量庞大时上述计算量显得太大,Viola等人发明了积分图方法,使得计算速度大大加快。积分图如上所示,点1处的值为A区域的像素积分,点2处的值为AB区域的像素积分。对整张图片进行一次积分操作,便可以方便的计算出任一区域D像素积分值为4+1-2-3。
3.Adaboost训练算法
在离散Adaboost算法中,Haar-like特征算子计算结果减去某阈值,便可视为一个人脸检测器。因为其准确率不高,称为弱分类器。Adaboost算法的循环中,首先利用各种弱分类器对训练图片库进行分类,准确度最高的弱分类器保留下来,同时提高判断错误的图片的权重,进入下一循环。最终将每次循环所保留的弱分类器组合起来,成为一个准确的人脸检测器,称为强分类器。具体计算流程见[35]。
4.瀑布型级联检测器
瀑布型级联检测器是针对人脸检测速度问题提出的一种检测结构。瀑布的每一层是一个由adaboost算法训练得到的强分类器。设置每层的阈值,是的大多数人脸能够通过,在此基础上尽量抛弃反例。位置越靠后的层越复杂,具有越强的分类能力。
这样的检测器结构就想一系列筛孔大小递减的筛子,每一步都能筛除一些前面筛子楼下的反例,最终通过所有筛子的样本被接受为人脸。瀑布型检测器训练算法见[3]。
OpenCV人脸检测程序流程[6]:
OpenCV的人脸检测程序采用了Viola&Jones人脸检测方法,主要是调用训练好的瀑布级联分类器cascade来进行模式匹配。
cvHaarDetectObjects,先将图像灰度化,根据传入参数判断是否进行canny边缘处理(默认不
使用),再进行匹配。匹配后收集找出的匹配块,过滤噪声,计算相邻个数如果超过了规定值(传入的min_neighbors)就当成输出结果,否则删去。
匹配循环:将匹配分类器放大scale(传入值)倍,同时原图缩小scale倍,进行匹配,直到匹配分类器的大小大于原图,则返回匹配结果。匹配的时候调用cvRunHaarClassifierCascade 来进行匹配,将所有结果存入CvSeq*Seq(可动态增长元素序列),将结果传给cvHaarDetectObjects。
cvRunHaarClassifierCascade函数整体是根据传入的图像和cascade来进行匹配。并且可以根据传入的cascade类型不同(树型、stump(不完整的树)或其他的),进行不同的匹配方式。
函数cvRunHaarClassifierCascade用于对单幅图片的检测。在函数调用前首先利用cvSetImagesForHaarClassifierCascade设定积分图和合适的比例系数(=>窗口尺寸)。当分析的矩形框全部通过级联分类器每一层的时返回正值(这是一个候选目标),否则返回0或负值。
Haar分类器的训练是独立于人脸检测过程的。分类器的训练分为两个阶段:
A.创建样本,用OpenCV自带的creatsamples.exe完成。
B.训练分类器,生成xml文件,由OpenCV自带的haartraining.exe完成。
具体训练过程见[78]
同时,OpenCV中采用的训练算法adaboost是gentle adaboost,为最适合人脸检测的方案。[910]
参考文献:
[1]“人脸检测研究综述”,梁路宏等,计算机学报,Vol25,No5,May2002;
[2]“人脸检测与检索”,艾海舟等,自然科学基金项目60273005;
[3]“基于连续adaboost算法的多视角人脸检测”,武勃等,计算机研究与发展,2005;
[4]“Comparative Testing of Face Detection Algorithms”,N Degtyarev et al.,Image and Signal
Processing,2010;
[5]“Rapid object detection using a boosted cascade of simple features.”Paul Viola and Michael
Jones,Accepted Conference on Computer Vision and Pattern Recognition2001;
[6]/index.php/%E4%BA%BA%E8%84%B8%E6%A3%80%E6%B5%8 B
[7]/blog/static/334061912009641073715/
[8]\OpenCV\apps\HaarTraining\doc\haartraining.doc
[9]/forum/viewtopic.php?f=1&t=4264#p15258
[10]/forum/viewtopic.php?t=3880