首页 基于肤色相似度的人脸检测与定位毕业设计(论文)

基于肤色相似度的人脸检测与定位毕业设计(论文)

举报
开通vip

基于肤色相似度的人脸检测与定位毕业设计(论文)毕业设计(论文) 基于肤色相似度的人脸检测与定位 安徽工程科技学院毕业设计(论文) 基于肤色相似度的人脸检测与定位 摘 要 本课题致力于完成Visual C++ 6.0平台下的人脸检测与定位系统,人脸检测定位的算法限制于基于肤色相似度算法。要完成的工作包括相似度的计算,图像的二值化,垂直直方图和水平直方图的获取,人脸特征(眼睛、嘴和鼻子)的提取。本课题着重于肤色模型相似度在人脸检测与定位中的应用,对增加人脸检测与定位的准确率的研究有一定的指导意义。 提出一种基于肤色的人脸检测定位算法,设计了基于肤色...

基于肤色相似度的人脸检测与定位毕业设计(论文)
毕业设计(论文) 基于肤色相似度的人脸检测与定位 安徽 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 科技学院毕业设计(论文) 基于肤色相似度的人脸检测与定位 摘 要 本课题致力于完成Visual C++ 6.0平台下的人脸检测与定位系统,人脸检测定位的算法限制于基于肤色相似度算法。要完成的工作包括相似度的计算,图像的二值化,垂直直方图和水平直方图的获取,人脸特征(眼睛、嘴和鼻子)的提取。本课题着重于肤色模型相似度在人脸检测与定位中的应用,对增加人脸检测与定位的准确率的研究有一定的指导意义。 提出一种基于肤色的人脸检测定位算法,设计了基于肤色的人脸检测和定位系统。 采用了脸部皮肤之间相似度的方法以及二值化方法,使用了基于边界方法和基于区域方法相结合的算法, 提取了眼睛、嘴和鼻子等关键特征,最终较好地实现了人脸定位。 在Microsoft Windows平台上,利用Visual C+ + 6. 0 开发了软件。 本课题的成果具有一定的应用价值。实验结果表明,该软件对于一定尺寸范围内清晰的正面人脸图能够正确检测定位并提取特征,并且在速度和准确性方面具有良好的性能。 关键词:图像分割;人脸定位;肤色;人脸检测;特征提取 Detection and Localization of Person Face Based on Skin Color Similarity Abstract This topic devotes to completing the detection and localization system of the person face under the Visual C++ 6.0 platforms, and the detection localization algorithm of the person face limit to basing on the skin color similarity algorithm. The topic must complete similarity computation, binary image processing, vertical histogram, horizontal histogram and extracting person face characteristic (eye, mouth and nose). This topic emphasize application of skin color model similarity in the detection and the localization of person face, and has a significant instruction for research of increasing accuracy in detection and the localization of person face. In this paper, the authors have presented an algorithm and designed a system for face detection and location based on complexion. By strengthening the contrast between face features and by adopting binary image processing method, the system has improved the preprocessing effect; and by using boundary-based algorithm plus region-based algorithm , the system has realized face location through the extraction of the features of eyes, nose and mouth. Taking advantages of Visual C++ 6.0, the authors have also developed corresponding software based on Microsoft Windows. Production of this paper have definite application value.Experiment results prove that the system is valid in detecting, locating and extracting frontal view face features in a certain range.And it possess favorable performance in rapidity and accuracy. Key words: image segmentation; face localization; complexion; face detection; feature ex- traction 毕业论文(设计)原创性声明 本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。 作者签名: 日期: 毕业论文(设计)授权使用说明 本论文(设计)作者完全了解**学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅。学校可以公布论文(设计)的全部或部分内容。保密的论文(设计)在解密后适用本规定。   作者签名: 指导教师签名: 日期: 日期: 注 意 事 项 1.设计(论文)的内容包括: 1)封面(按教务处制定的标准封面格式制作) 2)原创性声明 3)中文摘要(300字左右)、关键词 4)外文摘要、关键词 5)目次页(附件不统一编入) 6)论文主体部分:引言(或绪论)、正文、结论 7)参考文献 8)致谢 9)附录(对论文支持必要时) 2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。 3.附件包括:任务书、开题 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 、外文译文、译文原文(复印件)。 4.文字、图表要求: 1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写 2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画 3)毕业论文须用A4单面打印,论文50页以上的双面打印 4)图表应绘制于无格子的页面上 5)软件工程类课题应有程序清单,并提供电子文档 5.装订顺序 1)设计(论文) 2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订 3)其它 目录 引言 1 第1章 人脸检测与定位概述 2 1.1 人脸检测的定义、应用及难点 2 1.2 人脸检测的研究背景及现状 2 1.3 本文研究的主要内容 3 第2章 基于肤色模型的人脸检测 4 2.1 人脸检测方法 4 2.2 基于肤色的人脸检测 4 2.2.1 色彩空间的选择 4 2.2.2 肤色模型 5 2.3 人脸肤色相似度的计算 6 第3章 相似度基础上的人脸特征定位 10 3.1 人脸检测与定位算法 10 3.1.1 人脸区域分割算法 10 3.1.2 人脸区域标记算法 12 3.1.3 人脸检测流程 12 3.2 人眼的检测算法及标定 13 3.2.1 有背景灰度人脸图像中的人眼检测与定位 14 3.2.2 眼睛的标定 15 3.3 鼻子的标定 17 3.4 嘴的标定 18 3.5 设计结果及分析 19 结论与展望 21 致谢 22 参考文献 23 附录A引用的外文文献及翻译 24 附录B 参考文献题录及摘要 27 附录C 主要源程序 29 插图清单 图 2-1训练流程图……………………………………………………………………………6 图 2-2 二值化流程图………………………………………………………………………...7 图 2-3 原图…………………………………………………………………………………...7 图 2-4 相似度图……………………………………………………………………………...8 图 2-5 二值化图……………………………………………………………………………...8 图 2-6 垂直直方图…………………………………………………………………………...8 图 2-7 水平直方图…………………………………………………………………………...9 图 3-1 人脸检测与定位的总体流程……………………………………………………….10 图 3-2 人脸区域分割系统………………………………………………………………….10 图 3-3 区域分割算法流程………………………………………………………………….11 图 3-4 标记人脸区域……………………………………………………………………….12 图 3-5人脸检测流程图……………………………………………………………………..13 图 3-6 LOG算子…………………………………………………………………………….15 图 3-7 边缘提取流程……………………………………………………………………….15 图 3-8 边缘提取图………………………………………………………………………….16 图 3-9 眼睛的定位………………………………………………………………………….16 图 3-10眼睛标记流程图……………………………………………………………………17 图 3-11眼睛标记……………………………………………………………………………17 图 3-12鼻子的标记流程图…………………………………………………………………18 图 3-13鼻子标记……………………………………………………………………………18 图 3-14嘴巴标记……………………………………………………………………………19 图 3-15系统主界面…………………………………………………………………………19 引言 人脸检测和定位是人脸识别中一个重要的组成部分,其检测问题却是一个极赋挑战性的课题。人脸是一个包含五官、毛发等的极不规则的复杂待测目标,不同的人脸在形状、大小、颜色、质地等方面都有很大的变化;所考虑的检测对象大多是由图像捕捉设备所采集的数字图。所以采集条件特别是光照条件包括光源的方向、明暗、色彩等都会对图的效果产生很大的影响,进而影响对人脸的检测;另外,人脸上还可能长有胡须、戴有眼镜等, 这些也同样是人脸检测不可忽视的因素。人脸检测具有一定的难度和复杂性,对这一问题的深入研究必将推动模式识别等计算机科学的发展。人脸的检测问题在近10年中得到了广泛的关注,国内外很多研究人士提出了很多方法,在不同领域取得了一定进展。但是对于一种能够普遍适用于各种复杂情况的,准确率很高的检测算法,还有很大的探索空间。本文利用Visual C+ + 6. 0 开发了人脸定位和特征提取的软件,该软件对于一定尺寸范围内清晰的正面人脸图能够正确检测定位并提取特征。 第1章 人脸检测与定位概述 1.1 人脸检测的定义、应用及难点 人脸检测(face detection)是指在输入图中确定所有人脸(如果存在)的位置与大小。人脸检测系统的输入是可能包含人脸的图,输出是关于图中是否存在人脸以及人脸的数目、位置、尺度、位姿等信息的参数化描述。 人脸检测问题最初来源于人脸识别(face recogznition)。人脸识别的研究可以追溯到20 世纪60—70 年代,经过几十年的曲折发展已日趋成熟。人脸检测是自动人脸识别系统中的一个关键环节,但是早期的人脸识别研究主要针对具有较强约束条件的人脸图(如无背景的图),往往假设人脸位置已知或很容易获得, 因此人脸检测问题并未受到重视。近几年随着电子商务等应用的发展,人脸识别成为最有潜力的生物身份验证手段, 这种应用背景要求自动人脸识别系统能够对一般环境下的图像具有一定的适应能力,由此所面临的一系列问题使得人脸检测开始作为一个独立的课题受到研究者的重视。人脸检测研究的就是如何从静态图或者视频序列中找出人脸,如果存在人脸,则输出人脸数目、每个人脸的位置及大小。人脸检测是人脸身份识别的前期工作,同时人脸检测作为完整的单独功能模块,在智能视频监控、视频检索和视频内容组织等方面都有直接的应用。 人脸检测的一个最重要的应用是人脸识别技术。人脸识别技术的研究是本世纪计算机视觉领域最具挑战性的研究课题之一,其应用领域十分广泛:可用于公安系统的罪犯身份识别、安全验证系统、信用卡验证、医学、档案管理、视频会议、人机交互系统、驾驶执照及护照等与实际持证人的核对、银行及海关的监控系统及自动门卫系统等。 今天,人脸检测的应用背景已经远远超出了人脸识别系统的范畴,在基于内容的检索、数字视频处理、视觉监测等方面有着重要的应用价值。人脸检测研究具有重要的学术价值,受到学者越来越多的关注。 人脸检测虽然有诱人的应用前景,但是在现实中却还没有开始大规模的使用。其主要原因之一就是用计算机自动进行人脸的检测和识别十分困难,目前的检测效果(正确率、速度)不如其他的生物识别技术,如指纹识别,视网膜识别等等。人们在日常生活中就进行了大量的人脸检测和识别工作,对人脸检测与特征的定位取得了一定的成绩,但人脸检测仍然存在着许多难点。人脸是一类具有相当复杂的细节变化的自然结构目标,此类目标的检测问题的挑战性在于: 1) 脸由于外貌、表情、肤色等不同,具有模式的可变性; 2) 一般意义上的人脸,可能存在眼镜、胡须等附属物; 3) 作为三维物体的人脸的影不可避免地受由光照产生的阴影的影响。 因此,如果能够找到解决这些问题的方法,成功构造出人脸检测,将为解决其它类似的复杂模式检测问题提供重要的启示。 1.2 人脸检测的研究背景及现状 人脸检测的研究历史比较悠久。高尔顿(Galton)早在1888年和1910年就分别在《Nature》杂志发表了两篇关于利用人脸进行身份识别的文章,对人类自身的人脸识别能力进行了分析。最早的研究论文见于1965年陈(Chan)和布莱索(Bledsoe)在Panoramic Research Inc.发表的技术报告,至今已有四十多年的历史。近年来,人脸检测研究得到了诸多研究人员的青睐,涌现出了诸多技术方法。尤其是1990年以来,人脸检测更得到了长足的发展。几乎所有知名的理工科大学和主要IT产业公司都有研究组在从事相关研究。人脸检测研究的发展主要分为以下几个阶段: 第一阶段(1964年~1990年) 这一阶段人脸检测通常只是作为一个一般性的模式识别问题来研究,所采用的主要技术 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 是基于人脸几何结构特征(Geometric feature based)的方法。人工神经网络也一度曾经被研究人员用于人脸识别问题中。这一阶段是人脸检测识别研究的初级阶段,非常重要的成果不是很多,也基本没有获得实际应用。 第二阶段(1991年~1997年) 这一阶段尽管时间相对短暂,但却是人脸识别研究的高潮期,可谓硕果累累:不但诞生了若干代表性的人脸识别算法,而且美国军方还组织了著名的FERET人脸识别算法测试,并出现了若干商业化运作的人脸识别系统,比如最为著名的Visionics(现为Identix)的FaceIt系统。这一阶段的人脸识别技术发展非常迅速,所提出的算法在较理想图采集条件、对象配合、中小规模正面人脸数据库上达到了非常好的性能,也因此出现了若干知名的人脸识别商业公司。 第三阶段(1998年~现在) FERET’96人脸检测识别算法评估表明:主流的人脸识别技术对光照、姿态等由于非理想采集条件或者对象不配合造成的变化鲁棒性比较差。因此,光照、姿态问题逐渐成为研究热点。与此同时,人脸识别的商业系统进一步发展。为此,美国军方在FERET测试的基础上分别于2000年和2002年组织了两次商业系统评测。目前非理想条件下(尤其是光照和姿态)、对象不配合、大规模人脸数据库上的人脸识别问题逐渐成为研究的热点问题。而非线性建模方法、统计学习理论、基于Boosting 的学习技术、基于3D模型的人脸建模与识别方法等逐渐成为备受重视的技术发展趋势。 目前国内的,国外的对人脸检测问题的研究很多,比较著名的有MIT,CMU等;清华大学、北京工业大学、中科院计算所和自动化所等都有人员从事人脸检测相关的研究。而且,MPEG7标准组织已经建立了人脸识别草案小组,人脸检测算法也是一项征集的内容。随着人脸检测研究的深入,国际上发表的有关论文数量也大幅度增长,如IEEE的FG(IEEE International Conference on Automatic Face and Gesture Recognition)、ICIP(International Conference on Image Processing)、CVPR(Conference on Computer Vision and Pattern Recognition)等重要国际会议上每年都有大量关于人脸检测的论文,占有关人脸研究论文的近1/3之多。 1.3 本文研究的主要内容 本课题致力于完成Visual C++ 6.0平台下的人脸检测与定位系统,人脸检测定位的算法限制于基于肤色相似度算法。要完成的工作包括相似度的计算,图像的二值化,垂直直方图和水平直方图的获取,人脸特征(眼睛、嘴和鼻子)的提取。本课题着重于肤色模型相似度在人脸检测与定位中的应用,对增加人脸检测与定位的准确率的研究有一定的指导意义。 第2章 基于肤色模型的人脸检测 2.1 人脸检测方法 人脸检测传统的方法多是在亮度空间进行,仅有灰度信息的变化,没有任何区域或比例的限制,所以必须做多尺度空间的全搜索,计算量非常大,而利用色度信息则可大大降低搜索区域,其中肤色信息是最为直接有效的。而且在人脸区域中,肤色一定是占主导地位的像素色彩值。肤色虽然因人而异,但很多研究表明肤色在色彩空间中的一定范围内还是呈聚类特性的,特别是在排除了光照亮度和在经过变换的色彩空间中。所以利用肤色这一线索可以排除掉在灰度图像中很像人脸而对应到彩色图像中根本不是肤色的区域,这在人脸检测中会起到积极的作用。 目前人脸检测方法主要可以分为以下4类: 1) 基于知识的方法:利用人脸的几何形状以及脸部器官的比例对称关系来定位人脸; 2) 基于特征的方法:直接利用人脸信息如肤色特征、轮廓特征、纹理特征等; 3) 基于模板的方法:使用模板在待测图像中逐点扫描计算匹配度,根据匹配度来判断有无人脸; 4) 基于外观的方法:如神经网络法、支持向量机法、特征脸法等。 上述的各种方法都存在自身的优缺点和适用领域,很多学者在各自所面临的问题范围内不断探索,也发明了许多卓有成效的检测算法。但各种检测算法都存在效率与性能上的矛盾,也即在正确率、鲁棒性能方面更好的算法往往会花费更多的时间及系统消耗。 在本文的设计中提出了一种基于肤色相似度的人脸检测与定位的方法,采用了脸部皮肤之间相似度的方法以及二值化方法,使用了基于边界方法和基于区域方法相结合的算法,提取了眼睛、嘴和鼻子等关键特征,最终较好地实现了人脸的检测与定位。下面就介绍这种方法。 2.2 基于肤色的人脸检测 2.2.1 色彩空间的选择 根据计算机色彩理论,对一种颜色而言,在计算机中有不同的表达式,这样就形成了各种不同的色彩空间,当然各种色彩空间只不过是颜色在计算机内的不同的表达形式而已,在具体的色彩空间中通过实践找到肤色区间,建立起可操作性的肤色模型,这样就让肤色信息成为了人脸检测的核心方法。不同肤色模型的建立基于不同的颜色空间,且为颜色空间的一个子空间。主要的彩色空间有以下几种:RGB格式(红、绿、蓝三基色模型)、HIS格式(色度、饱和度、亮度模型)和YCbCr(YUV)格式。 对于彩色空间来说,RGB是最常用的颜色表示系统,但是人脸肤色在这一系统中的分布非常广泛,因此不适合表示人脸区域,往往需要转换到其他的彩色空间。在该文的设计中采用了YCbCr(YUV)格式。这种色彩空间是以演播室质量标准为目标的CCIR601编码方案中采用的彩色表示模型,被广泛地应用在电视的色彩显示等领域中。其优点将在下一节介绍。通过下面的转换 公式 小学单位换算公式大全免费下载公式下载行测公式大全下载excel公式下载逻辑回归公式下载 ,可以将像素由RGB空间转换到YCbCr空间。 Y=0.299R+0.587G+0.114B Cb=-0.1687R-0.3313G+0.5B+128 (2-1) Cr=0.5R-0.4187G-0.0813B+128 我们将统计采集到的多幅图像人脸区域像素RGB值,按上式进行转换,统计在CbCr空间的分布概率,保留概率大于0.1的像素点,得到肤色分布区域。最终,我们得到的肤色范围是:Cb∈[90,125],Cr∈[135,165]。将肤色范围内的像素置1,其余置0,得到分割后的二值图像,实现人脸的初步定位。 2.2.2 肤色模型 肤色是人脸一个重要而明显的特征,利用肤色模型可以快速排除非肤色区域,大大减小搜索空间,提高人脸检测的效率。 1.光线补偿处理 考虑到肤色等色彩信息经常受到光源颜色、图像采集设备的色彩的偏差等因素的影响,而在整体上偏离本质色彩而向某一方向移动,即我们通常所说的色彩偏冷、偏暖,照片偏黄、偏蓝等等,这种现象在艺术照片中更为常见。 为了抵消这种整个图像中存在着的色彩偏差,我们将整个图像中所有像素的亮度(是经过了非线性Y--校正后的亮度)从高到低进行排列,取前5%的像素,如果这些像素的数目足够多(例如,大于100),我们就将它们的亮度作为“参考白”(Reference White),也即将它们的色彩的R、G、B分量值都调整为最大的255。整幅图像的其他像素点的色彩值也都按这一调整尺度进行变换。 2.非线性分段色彩变换 这是构成我们实际利用肤色模型的主要部分。这一非线性分段色彩变换得到的肤色模型属于色彩空间中的聚类模型,这一类肤色模型的建立首先要选取一种合适的色彩空间,我们注意到YCbCr色彩空间具有如下优点: 1) YCbCr色彩格式具有人类视觉感知过程相类似的构成原理; 2) CbCr色彩格式被广泛的应用在电视显示等领域中,也是许多视频压缩解码,如MPEG,JPEG等标准中普遍采用的颜色表示格式; 3) YCbCr色彩格式具有与HIS等其他一些颜色格式相类似的将色彩中的亮度分量分离出来的优点; 4) 相比HIS等其他一些色彩格式,YCbCr色彩格式的计算过程和空间坐标表示形式比较简单; 5) 实验结果表明在YCbCr色彩空间中肤色的聚类特性比较好。 在YCbCr色彩空间中,肤色聚类事两头尖的纺锤形状,也就是在Y值较大和较小的部分,肤色聚类区域也随之缩减。由此可见,在值较大和较小的部分,肤色聚类区域也随之缩减。由此可见,在Y值不同的地方,我们对Cb-Cr子平面进行投影,得到的结果是不同的,由此得到结论,简单地排除Y分类,按照传统地做法在三维的Cb-Cr子平面中寻求肤色的聚类区域是不可行的,我们必须考虑Y值不同造成的影响,从而对YCbCr色彩格式进行非线性分段色彩变换。 首先应用肤色模型进行人脸的初定位,接着提出了一种基于肤色区域分割方法得到包含人脸区域在内的一系列矩形区域,从而进行了定位。 2.3 人脸肤色相似度的计算 该文设计的是基于人脸肤色模型, 利用相似度方法, 对人脸区域进行了检测和定位。我们定义r=R/(R+G+B),b=B/(R+G+B),这样把三维的RGB降为二维。而在这个二维平面上,肤色区域服从高斯分布。我们可以采用训练的方法来计算得到一个分布中心,此过程主要生成可用于识别的参数。通常,在已有的样本训练集基础上确定某个判定规则,使得按此规则对被识别对象进行分类所造成的错误识别率最小或者结果期望最大。开始训练命令,打开bmp格式的图像后计算每幅图像的像素数CrList和CbList,然后查询总的图像数count用于将当前数据库内的所有用户图片进行训练,最后对每幅图像求训练平均,得到可供识别比对的训练基。训练的过程如图所示: N Y N Y 图 2-1 训练流程图 这样训练以后,得到了Cb和Cr的均值为117.4361和156.5599,落在肤色范围内,验证了理论的正确性。同样也得到了肤色信息的均值M和方差C,为下一步计算相似度做了准备。 然后根据所考察的像素离中心远近得到肤色的相似度,得到与原图相似的分布图,均值M和方差C如下:M=E(x),C=E((x-M)(x-M)T),其中x=[r,b]T 相似度计算公式为:P(r,b)=exp[-0.5(x-m)TC-1(x-m)] (2-2) 关于相似度软件的实现纯粹是公式的实现,在这就不做说明了。 再按照一定的规则对该图二值化,通过设置合适的阈值(关于最佳阈值的设置将在下一章中介绍),可将图像变成只有0和1的二值图像,这样做的目的是为了减小计算量,加快处理速度,同时,还可将目标从背景中分离出来,有效的突出了目标。 二值化流程如下: 图 2-2 二值化流程图 按这种方法就可以对输入的bmp图像2-3进行处理, 图 2-3 原图 其相似度计算结果如图2-4示: 图 2-4 相似度图 可以给出二值化图2-5示: 图 2-5 二值化图 以及垂直直方图2-6示: 图 2-6 垂直直方图 水平直方图2-7示: 图 2-7 水平直方图 至此完成了相似度的计算和图像的二值化,以及两种直方图的提取,那么下一章节将在此基础之上进行人脸区域的标记和人脸特征(眼睛、鼻子、嘴巴)的提取。 第3章 相似度基础上的人脸特征定位 在上一章得到的人脸区域基础上,对原图像进行灰度计算,将可能的眼睛区域分割成小图像块标定人眼中心,从而在眼睛确定的情况下把鼻子和嘴巴提取出来。 总体流程如下: 图 3-1人脸检测与定位的总体流程 下面将介绍人脸标记和眼睛、鼻子、嘴巴定位的算法及其流程。 3.1 人脸检测与定位算法 3.1.1 人脸区域分割算法 人脸区域分割的系统结构如图3-2 所示: 图 3-2人脸区域分割系统 在图3-2 中, 输出的一系列矩形将取代原来的整幅图像作为人脸检测算法的输入。这些矩形应该满足以下条件: 1) 矩形系列中应该尽可能地包含待检测图像中的全部人脸对于距离较近或者是有接触的多个人脸,分割后得到的肤色区域自然距离较近或者是连在一起,这时可以用一个矩形区域覆盖它们。不漏检、不降低正确率是肤色分割处理的前提,也是人脸区域分割算法的首要前提。据前面对肤色模型的分析,无论什么样的肤色模型都存在判断失误,所以算法输出的一系列矩形应该尽量包含所有的人脸区域。 2) 矩形系列应该少包含非肤色区域相对整幅图像,经过肤色分割预处理后的这一系列矩形的大小要明显小于原来的整幅图像,这是肤色分割预处理能够提高人脸检测算法时间效率的主要原因,也是肤色分割预处理能够降低误报率的关键。对于可能的人脸区域来说,其相对于水平方向的旋转角度在45°到135°之间,因此旋转角度小于45°或大于135°的区域为非人脸区域。图像分割的目的是把人脸的器官与脸的其他部分分离开来,并保证每个器官的完整性。在包含人脸的图像中,脸部比较明显而易辨别的特征主要是面部器官:眼睛、嘴、鼻子和眉毛。鼻子往往与脸的反差不大,因此通常用鼻孔代替。这几个面部特征在灰度图像中一般比周围区域暗。尤其是眼睛和嘴在绝大部分情况下都清晰可见。因此图像分割可以利用的特征是:灰度比周围区域暗的区域。在设计中,为了减少图像分割这一步的运算量,对图像做了二值化处理。分割的对象是黑白图像,分割简化为找出所有黑色的连通区域,它们都成为人脸器官的候选者。从一幅图中,按一定规则划分出感兴趣的部分或区域称为分割。对于利用人脸各器官之间几何关系的人脸定位方法来说,分割算法是十分重要的。在这里,感兴趣的部分是人脸的器官(眼睛、嘴、眉毛、鼻子等等)。成功的分割算法能够有效地把人脸器官和脸的其他部分分离开来,并且保持器官的完整性。 设计采用了基于边界的方法和基于区域的方法相结合的算法。基于边界方法是提取边缘,利用边缘进行分割,该方法处理的像素数量比较少,各像素点间的相邻关系比较简单,处理速度比较快,但是,基于边界的方法是从局部特性来求图像整体的分割,因此在全局宏观性质上不如基于区域的方法。基于区域的方法则是寻找互相连接在一起、并有相同特征的像素所形成的区域,它是实现图像分割的一种重要方法。在本系统中, 基于边界的方法主要用于前期矩形序列的产生,快速地得到包含人脸区域的外接矩形; 然后用基于区域的方法,, 全局考虑,对初始矩形序列进行区域归并, 得到最终的输出矩形。算法的整体流程图如图3-4所示: 图 3-3 区域分割算法流程 3.1.2 人脸区域标记算法 在标记人脸之前,首先要对相似度图像进行二值化操作,这一部分已经在前面一章中介绍了。接下来就要对人脸区域进行检测,标记人脸的过程实际上是对得到的二值化图像进行人脸边界估计的过程。估计人边界脸算法利用了人脸的结构特征: 1) 人脸左右边界肤色点个数约为人脸垂直方向最多肤色点个数的0.2 ~ 0.3倍; 2) 人脸上边界肤色点个数应该约为人脸区域宽度的0.5倍; 3) 人脸区域高度约为人脸区域宽度的1.5倍。 首先估计人脸的左右边界,具体算法如下: 1) 搜索垂直方向具有最多灰度值为0 的点(白点,即可能的人脸) 的x 坐标pos,并将白点数目计为count; 2) 从pos 开始往左边搜索得到垂直方向第一次具有小于0.2 count个白点的x 坐标作为人脸区域的左边界left ; 3) pos开始往右边搜索,得到垂直方向第一次具有小于0.3 count个白点的x 坐标作为人脸区域的右边界 right 。 接着估计人脸的上下边界,具体算法如下: 1) 从上往下搜索水平方向的白点数,得到第一次具有大于0.5 ( right -left)个白点的y 坐标作为人脸区域的上边界top; 2) 根据人脸结构特征,将top + 1.5 ( right -left) 作为人脸区域的下边界bottom 。从而,可以确定人脸区域为rect(left, top, right, bottom ) 。 标定的人脸区域如图3-5所示。从图可以看出,经过相似度计算和二值化操作,然后对人脸进行边界估计,最后进行标定,基本上做到了。 图 3-4标记人脸区域 3.1.3 人脸检测流程 整个基于肤色模型的人脸检测的流程如下: 肤色检测 滤波和填充 检查每个皮肤区域 找到该区域的外接矩形 小于固定值 小于固定值 大于固定值 在原始图像相同位置得到矩形, 进行放缩、直方图均衡化等处理 图 3-5人脸检测流程图 3.2 人眼的检测算法及标定 因为人脸的五官位于脸部顶点与下巴点之间,将搜索范围设为一矩形区域,矩形的长为脸部顶点与下巴点的距离,矩形的宽即是脸宽。标记人脸区域以后, 就可以进行边缘提取,接着标记眼睛,由人脸各特征的位置关系,就可以从上到下区分出眼睛、鼻子、嘴等特征。 假设人脸的姿势比较正,那么人脸上的特征是水平边缘集中的区域。我们可以在低分辨率下提取水平边缘,然后找到人脸区域内富含这些边缘的连通区,作为人脸特征的候选区域。 这些区域的位置和大小并不准确,因为边缘检测本身容易出现位置偏移,连通区的大小也随着阈值而变化。所以还要进一步修正上面的结果。对正面的人脸来说,眼睛、鼻子等特征和整个人脸的尺寸大小之间存在先验的约束关系,这就是人脸结构的恒常性,因此我们利用这些约束关系来确定特征区域的大小。(因为先找眼睛,我们就以眼睛的大小为准,最后在调整嘴巴的大小)。 人脸是一种特殊的模式,而人的双眼与眉毛、鼻、口按一定的结构分布在灰度基本均匀的人脸平面上,人脸这种特殊模式与图像背景模式大相径庭,从而为判别人的双眼位置提供了依据。寻找最佳分割阈值使人眼从复杂图像背景和人脸中分离出来是人眼定位的第一步。所谓最佳分割阈值指的是能将眼睛虹膜、瞳孔、上眼框与眉毛以及其它人脸部位、背景物明显分离的灰度分割阈值。由于眼睛虹膜、瞳孔部位的灰度值明显比其邻近区域(眼部周围皮肤、眼白)灰度值要低,因此能够从适当光照条件下拍照的图像中分割眼睛虹膜、瞳孔部位的灰度值总是存在的,并且不是唯一的,而是有一定的小范围。然而寻找这样的最佳分割阈值并不是一件容易的事,眼睛虹膜、瞳孔部位及其邻近区域的灰度值会因人而异,并随光照条件、带眼镜时镜片的反光而变化,加上复杂背景的变化,使得最佳分割阈值的估计十分困难,但通过图像灰度直方图分析和统计的方法,对最佳分割阈值可能所在的灰度区间进行粗估计还是可以做到的。经对多幅在复杂背景及不同光照条件下人脸图像的直方图分析与统计发现,只要脸部光照适中,双眼部位较清晰,绝大多数情况下最佳分割阈值位于归一化灰度值0.1 与0.6 之间。若选择固定的背景和光照条件,由统计的方法可估计出更小的最佳分割阈值可能所在的区间。另外,利用直方图均衡方法也可使输入图像的最佳分割阈值可能所在的区间缩小。 3.2.1 有背景灰度人脸图像中的人眼检测与定位 首先用某一分割阈值Threshold将包含人脸的灰度图像二值化,去除二值化图像中小的黑斑点,再对二值化图像中黑色块进行标记、计算每块面积(像素数)、确定每块的外接矩形位置及宽高。人眼位置的判定是根据眼睛在二值化人脸图像中的几何位置确定的,主要有以下几条准则: 1) 双眼中心距应在某个范围内:考虑到人脸在图像中大小的变化,双眼中心距变化大约在一定像素距离范围内; 2) 双眼下方一定距离内不能有其它黑块:双眼下方一定距离内没有其它器官,因此在二值化图像中不能有其它黑块,这一特点也是区分眉毛与眼睛的重要判据; 3) 双眼中心位置上下相差不超过一定距离:由于人脸在图像中可能向两侧倾斜,双眼中心位置常常不在水平线上。作为判据,允许人脸在一定程度上向两侧倾斜,双眼中心位置在垂直方向相差不超过一定距离(如15个像素距离); 4) 眼睛黑块所包含的像素数应在某个范围内:二值化图像中眼块所包含的像素数应在某个范围内(如5~50个像素),太大的黑块不太可能是眼块; 5) 眼睛黑块的外接矩形应是一宽大于高的矩形或接近于正方形:由于眼睛的结构特点,二值化图像中眼块的外接矩形常常是一宽大于高的矩形或接近于正方形,眼块的几何中心位于圆形的眼睛虹膜(含瞳孔)位置,高远大于宽的外接矩形对应的黑块不可能是眼块; 6) 与图像四边接壤或非常接近的黑块不是眼块:由于拍摄人脸图像时,要求人脸在照片中应完整,且较靠近图像中心,因此在二值化图像中与图像四边接壤或非常接近的黑块不是眼块。为了能从粗估计的分割阈值区间中找到最佳分割阈值,我们提出了结合找人眼位置过程的自动调整法。选择一适当的阈值,从初始阈值T0=0.1 递增(在T0到Tmax=0.6 区间搜索),以每一新的阈值Threshold 二值化人脸灰度图像,并按上述人眼位置判定准则检测人眼黑块是否出现。随着阈值的不断增加,可以看到二值化人脸图像中新黑块在不断地出现,已有的黑块面积在扩展并不断地与别的黑块相重合。一旦在某个阈值下检测到双眼黑块出现,此时的阈值即为最优分割阈值,检测到的人眼黑块的几何中心也应接近于虹膜(瞳孔)中心(这是因为分割阈值越大,眼块可能由无到有,由小到大,此时最先出现的应是具有较低灰度值的瞳孔和虹膜所对应的黑块)。 3.2.2 眼睛的标定 由于眼睛和肤色的差异较大,在上一章人脸区域二值化的基础上,再进行边缘检测。所谓的边缘就是图像的最基本特征,是指图像周围象素灰度有阶跃变化和屋顶变化的像素的集合;是由灰度的不连续性反映的。边缘广泛存在于物体与背景之间、物体与物体之间、图像基元与基元之间。它是图像分割所依赖的重要特征。经典的边缘提取方法是考虑图像的每个像素在某个领域灰度的变化,利用边缘临近的一阶或二阶方向导数变化规律,进行局部梯度运算。求梯度根据滤波算子的不同可以分为好多种。通过对处理后的图像进行研究对比发现:拉普拉斯高斯算子既具备了高斯算子的优点又具备了拉普拉斯算子的优点在边缘检测中不但对灰度渐变和噪声较多的图像处理最好,而且是各向同性的,得到的处理后的图像具有连贯性和高清晰度。常用的5X5LOG算子如下图: -2 -4 -4 -4 -2 -4 0 8 0 -4 -4 8 24 8 -4 -4 0 8 0 -4 -2 -4 -4 -4 -2 图 3-6 LOG算子 LOG 算子首先用高斯函数对图像进行低通滤波消除空间尺度远小于高斯空间常数的图像强度变化即去除噪声,然后用拉普拉斯算子进行高通滤波提取线特征在一个灰度均匀区域的边缘处LOG算子有以下表现:边缘以外灰度均匀处取零,边缘较暗一侧取正,边缘较亮一侧取负,边缘中某些点处取零。用LOG算子提取边缘流程为: N Y 图 3-7 边缘提取流程 这样就可以将人脸的整个边界的轮廓大致地提取出来了。其边缘提取结果如下: 图 3-8 边缘提取图 然后对边缘检测的结果进行水平方向的投影,基本能确定眼睛的两个范围I和II。这里虽然有眉毛的影响,但是由于眉毛正好位于眼睛的上方,因此不影响水平区域的确定,如图示: 图 3-9 眼睛的定位 然后在I和II的上方区域的竖直方向投影,得到的第一个峰值附近的区域A、B。然后在A与I以及B与II确定的两个矩形区域内,对黑点进行区域膨胀,可以得到的眼睛的大致轮廓和左右眼角,然后黑点的坐标的平均值作为瞳孔的位置。 具体算法是:在确定的人脸区域,把人脸部分划分为左右、上下四等份,再把人脸宽度12等份,每一份为nSlidWinWidth和人脸高度30等份,每一份为nSlidWinHeight。由经验可知:人眼只可能位于人脸上半部分的下9/15区域内,在这个区域内找白色像素的个数当它大于nSlidWinWidth*nSlidWinHeight/3时,可把参考位图的像素变为红色。这样就把眼睛区域划分为很多的小区域,在把这些区域中宽度小于人脸宽度的1/20删除掉,然后在合并相邻的闭合区域(小于人脸宽度的1/40),这样就可确定人眼的水平区域。以同样的方法:去除掉小于人脸高度的1/100的区域,然后在合并区域(小于人脸高度的1/100),这样就可以确定人眼的垂直区域。在确定的人眼范围内,标定出左右眼角和眼睛的位置。 眼睛标定的流程为: 图 3-10眼睛标记流程图 标记效果如图: 图 3-11眼睛标记 3.3 鼻子的标定 在确定了眼睛的位置以后,鼻子的位置也就相应地定位下来了。以两眼的瞳距为1来计算,鼻子到两眼中心的距离为0.7到1,在附近寻找颜色较深的区域,基本得到鼻孔的位置。然后在鼻孔上方一定范围内(鼻孔距离的1/2左右)找到亮度最高的点作为鼻尖。 其算法流程为: 图 3-12 鼻子标记流程图 标记的结果如图示: 图3-13 鼻子标记 3.4 嘴的标定 嘴的确认考虑到唇色和位置两重信息。对于唇色,满足如下限制条件的位于脸的下部区域可能是嘴: (3-1) 嘴到两眼中心的距离可能为1.0到1.3左右,在满足条件的区域采用类似找眼睛的方法,区域膨胀,确定左右嘴角和嘴的中心。 其结果如图3-14示: 图3-14 嘴巴标记 3.5 设计结果及分析 设计程序的主界面如下: 图 3-15 系统主界面 单击打开图像打开一幅人脸图像,然后用上述界面进行相似度计算,图像二值化、垂直直方图、水平直方图、标记人脸区域,接着可以依次标记眼睛的位置和鼻子的位置的特征标注。 在Microsoft Windows 平台上,利用Visual C+ + 6. 0实现了以上算法。使用此算法对多幅人脸图像进行了处理,所采用的图像都是在正常光照以及室内条件下所摄取的正面人脸图片(其相对于水平方向的旋转角度在45°到135°之间) , 并具有各种背景,上面的算法能成功地检测定位多张人脸图, 本设计结果的正确检测率达到90%以上。然而由于人脸拍摄的环境不同, 也给系统带来了一些问题。该软件与人脸的外界光照条件、人脸的拍摄角度以及是否带眼镜有关, 易受人脸模式的多样性(如胡须、眼镜等)、图像获取过程中的不确定性(如光照的强度、光源方向等) 等因素的影响。 基于肤色的人脸检测和定位算法分析: 1) 统计出一般的人脸区域中肤色像素所应占的百分比, 然后具有较高的检测成功率;利用这一百分比作为阈值对检测算法得到的候选脸区域进行验证,从而排除了肤色像素数不满足这一阈值的候选脸; 2) 采用了增强人脸特征与脸部皮肤之间对比度的方法, 以及改进的对人脸图像进行二值化处理, 减少了运算量。 结论与展望 通过基于肤色的人脸检测、定位等操作,可以较好地定位人脸的识别区域。 文中给出了人脸分割、检测算法、关键器官定位等主要算法。经过改进二值化处理,对于全局阈值占有很大比重的情形,可以较好地解决图像的二值化,为进一步的人脸识别奠定了基础。 本设计耗时数月,最后完成了所要求的功能。总结下来,主要优点如下: 1) 界面人性化,容易操作; 2) 对用户的添加、录入、删除十分方便; 3) 在光照适当、人脸位姿恰当时,识别率可以达到100%; 4) 模块化编程,可扩充性好,以后可以添加进一步的功能。 当然,系统也有它的缺点,主要是下面的两点: 1) 训练时间过长,不能动态的添加用户; 2) 鲁棒性较差,环境光照的改变会影响识别率。 基于这些优缺点,今后如果要进行改进,首先解决的问题必然是鲁棒性的问题。如何将光照对识别的影响减小到最少,是一个很有难度的问题。目前的去光照处理的效果并不令人满意,白平衡处理则只能对总体进行小幅度的修正,不能解决光照造成的左右不平衡的问题。当然也可以从其它角度解决这个问题,例如将摄像头和灯光结合,使得每次识别的主光源都位于正前方。 其次是增加对侧面脸进行识别的功能。我们知道人类对人脸的辨认能力远远超过正面,而是可以从正面到侧面的各种角度进行辨别。如何使得计算机也能对侧面脸进行检测识别也是目前研究的一个热点。可行的方法之一是使用三维的人脸模型,当模型足够细腻的时候,就可以模拟出人脸各个角度的图像。 致谢 大学四年的光阴如白驹过隙,转瞬即逝。想想自己即将踏出宁静而优美的校园,也许这一生的学生生活就这样结束了。不禁生起一丝悲凉之意。在这四年中我基本完成当时还是在遥远的大一时定下的目标,可以这么说我能有今天的一切,跟母校-老师们是分离不开的!在这里我深深说一句:亲爱的老师们谢谢你! 尤其是在最后的半学期里,得到了老师的热情指导,对本文的算法、编撰和定稿不吝赐教,使我看到了一个搞科学研究的学者应有的作风,为以后的我真正的走上工作岗位—搞研发时应怎样处理类似的工作奠定了基础。 在这还要感谢那些曾做过和我一样课题的前辈们,正是看了关于你们人脸检测与定位的专著和论文后才启发了我怎样进行人脸检测、怎么样的算法才是最合理的。可以说在拿到这个课题时,我可是一脸的朦胧,正是你们的著作在我做毕业设计的过程中敲打着我,时刻启迪我。谢谢你们! 致谢人: 2007年6月17日 参考文献 [1] 王天学,刑桂芬,江波.基于区域分割的复杂背景中的人脸检测与定位[J] .计算机工程与设计,2004, 11(25):1-3 [2] 王学武, 石跃祥.基于眼睛特征的人脸检测方法[J] .计算机应用研究,2006年,1(1):1-3 [3] 王春红,杨伯原,张洛平,张波.B超图像边缘检测算法分析及C++实现[J] .河南科技大学学报(自然科学版),2006, 2(27):1-3 [4] 王郑耀.数字图像的边缘检测,西安交通大学本科毕业论文[D],2003年6月 [5] 朱文佳,戚飞虎.快速人脸检测与特征定位[J] .中国图像图形学报, 2005, 11(10):1-4 [6] 吴为.人脸识别的软件系统开发,复旦大学工学学士学位论文[D],2005年6月 [7] 张宏林.Visual C++数字图像模式识别技术及工程实践[C] .北京:人民邮电出版社,2003 [8] 张永梅, 韩焱, 商细云.一种人脸的检测与定位方法[J] .中北大学学报(自然科学版),2006, 3(27):1-5 [9] 张敏,陶亮.人脸图像中人眼的检测与定位[J].光电工程,2006, 8(33):1-6 [10] 郭瑞,张淑玲,汪小芬.人脸识别特征提取方法和相似度匹配方法研究[J] .计算机工程, 2006, 11(32):1-2 [11] 黄翠荣,严佩敏,时鹿鸣. 基于方差相似度计算的人脸识别技术[J] .上海大学学报(自然科学版),2003,12(4):1-4 [12] 梁路宏,艾海舟,徐光佑,张钹.人脸检测研究综述[J] .电子学报,2001,29(6):744-747 [13] 谢建新.数字视频采集与目标跟踪,华侨大学本科毕业论文[D],2004年6月 [14] 蔡照.利用delphi6实现拉普拉斯高斯边缘检测算法[J] .图形图像处理与游戏编程, 2006, 7(11):1-2 [15] 裘伟.一种基于相似度及复杂度人眼定位算法[J] .苏州大学学报(工科版),2006, 6(26):1-4 [16] S.Phimoltares, C.Lursinsap, K.Chamnongthai Face detection and facial feature localization without considering the appearance of image context[J]. Image and Vision Computing 25(2007) 741–753 附录A 引用的外文文献及翻译 Face detection and facial feature localization without considering the appearance of image context 2. Our methodology In this Section, we introduce our method to process the frontal-view face images for the extraction of head boundary, face boundary, and facial features including eyes with eyebrows, nostrils ,and mouth .Head boundary is the outer profile of head including , shoulders Face boundary is the face contour that excludes hair, shoulders, and neck. We use rectangular boxes to locate facial features. 2.1. Smoothing and thresholding The scheme diagram of the double-threshold method is shown in Fig. 1. The first step is to reduce noise by using a 3 • 3 median filter. After that, an edge operator is applied. We tested the edge detection technique by Wechsler and Kidode [13] and the result is shown in Fig. 2. The edge output appears too thin and the top-face boundary is too weak to be detected in the later shareholding procedure. In order to obtain fat boundary, JianmingHu et al. [14] proposed four masks (horizontal (size 3 • 7), vertical (7 • 3), 45_ (9 • 3), and 135_ (9 • 3)) to detect image edges and select the maximum as the edge strength. Instead of using large sizes, we develop smaller sizes of masks as shown in Fig. 3 for edge detection.Experimental results show that our method is as good as their method. Thresholding is performed to transform the gray-level edge images into binary. The high threshold value is determined by choosing all the high intensity pixels that occupy 5% of the entire pixels. The low threshold value is decided by choosing all the high intensity pixels that occupy 25% of the entire pixels. The high thresholded image is used to obtain the head boundary and the low thresholded image is used to produce the face boundary. These thresholding percentages are determined based on our empirical data in order to achieve the best results. 2.2. Tracing head and face boundaries In order to trace the head boundary, we divide the high-threshold image into left and right halves. When we scan the edge image from top to bottom, the first layer of the contour occurred is the head boundary and the second layer of the contour occurred is the face boundary. For tracing the head boundary, a starting point is located as the first white pixel on the first layer of the left half. From the starting point, we trace the left and right profiles of head. Because the outer boarder of the first layer is shifted outwards from the actual boundary for a few pixels (say, p), we adjust the edge of the left half to the right and the edge of the right half to the left by p pixels respectively. Because some face profiles disappear in the high thresholded image, the low thresholded image is used to trace face boundary. The head borders are removed and a morphological opening is used to eliminate unnecessary noises.After that, the image is scanned from four directions (right to left, left to right ,top to bottom, and bottom to top) to produce the face boundary. 2.3. Locate facial features In order to identify facial features, we first extract their candidates. The candidates are extracted by overlaying the face boundary obtained from the previous section on the binary edge image, and converting all the white pixels in the binary edge image that are on or outside the face boundary to black. After that, we apply x- and y-projections to locate facial features. In the candidate image, we use x-projection to obtain the facial features’horizontal locations and y-projection to obtain their vertical locations. By combining the horizontal and vertical locations, we can obtain four rectangular boxes: two for eyes, one for nostrils, and one for mouth. 译文 不用考虑面部内容的人脸检测与定位 2 我们的方法 在这个部分, 我们介绍我们的方法处理前面对人脸图像的看法,从而来提取头顶区域、面孔区域, 并且面部特征包括眼睛以及眼眉、鼻孔, 和嘴.头顶区域是头外面外形,包括肩膀。面孔区域是排除头发、肩膀和脖子的面孔等高。我们使用直方图定位面部特征。 2.1平滑和阈值 使用双重阈值法如图所示。第一步将使用3x3的 中值滤波器来减少噪声,在这以后进行边缘操作。我们使用Wechsler和Kidode的方法来测试边缘检测技术的可靠性,结果在图2中显示。边缘检测结果看上去太稀薄而且人脸顶部区域太微弱以至于不能够被阈值程序所检测。为了获得圆润的界限, JianmingHu 等[ 14 ] 提出了四个面具(水平(大小3 . 7),垂直(7 . 3), 45 _ (9 . 3), 和135 _ (9 . 3)) 用来检测图像边缘和选择最大值作为边缘分量。而不是使用大些的作为边缘分量。我们设计出一些面具模板用来边缘检测,实验结果表明我们的方法像他们的一样好。阈值法是把灰度级边缘图像转化为二值图像,高阈值点是由占整个图像的前5%灰度级高的灰度决定的,而低阈值点是由占整个图像的前25%灰度级高的灰度决定的。高阈值是用来获取头顶区,而低阈值是用来获得面部区域的。这些阈值百分比的选定是由经验性数据决定的,为了获取最好的实验结果。 2.2 检测头型和面部区域 为了确定头部边界区域,我们把高阈值图分割成左右两半部分。当我们从顶部到低部扫描图边缘时,第一层周线产生的是头部边界和第二层周线产生的是面部边界区域。为了追踪头部边界,起始点设置在第一层左半部的第一个白象素的位置。从这个起始点开始,我们来追踪左右部分顶部轮廓。因为第一层的外部边界从实际的边界向外移动数个象素数(称为P),我们分别各自调整左半部到右半部和右半部到左半部个P象素点。因为一些面部轮廓在高阈值图中很模糊,所以我们用低阈值来检测面部区域。头部区域被隔离,我们用形态学的方法来消除不必要的噪声。这样做以后,图像被从四个方向(从左到右,从右向左,从顶到底,从底向顶)进行检测来确定脸部特征。 2.3定位脸部特征 为了识别脸部特征,我们首先提取他们的候选区域。候选区域通过覆盖脸部边界获得原图的二进制图边缘部分和把在或不在二进制图内的白象素转化成黑象素。这样之后我们应用x和y坐标来定位脸部特征,在图的候选区域中用x坐标来获得脸部特征的水平定位和用y坐标来获得脸部特征的垂直定位。通过合并水平和垂直方向上的定位,我们可以得到四个直方图:两眼的、鼻孔的和嘴巴的。 附录B 参考文献题录及摘要 [1]黄翠荣,严佩敏,时鹿鸣. 基于方差相似度计算的人脸识别技术[J] .上海大学学报(自然科学版), 2003.12(4):1-4 摘要:针对人脸识别过程中所需的图像匹配,采用计算特征矢量方差的方法,经过一定的对应关系变化,得到了相似度计算的权值。这些权值具有很好的稳定性和准确性,有利于识别率的提高。实验采用自制人脸库进行识别测试,取得了较满意的结果,验证了此方法的有效性。 [2]王天学,刑桂芬,江波.基于区域分割的复杂背景中的人脸检测与定位[J].计算机工程与设计, 2004, 11(25):1-3 摘要:基于区域分割和特征验证,提出了一种复杂背景下的人脸检测与定位的方法。在粗略定位人脸的基础上,提出了一种新颖简单的区域分割方法,有效地定位出了人脸的候选区域,通过检测眼睛和嘴唇完成对人脸的确认。实验表明该方法检测速度快、准确率高、鲁棒性好。 [3]朱文佳,戚飞虎.快速人脸检测与特征定位[J].中国图像图形学报, 2005, 11(10):1-4 摘要: 人脸检测与特征定位是人脸分析技术的一个重要组成部分,其目标是在图像中搜索人脸特征(如眼、鼻、嘴、耳等)的位置。虽然人们可以毫不费力地完成这些工作,但对于机器来说,这依然是一件极其困难的任务。近几年来该项技术已有了长足的发展,已成功地应用于诸如人脸识别、姿态识别、表情识别、脸部动画等诸多领域。本文利用David Cristinace和Tim Cootes提出的一个多阶段人脸特征检测方法实现了一个实时人脸特征定位系统。同时也对原算法本身作了一些改进,在对精度影响极小的情况下,大大提高了原算法的速度。 [4]郭瑞,张淑玲,汪小芬.人脸识别特征提取方法和相似度匹配方法研究[J].计算机工程, 2006, 11(32):1-2 摘要:横向比较特征提取方法,综合考虑认证率和特征提取时间两方面因素,该文认为特征脸结合线性判别分析方法是研究的4 种特征提取方法中最优的方法。通过对投影空间维数的研究,最佳投影空间维数同数据库本身类内图像的相似程度和每一类的样本数目同方向增长,它们之间存在定性关系而非定量关系。相似度匹配方法的研究结果表明余弦距离分类器分类效果最佳。 [5]张敏,陶亮.人脸图像中人眼的检测与定位[J].光电工程, 2006, 8(33):1-6 摘要:利用人脸几何特征和图像分割原理,提出了一种在有背景的灰度和彩色人脸图像中自动检测与定位人眼的新算法。首先,基于人脸器官几何分布先验知识建立人眼位置判定准则;其次对人眼的分割阈值范围进行粗估计;然后采用分割阈值递增法,并结合人眼位置判定准则判定分割图像中双眼黑块是否出现;最后利用二维相关系数作为对称相似性测度,检验检测到的双眼的真实性。为了避免图像背景对人眼检测的干扰,还运用了肤色分割原理来缩小检测人眼的搜索区域,从而进一步提高人眼定位的准确性。实验验证表明,所提出的人眼检测与定位方法在速度和准确性方面具有良好的性能。 [6]张永梅, 韩焱, 商细云.一种人脸的检测与定位方法[J].中北大学学报(自然科学版)2006, 3(27):1-5 摘要:出一种基于肤色的人脸检测定位算法,设计了基于肤色的人脸检测和定位系统. 采用了增强人脸特征与脸部皮肤之间对比度的方法以及二值化方法,改进了预处理的效果. 使用了基于边界方法和基于区域方法相结合的算法,提取了眼睛、嘴和鼻子等关键特征, 最终较好地实现了人脸定位。在Microsoft W indow sM E 平台上, 利用V isual C+ + 6. 0 开发了软件。实验结果表明, 该软件对于一定尺寸范围内清晰的正面人脸图像能够正确检测定位并提取特征。 [7]裘伟.一种基于相似度及复杂度人眼定位算法[J].苏州大学学报(工科版)2006, 6(26):1-4 摘要:出一种在检测到人脸区域的前提下,对人眼进行准确定位的算法。该算法首先计算人脸图像的相似度信息,并对得到的相似度图像进行二值化,从而标定人脸区域。然后对得到的人脸区域进行图像块分割,通过复杂度计算得到三个复杂度最大的区域块,计算其居中度,从而实现对人眼的准确定位。 [8]吴为.人脸识别的软件系统开发,复旦大学工学学士学位论文,2005年6月 摘要:人脸识别技术有着广阔的应用前景和迫切的现实需求,是当前模式识别、计算机视觉等领域里最热门的研究方向之一。而人脸识别的软件系统开发,则是联系理论和实践的最重要的环节。本文着重介绍了人脸识别软件系统开发的背景,原理以及最后的设计结果。 [9]谢建新.数字视频采集与目标跟踪,华侨大学本科毕业论文,2004年6月 摘要:在室内环境条件下,使摄像机具有智能检测的视频采集功能,实现摄像机对移动人体的脸部区域的检测,并对人体的脸部区域进行实时跟踪。 在目标跟踪模块中,通过对所采集图像进行灰度变换、二值化、垂直直方图、水平直方图的变换,结合肤色和人脸椭圆形状来检测彩色图像、背景中的人脸区域。首先利用人类肤色在色度空间分布的稳定性,检测出图像中的皮肤区域,通过先验知识进行甄别,选出候选人脸区域。利用人脸的宽高比、颜色、结构等特征进行人脸逐级判别,从而确定人脸位置;通过对脸部的各器官建立相应的数学模型,检测出人脸的特征,对其鼻子,眼睛,嘴巴进行的定位,来验证人脸区域定位的准确性。最后根据后续帧中人脸区域重心的位移来控制云台实现跟踪。 [10] 王学武, 石跃祥.基于眼睛特征的人脸检测方法[J].计算机应用研究.2006年,1(1):1-3 摘要:于眼球的灰度级较低,而眼球周围白色区域的灰度级较高,因此在其交界处灰度级产生强烈突变。利用这一特征先从图像中找出可能的眼睛对,定位可能的人脸区域,通过计算其对称性来确定各种人脸特征的存在,更进一步验证可能的人脸区域。实验证明,此方法能迅速准确地从复杂背景图像中检测出人脸,而且对多人脸图像同样有效。 附录C 主要源程序 ////////////////////////////////////////////////////////////////////////// //计算相似度 ////////////////////////////////////////////////////////////////////////// void CLikelyHood::CalLikeHood() {int i,j; for(i=0; i max) max = m_pLikeliHoodArray[i][j]; for(i=0; i=0;k--) { double sum = 0; for(i=0; ik*0.1+0.05) m_pBinaryArray[i][j] = 1; else m_pBinaryArray[i][j] = 0; sum += (m_pBinaryArray[i][j]-temp[i][j]); } if(sum < min) { min = sum; index = 6-k; } for(i=0; ioptimalThreshold) m_pBinaryArray[i][j] = 1; else m_pBinaryArray[i][j] = 0; } if(temp!=NULL) { for(int i=0;i<=m_nHeight-1;i++) if(temp[i]!=NULL) delete temp[i]; delete temp; } m_bBinaryReady = true; return true; } //////////////////////////////////////////////////////////////////////////////// // 边界检测 //////////////////////////////////////////////////////////////////////////////// void CFaceDetectDlg::DoLOG(int left, int right, int top, int bottom, RGBQUAD **source, RGBQUAD **target) { int i,j; double **result; result = new double*[m_nWndHeight]; for(int l=0 ; l 0.246 && r<0.664 && r>0.233 && r>g && g>=0.5*(1-r)) { target[i][j].rgbRed = 255; //face } else target[i][j].rgbRed = 0; } for(i=top+2; i=5)positive++; } if(positive>2 && negtive>2) { target[i][j].rgbBlue = target[i][j].rgbGreen = target[i][j].rgbRed = 0; } } if(result!=NULL) { for (int i=0 ;im_bBinaryReady) { AfxMessageBox("请先计算二值化图!"); return; } m_bShowFace = true; SetCursor(LoadCursor(NULL,IDC_WAIT)); int *temp = new int[m_nWndWidth]; int max = 0; int pos = -1; for(int j=0; jm_pBinaryArray[i][j] == 1) count++; } temp[j] = count; if(count > max) { max = count; pos = j; } } int left,right,l,top,bottom; for(l=pos; l>=0; l--) { if(temp[l]m_pBinaryArray[i][l] == 1) count++; } if(count>=(right-left)*0.5) { top = i; break; } } bottom=(int)(top+(right-left)*1.5)>=m_nWndHeight?m_nWndHeight-1:(int)(top+(right-left)*1.5); CopyBitMap(m_tResPixelArray,m_tOriPixelArray); for(i=top;i<=bottom;i++) {m_tResPixelArray[i][left].rgbBlue=255; m_tResPixelArray[i][left].rgbGreen = m_tResPixelArray[i][left].rgbRed = 0; m_tResPixelArray[i][right].rgbBlue=255; m_tResPixelArray[i][right].rgbGreen = m_tResPixelArray[i][right].rgbRed = 0; } for(j=left;j<=right;j++) {m_tResPixelArray[top][j].rgbBlue=255; m_tResPixelArray[top][j].rgbGreen = m_tResPixelArray[top][j].rgbRed = 0; m_tResPixelArray[bottom][j].rgbBlue=255; m_tResPixelArray[bottom][j].rgbGreen=m_tResPixelArray[bottom][j].rgbRed = 0; } MakeBitMap(); SetCursor(LoadCursor(NULL,IDC_ARROW)); if(m_bFaceOK) { ReplaceDlg dlg; if(dlg.DoModal()==IDOK) {CopyBitMap(m_tResPixelArray,m_tOriPixelArray); CRect rect(left,top,right,bottom); m_rFaceRegion = rect; MakeBitMap(); } } else { m_bFaceOK = true; CopyBitMap(m_tResPixelArray,m_tOriPixelArray); CRect rect(left,top,right,bottom); m_rFaceRegion = rect; MakeBitMap(); } /////////////////////////////////////////////////////////////////////////////// // 标记眼睛区域 //////////////////////////////////////////////////////////////////////////////// void CFaceDetectDlg::OnBtnMarkEye() { int i,j; if(!m_bFaceOK) {AfxMessageBox("请先确定脸部区域"); return; } //左右眼的水平区域 CPoint LeftEyeAreaH(-1,-1),RightEyeAreaH(-1,-1); CPoint LeftEyeAreaV(-1,-1),RightEyeAreaV(-1,-1); int nLeft,nRight,nTop,nBottom; nLeft = m_rFaceRegion.left-5 > 0 ? m_rFaceRegion.left-5:0; nRight=m_rFaceRegion.right+5 0 ? m_rFaceRegion.top-5:0; nBottom=m_rFaceRegion.bottom+5 m_rFaceRegion.top+6*nSlidWinHeight; i--) for(j=m_rFaceRegion.left+nSlidWinWidth;j= nSlidWinWidth*nSlidWinHeight/3) { m_tResPixelArray[i][j].rgbRed = 255; tempArray[j] ++; } } MakeBitMap(); AfxMessageBox("眼睛的区域鉴别"); CList myList1(sizeof(CPoint)); CList myList2(sizeof(CPoint)); int flag = 0; CPoint tPoint(-1,-1); for(i = 0; i 0 && flag ==0) { tPoint.x = i; flag = 1; } if(tempArray[i] == 0 && flag ==1) { tPoint.y = i; myList1.AddTail(tPoint); flag = 0; } } delete tempArray; //去掉长度太小的候选者 for(i=0; i=minVal) myList2.AddTail(temp); } myList1.RemoveAll(); //合并相邻很紧的区域 bool quit = 1; while(quit) { bool doJoin = false; for(int i=0; i(m_rFaceRegion.right - m_rFaceRegion.left)/2) { LeftEyeAreaH.x = t.x; LeftEyeAreaH.y = t.x+(t.y-t.x)/3; RightEyeAreaH.x = t.y-(t.y-t.x)/3; RightEyeAreaH.y = t.y; } else { AfxMessageBox("确认眼睛位置失败,请手动标定"); return; } } //仅有两个区域 else if(myList2.GetCount()==2) { LeftEyeAreaH = myList2.GetHead(); RightEyeAreaH = myList2.GetTail(); } else //多于两个区域 { int ldis = -100000; int rdis = 100000; for(i=0; i nMidFaceH) { if(((temp.x+temp.y)/2-nMidFaceH)ldis) { ldis = (temp.x+temp.y)/2-nMidFaceH; LeftEyeAreaH = temp; } } } } myList2.RemoveAll(); /////////////////////////////////// //确认两个眼睛的垂直区域 ////////////////////////////////// //左眼 if(LeftEyeAreaH != CPoint(-1,-1)) { int *tArray = new int[m_nWndHeight]; int i,j; for(i = 0; im_rFaceRegion.top+6*nSlidWinHeight; i--) for(j=LeftEyeAreaH.x; j<=LeftEyeAreaH.y;j++) if(m_tResPixelArray[i][j].rgbRed==255&&m_tResPixelArray[i][j].rgbGreen == 0) tArray[i] ++; CList myListA(sizeof(CPoint)); CList myListB(sizeof(CPoint)); int flag = 0; CPoint tPoint(-1,-1); for(i=nMidFaceV-nSlidWinHeight;i>m_rFaceRegion.top+6*nSlidWinHeight; i--) { if(tArray[i] > 0 && flag ==0) { tPoint.x = i; flag = 1; } if(tArray[i] == 0 && flag ==1) { tPoint.y = i; myListA.AddTail(tPoint); flag = 0; } } delete tArray; //去掉长度太小的候选者 for(i=0; i=minVal) myListB.AddTail(temp); } myListA.RemoveAll(); //合并相邻很紧的区域 bool quit = 1; while(quit) { bool doJoin = false; for(int i=0; i= LeftEyeAreaV.y;i--) for(j=LeftEyeAreaH.x; j<=LeftEyeAreaH.y;j++) if(m_tResPixelArray[i][j].rgbGreen == 0) { if(jm_LeftEyeRightCorner.x) { m_LeftEyeRightCorner.x = j; m_LeftEyeRightCorner.y = i; } sumX += j; sumY += i; sum++; } m_LeftEye.x = (int)(sumX/sum); m_LeftEye.y = (int)(sumY/sum); m_bLeftEyeOK = TRUE; m_bLeftEyeLeftCornerOK = TRUE; m_bLeftEyeRightCornerOK =TRUE; } myListB.RemoveAll(); } //右眼 if(RightEyeAreaH != CPoint(-1,-1)) { int *tArray = new int[m_nWndHeight]; int i,j; for(i = 0; i m_rFaceRegion.top+6*nSlidWinHeight; i--) for(j=RightEyeAreaH.x; j<=RightEyeAreaH.y;j++) if(m_tResPixelArray[i][j].rgbRed == 255 && m_tResPixelArray[i][j].rgbGreen == 0) tArray[i] ++; CList myListA(sizeof(CPoint)); CList myListB(sizeof(CPoint)); int flag = 0; CPoint tPoint(-1,-1); for(i=nMidFaceV-nSlidWinHeight;i>m_rFaceRegion.top+6*nSlidWinHeight; i--) { if(tArray[i] > 0 && flag ==0) { tPoint.x = i; flag = 1; } if(tArray[i] == 0 && flag ==1) { tPoint.y = i; myListA.AddTail(tPoint); flag = 0; } } delete tArray; //去掉长度太小的候选者 for(i=0; i=minVal) myListB.AddTail(temp); } myListA.RemoveAll(); //合并相邻很紧的区域 bool quit = 1; while(quit) { bool doJoin = false; for(int i=0; i LeftEyeAreaV.x && index > 0) { index --; tt = myListB.GetAt(myListB.FindIndex(myListB.GetCount()-index)); } RightEyeAreaV = tt; } double sumX = 0.0; double sumY = 0.0; int sum = 0; m_RightEyeLeftCorner.x = 100000; m_RightEyeRightCorner.x = -1; for(i=RightEyeAreaV.x; i>=RightEyeAreaV.y;i--) for(j=RightEyeAreaH.x; j<=RightEyeAreaH.y;j++) if(m_tResPixelArray[i][j].rgbGreen == 0) { if(jm_RightEyeRightCorner.x) { m_RightEyeRightCorner.x = j; m_RightEyeRightCorner.y = i; } sumX += j; sumY += i; sum++; } m_RightEye.x = (int)(sumX/sum); m_RightEye.y = (int)(sumY/sum); m_bRightEyeOK = TRUE; m_bRightEyeLeftCornerOK = TRUE; m_bRightEyeRightCornerOK =TRUE; } myListB.RemoveAll(); } CopyBitMap(m_tResPixelArray,m_tOriPixelArray); MakeBitMap(); } } //////////////////////////////////////////////////////////////////////////////// // 标记鼻子 //////////////////////////////////////////////////////////////////////////////// void CFaceDetectDlg::OnBtnMarkNose() { int i,j; if(!(m_bLeftEyeOK&&m_bRightEyeOK)) { AfxMessageBox("请先确定眼睛"); return; } //左右眼的水平区域 int nLeft,nRight,nTop,nBottom; nLeft=m_rFaceRegion.left-5>0?m_rFaceRegion.left-5:0; nRight=m_rFaceRegion.right+5 0 ? m_rFaceRegion.top-5:0; nBottom=m_rFaceRegion.bottom+5nBottom? nBottom:(int)(EyeV+0.5*EyesDis); int NoseDown=(EyeV+0.8*EyesDis)>nBottom?nBottom:(int)(EyeV+0.8*EyesDis); int* Y_Arry = new int[NoseDown-NoseUp]; for(i =0 ;i < NoseDown-NoseUp ;i++) Y_Arry[i] = 0; int* X_Arry = new int[EyesDis]; for(i =0 ;i < EyesDis ;i++) X_Arry[i] = 0; for(i = NoseUp ; i < NoseDown; i++) for(j = m_LeftEye.x+EyesDis/5; j< m_RightEye.x-EyesDis/5; j++) { if(m_tResPixelArray[i][j].rgbRed == 255) { Y_Arry[i-NoseUp] ++; X_Arry[j-m_LeftEye.x] ++; } } int maxY = 0; for(i =0 ;i < NoseDown-NoseUp ;i++) { if(Y_Arry[i]>maxY) { maxY = Y_Arry[i]; m_MidNose.y = i+NoseUp; } } m_LeftNostril.y =(int)(m_MidNose.y - tanThta*EyesDis/2); m_RightNostril.y =(int)(m_MidNose.y + tanThta*EyesDis/2); for(i =0 ;i < EyesDis ;i++) { if(X_Arry[i]>0) { m_LeftNostril.x = i+m_LeftEye.x; break; } } for(i = EyesDis-1; i >=0 ;i--) { if(X_Arry[i]>0) { m_RightNostril.x = i+m_LeftEye.x; break; } } //唇中点较薄 int min = 1000000; for(i = (int)(EyesDis/3+0.5) ; i <= (int)(2*EyesDis/3+0.5);i++) { if(X_Arry[i]阈值 灰度值=0 灰度值=1 查找下个像素 结束 眼睛定位 图像灰度化 打开位图 计算相似度 标记人脸 图像二值化 包含人脸区域在内的一系列矩形区 图像中的肤色和非肤色象素点 人脸区域分割算法 输入的经过肤色分割的图像 去噪声处理 提取边界 对边界的连通关系作处理 由边界的连通性和闭合性得到初始的一系列矩形 将初始的矩形序列进行归并处理 输出最终的矩形 原始图像 皮肤图像 修正后的皮肤图像 皮肤像素与整个矩形面积的比 非人脸 矩形面积 非人脸 标准候选人脸 候选人脸 肤色区域 用LOG算子进行边缘提取 是否为边缘? 处理为白色 处理为黑色 A B I II 右眼眉毛 左眼眉毛 左眼 右眼 确定人脸区域 边缘检测 确定人眼的水平区域 确定人眼的垂直区域 标记左右眼角和眼睛的位置 确定眼睛区域 可能的鼻子区域 找出鼻尖 确定鼻孔的位置 标记鼻孔 I - 56 - - 57 - _1243684002.unknown
本文档为【基于肤色相似度的人脸检测与定位毕业设计(论文)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
不系舟红枫
从教近30年,经验丰富,教学水平较高
格式:doc
大小:3MB
软件:Word
页数:63
分类:工学
上传时间:2019-01-22
浏览量:14