经典算法实现——基于Viola-and-Jones的人脸检测算法.docx

经典算法实现——基于Viola-and-Jones的人脸检测算法.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

作业5实现人脸检测算法

【实验目的】

阅读Viola,P.A.和Jones,M.J.在2004IJCV.上发表的论文“Robustreal-timefacedetection.”并实现相关人脸检测算法。

【实验原理】

该论文提出一个快速高效的人脸识别框架,主要有三点创新:1〕防止直接计算图像灰度,利用积分图(integralimage)概念使特征探测器在图像不同尺度下的特征计算都十分迅速,文中选用矩形特征〔双矩、三矩和四矩〕和积分图来表征图像;2〕利用Adaboost算法建立分类器训练样本;3〕建立一个分类器的注意力级联〔cascade〕结构,用以快速估计图像中人脸较可能出现的区域从而重点关注。

而本次作业的源程序最核心的地方时使用了Opencv中的人脸检测函数cvHaarDetectObject(),利用haar特征〔边缘特征、线特征和中心环绕特征,见图1〕进行级联boosted分类器训练,HaarCascade与上文的〔3〕cascade概念相近。

图1海尔特征

【概念学习和积累】

矩形特征:

图2矩形特征例如,模板的值等于白色矩形像素和减去灰色矩形像素和

A、B展示了双矩特征,C表示三矩特征,D表示四矩特征

积分图:

图像中一点A(x,y)的积分图ii(x,y)定义为,也可用迭代方法求出ii(x,y),如图2:

图3图像内点A(x,y)的积分图定义为其左上角矩形

所有像素之和,s(x,y)为A(x,y)及其y方向向上所有像素之和〔图中粗黑竖线〕

这样,在m*n大小的图像中,每个像素计算ii(x,y)和s(x,y),m*n*2次计算即可得到整个积分图矩阵。经论文中相关推论可知,矩形特征计算特征值至于其端点的积分图有关,与特征模板坐标值无关,故特征值计算所消耗时间都是常量,且只是简单加减,这样大大提高检测速度。

Adaboost算法:

Adaboost训练强分类器的根本算法按个人理解描述如下:

假设一组样本有T个特征,给定包含n个样本的训练集{(x1,y1),(x2,y2),…,(xn,yn)},其中yi(i=0,…,n)可取1和0来表示正样本〔是目标类型〕和负样本〔非目标类型〕来从n个弱分类器中训练强分类器:

对第一个特征t=1,初始化各个弱分类器的权重w(1,i),通常用经验值〔1/2m或1/2l设置,m、l分别是正负样本的数量〕设置;

归一化权重w(1,i),…,w(1,n)为q(1,i),…,q(1,n);

对n个样本的T个特征进行训练,得到T个弱分类器h(f1),…,h(fT),计算这些分类器对应于所有样本的错误率ε(f1)、ε(f2),…,ε(fT);

在n个错误率中选出最小错误率ε(fk),并确定对应弱分类器为最正确弱分类器;

利用最小错误率ε(fk)对n个样本进行权重调整:正确分类样本的权重加上新系数〔该系数随最小错误率增加而递增〕,错误分类样本权重不变

归一化n个新权重,再对n个样本重新训练,获得T个新分类器,计算这些新分类器对应n个样本的错误率,再选出最小错误率……直至调整出新的权重;

一直训练样本,直至选出的最正确弱分类器满足预定条件,结束整个过程。

由此可见,训练弱分类器〔特征f〕就是在当前权重分布的情况下确定f的最优阈值,使其对所有训练样本的分类误差最低,这样的弱分类器把当前元素前的所有元素和当前元素后的所有元素分成目标与非目标;而经过M次迭代后获得了T个最正确弱分类器,可以将它们组合成一个强分类器,当新的强分类器面对一幅待检测图像时,相当让所有弱分类器投票,再对投票结果按照弱分类器的错误率加权求和,将投票加权求和的结果与平均投票结果比拟得出最终的结果。

注意力级联模型:

图4注意力级联模型

1、2、3是一系列子窗口,每个子窗口对应许多分类器,因此在1子窗口处就有原始数量的分类器,特征在下一级子窗口开始分类之前会经过条件筛选,因此终极和最初级相比子窗口数量急剧减少,用于增加感兴趣区域的关注。

【程序说明】

1、见facedetection文件夹中“程序说明.txt“;

2、由于程序是用matlab做接口,vc++进行实际检测,故编译之前要配置matlab:

3、需要安装matlab和VC++2005或以上版本。

在matlab中输入mex–setup进行安装与C的接口,然后修改路径为src,编译mexFaceDetect.cpp-I../Include/../lib/*.lib-outdir../bin/,编译通过后即可修改图片名称继而检测人脸。

【实验结果与结论】

公共资源faces.zip内的图片局部实验结果

不同性别、肤色的样本选取,而且图片背景简单,人脸面积占较大局部,多为正脸,干扰性小,故实验效果好。

个人又在网上寻找一些图

文档评论(0)

147****4268 + 关注
实名认证
内容提供者

认真 负责 是我的态度

1亿VIP精品文档

相关文档