基于OpenCV的人脸检测_第1页
基于OpenCV的人脸检测_第2页
基于OpenCV的人脸检测_第3页
基于OpenCV的人脸检测_第4页
基于OpenCV的人脸检测_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

山 东 工 商 学 院信息与电子工程学院数字图像处理题目:基于OpenCV的人脸检测 班 级: 电子131 姓 名: XXXXXX 学 号: XXXXXXXX 指导教师: XXXXXX 基于OpenCV的人脸检测XXX(山东工商学院信息与电子工程学院,山东 烟台 262000)【摘要】:通过对基于Adaboost人脸检测算法的研究,利用该算法与计算机视觉类库OpenCV进行人脸检测系统的设计,实现了对图像中的人脸检测。此外,在OpenCV环境下实现了对一个简单的人脸检测系统软件的界面开发,该系统对人脸检测的速度较快,检测结果较为准确,可以作为其他人脸检测或人脸模式识别的系统的开发基础。【关键词】:人脸检测;OpenCV;AdaboostFace Detection Based on OpenCVXXX(Shandong Technology and Business University,Institute of Information ELEC,Shandong Yantai 262000)【Abstract】:According to the research of Adaboost algorithm of Face Detection,people made use of the algorithms and computer vision class library OpenCV for the design of face detection system and achieved the target of pictures. Whats more in the environment of OpenCV,it achieved the development of simple Face Detection. The speed of Face Detection is very fast and the test results are accurate. It can be used as the development foundation of other face detection or face pattern recognition system.【Key words】:Face detection;OpenCV;Adaboost1、 引言 随着计算机与数字信号处理技术的高速发展,人脸检测技术在众多领域得到广泛应用。人脸检测技术是指在视频或图像中检测出现人脸位置、大小的过程。作为人脸信息处理中的一项关键技术,人脸检测技术已经超出了其它人脸识别模式的应用范畴,在视频处理,图像处理,身份验证,安全监测等方面有着重要的应用价值。随着计算机语言算法的发展,近年来出现了大量的人脸检测的算法,其中,能够较好的解决人脸的检测速度与检测效果的算法,是在2001年由PaulViola和Michael Jones首先提出的Adaboost 算法。本系统就是基于openCV,利用Adaboost算法设计的一个简单的人脸检测系统,该系统能够快速、准确的检测到图像或视频中的人脸。2、 过程1、 Adaboost人脸检测算法人体检测属模式识别范畴。模式识别方法多种多样,模式识别系统的最终目标是要在表示空间和解释空间之间找到一种映射关系。这种映射可以是一个分类,也可以是回归或者描述方案。在这里,我们用分类来叙述。分类方法总得来说可以分为两种:监督学习和非监督学习。后来又在前两者的基础上发展出了半监督学习方法,这种方法的本质仍属于监督学习。 对人脸检测的研究最初可以追溯到20世纪70年代,早期的研究方向与现在的研究方向与方法不同。目前在实际中应用的人脸检测方法较为普遍的是基于Adaboost算法的方法。 Viola的人脸检测方法是一种基于积分图、级联分类检测器和Adaboost算法的方法,方法框架可以分为以下3 大步骤:(1)使用Haar-like特征表示人脸,使用“积分图”实现特征数值的快速计算;(2)使用Adaboost算法挑选出一些最能代表人脸的矩形特征(弱分类器),按照加权投票的方式将弱分类器构造为一个强分类器;(3)将得到的若干强分类器串联组成一个级联结构的层叠分类器,训练得到的强级联结构能有效地提高分类器的检测速度。2、 Haar-like特征haar特征是基于灰度图,首先通过大量的具有比较明显的haar特征(矩形)的物体图像用模式识别的方法训练出分类器,分类器是个级联的,每级都以大概相同的识别率保留进入下一级的具有物体特征的候选物体,而每一级的子分类器则由许多haar特征构成(由积分图像计算得到,并保存下位置),有水平的、竖直的、倾斜的,并且每个特征带一个阈值和两个分支值,每级子分类器带一个总的阈值。识别物体的时候,同样计算积分图像为后面计算haar特征做准备,然后采用与训练的时候有物体的窗口同样大小的窗口遍历整幅图像,以后逐渐放大窗口,同样做遍历搜索物体;每当窗口移动到一个位置,即计算该窗口内的haar 特征,加权后与分类器中haar特征的阈值比较从而选择左或者右分支值,累加一个级的分支值与相应级的阈值比较,大于该阈值才可以通过进入下一轮筛选。当通过分类器所有分类级的时候说明这个物体以大概率被识别。 常用的Haar-like特征有线性特征,边缘特征,中心特征。图1 Harr-like特征 特征 值 是 指图 像 上 两个 或 者 多 个 形 状 大 小 相 同 的 矩 形内 部所 有 像 素灰 度 值 之和 的 差 值 ,例 如 在 边缘 特 征 中,特 征值的计算公式为:V=Sum白-Sum黑3、 积分图 由于训练样本通常有近万个,并且矩形特征的数量非常庞大,如果每次计算特征值都要统计矩形内所以像素之和,将会大大降低训练和检测的速度。因此引入了一种新的图像表示方法积分图像特征的特征值计算法,该方法只与此特征矩形的端点的积分图有关,所以不管此特征矩形的尺度变换如何,特征值的计算所消耗的时间都是常量。这样只要遍历图像一次,就可以求得所有子窗口的特征值。 积分图2定义为: 其中I(x,y)为图像在点(x,y)处的像素值。为了节约时间,减少重复计算,则图像I的积分图可按如下递推公式计算: 这样就可以进行任意矩形区域内像素积分运算。由图像的积分图可快速地计算图像中任意矩形内所有像素灰度积分。如图2所示,点1的积分图像的值为(其中Sum为求和):图2特征和计算 同理,点2、点3、点4的积分图像分别为: 矩形区域D内的所有像素灰度积分可由矩形端点的积分图像值得到:4、Adaboost算法基本原理 Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。使用Adaboost分类器可以排除一些不必要的训练数据特征,并将关键放在关键的训练数据上面。 Adaboost算法中不同的训练集是通过调整每个样本对应的权重来实现的。 开始时,每个样本对应的权重是相同的,即其中n为样本个数,在此样本分布下训练出一弱分类器。对于分类错误的样本,加大其对应的权重;而对于分类正确的样本,降低其权重,这样分类错的样本就被突出出来,从而得到一个新的样本分布。在新的样本分布下,再次对弱分类器进行训练,得到弱分类器。依次类推,经过T次循环,得到T个弱分类器,把这T个弱分类器按一定的权重叠加(boost)起来,得到最终想要的强分类器。 Adaboost的具体算法如下:设输入的n个训练样本为:(x1,y1),(x2,y2).(xn,yn),其中xi是输入训练样本,yi0,1分别表示正样本和负样本,其中正样本数为l,负样本数为m。n=l+m,具体步骤如下:初始化每个样本的权重;对每个t=1,.,T(T为弱分类器的个数)把权重归一化为一个概率分布:如此使得t为一个概率分布。对每个特征f,训练一个弱分类器hj,计算对应所有特征的弱分类器的加权错误率选取最佳的弱分类器ht(拥有最小错误率):t按照这个最佳弱分类器,调整权重:其中i=0表示被正确的分类,ei=1表示被错误的分类,当错误分类时:最后的强分类器为:其中5、级联分类器 级联分类器是由多个强分类器级联而成的,其中,每一层均有Abadoost算法训练得到的强分类器构成,第一层分类器得到疑似人脸的正确结果后,触发第二层进行分类,当第二层分类器得到疑似人脸的正确结果后,触发第三层进行分类,依次类推,最后确定疑似人脸的图像就确认为人脸。反之,当触发到某一层时,分类器得到的结果是非人脸时,就立即停止对图像的检测。级联分类器的结构类似于金字塔,如图3所示,通过级联分类器,可以很对人脸做出检测。由于本系统较为简单,所以只用到了4级强分类器构成级联分类器 。6、系统流程基于静态图像的人脸检测流程大致可分为4个过程(如图5所示):(1)加载已经训练好的分类器;(2)将其转化为计算机可以识别的内部格式;(3)加载该图片以进行检测 ;(4)显示检测结果到检测区。3、 结果1、2、 结果表明:基于OpenCV的简单的人脸检测系统,可以从静态图像中检测到人脸,并在检测区将人脸用不同颜色的椭圆标记,不过检测速度不是很快,而且也存在一定的误差,通过分析,发现产生误差的原因有多方面,其中与照片的分辨率,清晰程度都有很大的关系。4、 结论 本文简要阐述了在 Adaboost人脸检测算法的基础上,采用级联分类器的方法检测静态图像中人脸 ,在检测区对人脸进行标记,结果显示,采用计算机视觉类库OpenCV实现基于 Adaboost算法的人脸检 测,具 有 检 测速 度较快 ,检测 结 果正确率较高。通过这次课程设计学习了很多知识,例如OpenCV库函数的应用:cvEqualizeHist(small_img,small_img),该函数的作用是对灰度图像直方图的均衡化,cvCvtColor(img,gray,CV_BGR2GRAY),该函数是对图像进行色彩转换,cvRectangle(img,LeftPoint,RightPoint,color,2,7,0),该函数实现对检测到的人脸区域用方框标记出来。学习了Visual Studio 2013软件的使用,不仅拓宽了自身的知识面,接触了一些比较前沿的知识,而且通过查资料和搜集有关的文献,培养了自学能力和动手能力,另外,强化了自己的编程能力,我相信这次经历会对自身未来的发展会起到很大作用,但是由于时间有限,本文只用了简单的人脸识别进行人脸检测,所以实际应用的话有较大限制同时也存在较多的问题,不管结果如何,这都是一次宝贵的经历。最后,感谢马老师本学期的对我们的精心指导!5、 参考文献1陈志恒,姜明新.基于openCV的人脸检测系统的设计D.成都,电子科技大学,2012.2 黄文杰,陈斌.一种快速图像处理的积分方法J.计算机应用,2005,25(1):266-268.3 崔晓青.基于AdaBoost算法的人脸检测人系统的研究与实现D.长春:吉林大学计算机科学与技术学院,2008.4 郭磊,王秋光. Adaboost人脸检测算法研究及OpenCV实现J.哈尔滨理工大学学报,2009,14(5):123-126.5 陈胜勇,刘胜.基于OpenCV的计算机视觉技术实现M.北京:科学出版社,2008.6 唐徙文,曾义.人脸检测级联分类器快速训练算法J.计算机仿真,2007,24(12):324-327.7高建坡.视频序列中的人脸检测与跟踪算法研究.东南大学博士学位论文2007,36、 源代码#include #include #include #include using namespace std;const char *pcascadeName =D:ProgramFilesopencvsourcesdatahaarcascadeshaarcascade_frontalface_alt.xml;const char *pImageName = jzh.png;void DetectAndMark();int main(int argc, const char* argv)DetectAndMark();return 0;void DetectAndMark()/加载Haar特征检测分类器CvHaarClassifierCascade *pHaarClassCascade;pHaarClassCascade = (CvHaarClassifierCascade*)cvLoad(pcascadeName);/加载图像 IplImage *pSrcImage = cvLoadImage(pImageName, CV_LOAD_IMAGE_UNCHANGED);IplImage *pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);if (pSrcImage = NULL | pGrayImage = NULL)printf(不能加载图像!n);return;cvCvtColor(pSrcImage, pGrayImage, CV_BGR2GRAY);/人脸识别与标记if (pHaarClassCascade != NULL & pSrcImage != NULL & pGrayImage != NULL)const static CvScalar colors =CV_RGB(0, 0, 255),CV_RGB(0, 127, 255),CV_RGB(0, 255, 255),CV_RGB(0, 255, 0),CV_RGB(255, 127, 0),CV_RGB(255, 255, 0),CV_RGB(255, 0, 0),CV_RGB(255, 0, 255);CvMemStorage *pcvMemStorage = cvCreateMemStorage(0);cvClearMemStorage(pcvMemStorage);/检测人脸 int TimeStart,TimeEnd;TimeStart = GetTickCount();CvSeq *pcvSeqFaces = cvHaarDetectObjects(pGrayImage, pHaarClassCascade, p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论