Adaboost算法及其在实时视频流中应用.doc

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

Adaboost算法及其在实时视频流中应用摘 要:针对Adaboost算法在实时视频流中的应用,本文基于Adaboost算法的人脸检测原理,即通过提取图像中的haar特征,在训练过程中选出最优特征,转换成弱分类器,优化组合于人脸检测。最终,利用opencv的开发包,通过VC++软件编程实现基于Adaboost算法实时视频流中的人脸检测 关 键 词:人脸检测;haar特征;Adaboost算法;Opencv 引言 人脸检测的研究最早可以追溯到20世纪60-70年代。经过曲折发展,已经有了一些较为成功的方法,正日趋成熟。一个完整的人脸检测应该包括人脸检测、特征提取以及匹配识别三大基本过程 人脸检测的常用方法有基于知识的人脸检测、基于特征的人脸检测、基于模板匹配的人脸检测以及基于图像块的人脸检测 1 基于Adaboost算法的人脸检测 Adaboost算法根据人脸面部的灰度分布特征,选择使用haar特征,其是一种基于积分图像的特征,该特征计算简单,提取速度较快,从而使得Adaboost检测算法基本成为当前最快的检测算法之一。Adaboost算法首先提取图像中的haar特征,然后通过训练过程从中选出最优的haar特征,再将训练得到的haar特征转换成弱分类器,最后将得到的弱分类器进行优化组合用于人脸检测 1.1 基于Adaboost算法的人脸检测原理 (1) 提取haar特征 提取haar特征,即提取较好的haar特征对人脸图像灰度分布的特点进行描述 1)积分图像 积分图像是将原图像中任一点的左上方的全部像素相加作为当前点像素值所得到的图像;积分图像中每个点(x,y)的值为原图像中点(x,y)左上部分所有像素值的累加: (1-1) 其中i为原始图像,ii为积分图像 假设已经求得某一图像的积分图像(图2),利用公式可以迅速计算出原图像中D区域内的像素的和值 (1-2) 其中SD是原图像中D区域内的像素的和值,1、2、3、4分别是积分图像中点1、点2、点3和点4的值 2)haar特征 haar特征是根据区域灰度的对比特点设计。如图3所示,图中给出了4个常用的haar特征。每个特征分为2个部分,对比两个部分(黑块和白块)的像素和值的大小 (2)生成弱分类器[1][3] 每个haar特征对应一个弱分类器,每个弱分类器根据其所对应的haar特征参数来定义。弱分类器的定义公式如下: (1-3) 其中,特征参数pj表示不等式方向,j表示阈值 (3)训练过程[4][5] Adaboost算法的训练过程就是挑选最优弱分类器,并赋予其权重的过程。图4是Adaboost算法的训练示意图 1.2 级联分类器的使用 将弱分类器优化组合成强分类器,并将若干个强分类器级联在一起,其一级比一级复杂,一级比一级严格。Adaboost算法引入级联分类器,其检测示意图如图5所示。由于非人脸图像被前几级快速排除,因此加快了Adaboost算法的检测速度 2 实时视频流中人脸检测的实现 由于使用Adaboost算法进行人脸检测需要大量的样本训练,笔者能力有限,只能基于Intel公司开发的opencv[6]开发包进行编程。编程者无需编写算法函数,只需编写调用程序,以调用opencv函数进行Adaboost算法的视频人脸检测 2.1 关键代码 (1)获取视频文件并加载到一个windows窗口中 //确定是否目标来自文件或摄像头 if( !input_name || (isdigit(input_name[0]) input_name[1] == ‘\0’) ) capture = cvCaptureFromCAM( !input_name ? 0 : input_name[0] - ‘0’ ); else capture = cvCaptureFromAVI( input_name ); //建立一个新的window窗口,以result命名 cvNamedWindow( “result”, 1 ); if( !cvGrabFrame( capture )) //如果capture成功加载,则捕获一针,并存到图像中 break; frame = cvRetrieveFrame( capture ); if( !frame ) break; //如果针不存在,退出循环 (2)获取静态图像 //如果捕获没有成功,则 else {//假设图像是ftest.jpg

文档评论(0)

docman126 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档