- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
人脸检测算法原理及OpenCV人脸检测程序分析.doc
人脸检测算法原理及OpenCV人脸检测程序分析
罗海风
2011-3-30
人脸检测研究背景:
人脸检测
基于肤色特征
基于灰度特征
启发模型
统计模型
肤色区域分割方法
人脸模板方法等
特征空间方法
PCA、fisherfaces方法等
ANN
SVM
概率模型方法
贝叶斯概率模型
HMM
集成机器学习
以上所列方法中,基于统计模型的方法是目前比较流行的方法[1],具有较大的优越性。其优点有:
不依赖于人脸的先验知识和参数模型,可以避免不精确或不完整的知识造成的错误;
采用实例学习的方法获取模型的参数,统计意义上更加可靠;
通过增加学习的实例可以扩种检测模式范围,提高鲁棒性。
在统计模型方法中,2001年左右由Viola和Jones提出的基于集成机器学习的人脸检测算法相对于其他方法具有明显优势[1 2 3]。近期文献也表明目前尚未发现优于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算法的循环中,首先利用各种弱分类器对训练图片库进行分类,准确度最高的弱分类器保留下来,同时提高判断错误的图片的权重,进入下一循环。最终将每次循环所保留的弱分类器组合起来,成为一个准确的人脸检测器,称为强分类器。具体计算流程见[3 5]。
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分类器的训练是独立于人脸检测过程的。分类器的训练分为两个阶段:
创建样本,用OpenCV自带的creatsamples.exe完成。
训练分类器,生成xml文件,由OpenCV自带的haartraining.exe完成。
具体训练过程见[7 8]
同时,OpenCV中采用的训练算法adaboost是gentle adaboost,为最适合人脸检测的方案。[9 10]
参考文献:
[1]“人脸
文档评论(0)