.
..
摘要
人脸识别技术(FRT)是当今模式识别和人工智能领域的一个重要研究方向。
虽然人脸识别的研究已有很长的历史,各种人脸识别的技术也很多,但由于人脸
属于复杂模式而且容易受表情、肤色和衣着的影响,目前还没有一种人脸识别
技术是公认快速有效的.本文主要讨论了人脸识别技术的一些常用方法,对现有
的人脸检测与定位、人脸特征提取、人脸识别的方法进行分析和讨论,最后对人
脸识别未来的发展和应用做了展望。
关键字:人脸识别,特征定位,特征提取
.
..
ABSTRACT
Nowadaysthefacerecognitiontechnology(FRT)isahotissueinthefieldofpattern
recognitionandartificialintelligence.Althoughthisrearchalreadyhasalonghistoryandmany
differentrecognitionmethodsarepropod,thereisstillnoeffectivemethodwithlowcostand
highprecision.Humanfaceisacomplexpatternandiasilyaffectedbytheexpression,
complexionandclothes.Inthispaper,somegeneralrearcharediscusd,includingmethodsof
facedetectionandlocation,featuresabstraction,andfacerecognition.Thenweanalyzeand
forecastthefacerecognition’sapplicationanditsprospects.
Keywords:FaceRecognitionTechnology,Facelocation,Featuresabstraction
.
..
第1章绪论
所谓人脸识别,是指对输入的人脸图像或者视频.判断其中是否存在人脸,
如果存在人脸,则进一步给出每张人脸的位置、大小和各个主要面部器官的位置
信息。并且依据这些信息,进一步提取每张人脸蕴含的身份特征,并将其与已知
人脸库中的人脸进行对比,从而识别每张人脸的身份。人脸识别研究涉及的范围
广泛,内容涉及模式识别、计算机视觉、图像处理、人工智能等方面。人脸识别
还涉及到神经网络等学科,也和人脑的认识程度紧密相关。这诸多因素使得人
脸识别成为一项极富挑战性的课题。
1.1人脸识别技术的研究意义
人脸识别是机器视觉和模式识别领域最富有挑战性的课题之一,同时也具有
较为广泛的应用意义。人脸识别技术是一个非常活跃的研究领域,它覆盖了数字
图像处理、模式识别、计算机视觉、神经网络、心理学、生理学、数学等诸多学
科的内容。如今,虽然在这方面的研究已取得了一些可喜的成果,但是FRT在
实用应用中仍面临着很严峻的问题,因为人脸五官的分布是非常相似的,而且人
脸本身又是一个柔性物体,表情、姿态或发型、化妆的千变万化都给正确识别带
来了相当大的麻烦。如何能正确识别大量的人并满足实时性要求是迫切需要解决
的问题。
1.2国内外的研究现状
人脸识别系统现在在大多数领域中起到举足轻重的作用,尤其是用在机关单
位的安全和考勤、网络安全、银行、海关边检、物业管理、军队安全、智能身份
证、智能门禁、司机驾照验证、计算机登录系统。我国在这方面也取得了较好的
成就,国家863项目“面像检测与识别核心技术”通过成果鉴定并初步应用,就
标志着我国在人脸识别这一当今热点科研领域掌握了一定的核心技术。北京科瑞
奇技术开发股份有限公司在2002年开发了一种人脸鉴别系统,对人脸图像进行
处理,消除了照相机的影响,再对图像进行特征提取和识别。这对于人脸鉴别特
.
..
别有价值,因为人脸鉴别通常使用正面照,要鉴别的人脸图像是不同时期拍摄的,
使用的照相机不一样。系统可以接受时间间隔较长的照片,并能达到较高的识别
率,在计算机中库藏2300人的正面照片,每人一张照片,使用相距1--7年、差
别比较大的照片去查询,首选率可以达到50%,前20张输出照片中包含有与输
入照片为同一人的照片的概率可达70%。
美国陆军实验室也是利用vc++开发,通过软件实现的,并且FAR为49%。在
美国的进行的公开测试中,FAR,为53%。美国国防部高级研究项目署,利用半
自动和全自动算法。这种算法需要人工或自动指出图像中人的两眼的中心坐标,
然后进行识别。在机场开展的测试中,系统发出的错误警报太多,国外的一些高
校(卡内基梅隆大学(CarnegieMellonUniversity)为首,麻省理工大学
(MassachuttsInstituteofTechnology)等,英国的雷丁大学(University
ofReading))和公司(Visionics公司Facelt人脸识别系统、Viiage的
FaceFINDER身份验证系统、LauTech公司Hunter系统、德国的BioID系统等)
的工程研究工作也主要放在公安、刑事方面,在考试验证系统的实现方面深入研
究并不多。
1.3本系统研究内容
本系统主要对人脸的检测与定位做了深入研究。在人脸检测部分主要是对图
像进行获取和预处理。图像获取主要是获取图像的基本信息,以便对图像的像素
进行处理。预处理的包括对图像灰度化,中值滤波,对比度变化以及边缘提取。
人脸预处理过程是计算机人脸识别中一个重要过程。人脸图像预处理的好坏对整
个系统至关重要,对人脸预处理的研究具有非常重要的意义。特征定位是人脸识
别的目的是确定单张人脸在图像中的位置,它通过标记人脸区域来确定和计算
人脸的各器官定位。人脸特征检测是检测人脸特征的有无和位置,比如说眼睛、
鼻子、鼻孔、嘴巴、嘴唇等的有无和位置。
值得指出的是,人脸检测涉及的方法种类繁多(据报告可知,用于人脸检测
方法的有150多种),且涉及的知识点较深,并各有特点,所以我们小组将人脸
检测与人脸识别区分开来,因为后者只是前者一个简单问题。同时,我们把注意
力集中在人脸检测方法上,而没有实现与数据库中的人脸匹配问题。
.
..
1.4目前研究中存在的问题
虽然人类的人脸识别能力很强,,能够记住并辨别上千张不同人脸,可是计
算机则困难多了。其表现在:人脸表情丰富;人脸随年龄增长而变化;人脸所成
图像受光照、成像角度及成像距离等影响;而且从二维图象重建三维人脸是病态
(ill2pod)过程,目前尚没有很好的描述人脸的三维模型。另外,人脸识别
还涉及到图象处理、计算机视觉、模式识别以及神经网络等学科,也和人脑的认
识程度紧密相关。这诸多因素使得人脸识别成为一项极富挑战性的课题。
.
..
第2章系统需求分析
2.1系统功能需求
系统功能主要围绕人脸检测和人脸特征定位进行设计,首先该系统会对图像
进行人脸检测,人脸检测主要是对图像进行预处理的过程,预处理这个模块在整
个人脸识别系统的开发过程中占有很重要的地位。该系统主要是将处理后的人脸
图片进行定位,将眼睛、鼻子、嘴巴标记出来。
2.1.1功能划分及描述
图像的处理方法很多,我们可以根据需要,有选择地使用各种方法。在确定
脸部区域上,通常使用的方法有肤色提取。肤色提取,则对脸部区域的获取则比
较准确,成功率达到95%以上,并且速度快,减少很多工作。
图像获取模块:
该模块主要是从图片库中获取图片,获取后的图片可以在软件的界面中显示
出来以便进行识别。
图像预处理模块:
图像预处理就是对获取得来的图像进行适当的处理,使它具有的特征能够在
图像中明显的表现出来。该模块中的子模块有如下几个,下面对它们进行概述:
中值滤波:在图像的采集过程中,由于各种因素的影响,图像中往往会出现一
些不规则的随机噪声,如数据在传输、存储时发生的数据丢失和损坏等,这些都会
影响图像的质量,因此需要将图片进行平滑操作以此来消除噪声。
灰度化:图像灰度化的过程就是把彩色图像转换为灰度图像的过程,彩色图
像包含较多人脸特征信息,但是直接作为处理对象会使过程复杂化.相比之下灰
度图像在保留了人脸主要特征信息的基础上,减少了总信息量。
.
..
Sobel提取(边缘提取):采用梯度微分锐化图像,使噪声、条纹等得到增
强;对图像中的随机噪声也有一定的平滑作用;标记人脸的边缘,使其边缘显得
粗而亮。
对比度增强:对比度增强,就是对图像的进一步处理,将对比度再一次拉开。
它针对原始图像的每一个像素直接对其灰度进行处理的,其处理过程主要是通过
增强函数对像素的灰度级进行运算并将运算结果作为该像素的新灰度值来实现
的。通过改变选用的增强函数的解析表达式就可以得到不同的处理效果。
相似度计算:相似度计算是为了判别两对象的相似程度而设定的算法,比如
文字、指纹、人脸等。为了便于二值化阈值的确定,肤色相似度计算的意义是通
过计算出与人脸肤色相近的像素点,确定人脸区域,用灰度图象显示出来,并为
二值化提供一个可计算出阈值的比较值。
二值化:通过一些算法,通过一个阈值改变图像中的像素颜色,令整幅图像
画面内仅有黑白二值,该图像一般由黑色区域和白色区域组成,可以用一个比特
表示一个像素,“1”表示黑色,“0”表示白色,以便有利于我们对特征的提取。
直方图:直方图是图象处理中一种十分重要的图象分析工具,它描述了一幅
图像的灰度级内容,任何一幅直方图都包含了丰富的信息。从数学上来说图像直
方图是图像各个灰度值统计特性与图像灰度值的函数,它统计了一幅图像中各个
灰度级出现的次数和概率。
2.1.2开发环境
硬件环境
硬件配置原则:具有可靠性,可用性和安全性,具有完善的技术支持。能够满足
个人学习和设计需要。
运行本软件所需的硬件资源:CPU:800M及以上;内存:128M及以上
软件环境
系统软件配置原则能够满足该软件的可靠性,可用性和安全性的要求系统软件配
.
..
置方案
①配置有持续工作能力、高稳定性、高度可集成的开放式标准的操作系统,如
Windows2000,WindowsNT,UNIX,Linux等。
②配备符合ANSI/ISO标准的高级程序设计语言处理软件。如:VisualC++6.0。
③熟悉C++高级程序设计语言。
2.1.3运行环境
(1)硬件环境
CPU:800M以上;内存:128M及以上。
(2)软件环境
可以运行在微软公司近年来所出的各种操作系统。如Windows98、WindowsMe、
Windows2000、WindowsNT等。
2.2可行性分析
在开发该人脸识别软件之前,我们查询了前人所写过的诸多论文以及源程
序,在开发之时,结合了资料中的算法并揉进了自己的一些思想,使程序可以对
人脸图片进行简易识别。
2.2.1操作可行性
该人脸识别软件需要如下的运行环境:CPU:800M及以上;内存:128M
及以上。安装有Windows98、WindowsMe、Windows2000、WindowsNT等操
作系统中的其中一种。因此,从操作可行性来看,只要系统用户的硬件软件设备
满足以上条件,即可用该人脸识别软件进行人脸的识别。
2.2.2技术可行性
图像的处理方法很多,我们可以根据需要,有选择地使用各种方法。在确定
脸部区域上,通常使用的方法有肤色提取。肤色提取,则对脸部区域的获取则比
较准确,成功率达到95%以上,并且速度快,减少很多工作。人脸自身变化的挑
战:同一个人的人脸图像因为表情、精神状态、健康状况、姿态、整容、年龄变
.
..
化、意外损伤、化妆、眼镜帽子、头发胡须等变化而发生巨大的变化;外部环境
的挑战:光照环境条件、摄像设备、人与摄像设备的距离角度、图像存储质量等,
都会使人脸图像发生教大变化。面队这些就要求我们进一步研究基于人脸肤色提
取的算法,提高识别精度,,提高识别速度,提高系统的适用性。
2.3预处理方案选择
2.3.1设计方案原则的选择
本应用程序的设计方案原则如下:
①采用较为先进的技术力量,保证应用程序在技术上具备一定的优势。
②采用成熟的技术,保证应用程序的安全性和可靠性。
③应用程序便于扩展和维护,易于技术的更新。
④应用程序充分利用现有的资源,尽量减少不必要的再投资。
⑤编写的代码必须严谨易读,代码的解释必须清楚明白,为应用程序的再开
发提供应尽的责任。
2.3.2图像文件格式选择
图像采集是在Windows操作系统下开发的,需要了解在此环境下图像的存储、
显示等方面的机制。在Windows操作系统中,任何图像格式(如.jpeg格式,.gif
格式)在系统中显示之前最终必须转化为位图格式。BMP图像文件格式(位图格
式)是微软公司为其Windows环境设置的标准图像格式,在设计的过程中,为了
定位和特征提取的方便,我们采用的是BMP格式的图像。
2.3.3开发工具选择
本次设计所用的开发工具是MicrosoftVisualC++6.0。VisualC++6.0
是Microsoft公司推出的一种可视化编程工具。它支持多平台和交叉平台的开
发,将各种编程工具如编辑器、连接器、调试器等巧妙的结合在一起,构成一个
完美的可视化开发环境。用户无需通过繁杂的编程操作,即可完成Windows下应
用程序的编辑、编译、测试和细化等工作。
.
..
2.3.4算法选择分析
本文主要研究的对象是图像预处理模块,该模块分为中值滤波、图像灰度化、
相似度计算、二值化每个小模块的实现都有许多相应的算法。下面将本系统采用
的算法进行介绍:
中值滤波:在图像的采集过程中,由于各种因素的影响,图像中往往会出现一
些不规则的随机噪声,如数据在传输、存储时发生的数据丢失和损坏等,这些都会
影响图像的质量,因此需要将图片进行平滑操作以此来消除噪声。但是如果平滑
不当,就会使图像本身的细节如边界轮廓、线条等变的模糊不清,为了既平滑掉
噪声有尽量保持图像细节,本系统采用中值滤波算法处理。
图像灰度化:图像灰度化是将图像变成灰色,本系统中采用加权平均值法来
实现图像的灰度化,这样可以获得最合理的灰度图像。
肤色相似度计算:相似度计算是为了判别两对象的相似程度而设定的算法,
比如文字、指纹、人脸等。为了便于二值化阈值的确定,肤色相似度计算的意义
是通过计算出与人脸肤色相近的像素点,确定人脸区域,用灰度图象显示出来,
并为二值化提供一个可计算出阈值的比较值。
二值化:通过一些算法,通过一个阈值改变图像中的像素颜色,令整幅图像
画面内仅有黑白二值,该图像一般由黑色区域和白色区域组成,可以用一个比特
表示一个像素,“1”表示黑色,“0”表示白色,以便有利于我们对特征的提取。
.
..
第3章系统的概要设计
本章主要介绍系统的结构设计的流程以及系统各模块的功能及相关原理。应
用程序的总体结构设计流程图如图3-1所示:
图3-1总体结构设计流程图
.
..
图像预处理的层次图如图3-2所示:
图3-2预处理的层次图
人脸定位的层次图如图3-3所示:
图3-3人脸定位的层次图
.
..
3.1各模块功能概述
以上是该系统的总体结构设计图以及图像预处理模块的层次图。下面介绍系
统中的各模块的具体功能。
3.1.1图像获取模块
该模块主要是从图片库中获取,获取后的图片可以在软件的界面中显示出来
以便进行识别。
3.1.2人脸区域获取
该系统中图像里人脸区域的获取,主要是根据肤色来进行获取,通过肤色非
线形分段色彩变换来实现。这一非线性分段色彩变换得到的肤色模型属于色彩空
间中的聚类模型,这一类肤色模型的建立首先要选取一种合适的色彩空间。
3.1.3图像预处理模块
图像预处理就是对获取得来的图像进行适当的处理,使它具有的特征能够在
图像中明显的表现出来。该模块中的子模块有如下几个,下面对它们进行概述:
★中值滤波
中值滤波将对图像进行平滑处理,在图像采集过程中,由于各种因素的影响,
图像往往会出现一些不规则的噪声,入图像在传输、存储等都有可能产生数据的
丢失。从而影响图像的质量。处理噪声的过程称为滤波。滤波可以降低图像的视
觉噪声。
★灰度化
图像灰度化的过程就是把彩色图像转换为灰度图像的过程,彩色图像包含较
多人脸特征信息,但是直接作为处理对象会使过程复杂化.相比之下灰度图像在
保留了人脸主要特征信息的基础上,减少了总信息量。
.
..
★对比度增强
对比度增强,就是对图像的进一步处理,将对比度再一次拉开。使图象原本
模糊的边缘变得清晰。
★Sobel边缘提取
Sobel提取的优点:采用梯度微分锐化图像,同样使噪声、条纹等得到增强,
Soble算子则在一定程度上克服了这个问题:由于引入了平均因素,因而对图像
中的随机噪声有一定的平滑作用;由于它是相隔两行或两列之差分,故边缘两侧
之元素得到了增强,故边缘显得粗而亮。
★相似度计算
相似度计算是为了判别两对象的相似程度而设定的算法,比如文字、指纹、
人脸等。为了便于二值化阈值的确定,肤色相似度计算的意义是通过计算出与人
脸肤色相近的像素点,确定人脸区域,用灰度图象显示出来,并为二值化提供一
个可计算出阈值的比较值。
★二值化
二值化的目的是将采集获得的多层次灰度图像处理成二值图像,以便于分析
理解和识别并减少计算量。二值化就是通过一些算法,通过一个阈值改变图像中
的像素颜色,令整幅图像画面内仅有黑白二值,该图像一般由黑色区域和白色区
域组成,可以用一个比特表示一个像素,“1”表示黑色,“0”表示白色,当然
也可以倒过来表示,这种图像称之为二值图像。这便有利于我们对特征的提取。
该设计中采用组内方差和组外方差来实现二值化。
3.1.4图像模块定位
对候选特征进行筛选时,首先割据颜色信息提出那些伪特征。然后用PCA模
板和几何特征确定眼睛和嘴巴。
★颜色筛选
无论是眼睛还是嘴巴,都位于人脸的非肤色区域。而且眼睛的颜色是黑暗分
.
..
明,利用这些知道可以淘汰很多候选,减少PCA验证的负担。
★双眼的定位
把筛选过的特征区域两两配对,再用PCA模扳进行严整,就可以得到真正的
双眼
大使,PCA严整有时候难以区分眉毛与眼睛,所以还要用一些几何特性进一
步筛选,由于假定姿态是正的,双眼必定位于人脸的上半部分,他们的连线是近
似水平的,而且他们的中心比眉毛低,运用这些判据,可以区分眉毛和眼睛。
★鼻子的定位
在确定了眼睛的位置以后,鼻子的位置基本确定,以眼睛的瞳距为1来计算,
鼻子到两眼中心的距离为0.7到1。在这附近搜索颜色较深的区域,大致能得到鼻
孔的位置(有的侧面图一个鼻孔基本不可见,也就无法检测出来了)。然后在两
鼻孔上访一定范围内(鼻孔的距离的1/2左右)找亮度最高的点作为鼻尖。
★嘴巴的定位
找到双眼之后,可以在它们的下方搜索候选特征区域,寻找非肤色面积较大、
近似位于双眼对称的候选作为嘴巴。然后根据先验知识调整嘴巴的大小。
.
..
第4章系统详细设计
本章主要对图像处理这一模块进行详细介绍,对其子模块所用到的算法及具
体实现进行详细讲述。
4.1系统的运行流程图
图4-1系统流程图
4.2图像处理详细设计
4.2.1图像灰度化
彩色图像包含较多人脸特征信息,但是直接作为处理对象会使过程复杂化。
相比之下灰度图像在保留了人脸主要特征信息的基础上,减少了总信息量。
(1)算法思想
灰度化的处理方法主要有3种:
①最大值法:使RGB的值等于3值中的最大一值,即,
max(,,)RGBRGB式(4.1)
➢启动本系
统,进入
人脸识别
系统界
面。
➢点击打开
图象,选
取所需要
的图片
对图片进行光线
补偿、将图片变成
灰色、实现图片对
比度增强,二值化
变换等一系列预
处理。
将处理好的人脸
图片进行定位,标
出眼睛、鼻尖和嘴
巴。
.
..
最大值法会完成亮度很高的灰度。
②平均值法:取R,G,B的平均值,即,
()3RGBRGB式(4.2)
平均值法会完成比较柔和的灰度。
③加权平均值法:根据重要性或其他指标给R,G,B赋予不同的权值,并使
RGB的加权值平均,即,
()3
RGB
RGBWRWGWB式(4.3)
其中
R
W,
G
W,
B
W分别为R,G,B的权值。实验和理论推导证明当
0.30,0.59,0.11
333G
RB
W
WW
时,即当,
0.300.590.11cgrayRGB式(4.4)
RGBcgray式(4.5)
时,能得到最合理的灰度图像。
(2)具体实现灰度化功能
①在明白了灰度化的原理之后,就可进行编码来实现该功能。在编辑界面
中添加一个按钮控件,将其命名为‘灰度化’,并其ID号设为IDC_BTHD,对
应文件CFaceDetectDlg.Cpp中的函数OnBthd()实现.
②现该模块的核心代码如下:
//编写就算像素点灰度值的函数
intCPreProcess::CalGray1(intblue,intgreen,intred)
{
.
..
//利用灰度计算公式
intColorGray=(int)((green*59+red*30+blue*11)/100);
//将像素值限制在0到255
if(ColorGray<0)
{
ColorGray=0;
}
elif(ColorGray>255)
{
ColorGray=255;
}
returnColorGray;
}
//编写OnBtGray()函数
//获取红色分量
intColorRed=m_tOriPixelArray[i][j].rgbRed;
//获取绿色分量
intColorGreen=m_tOriPixelArray[i][j].rgbGreen;
//获取蓝色分量
intColorBlue=m_tOriPixelArray[i][j].rgbBlue;
//调用函数,计算灰度值
intcgray=method3->CalGray1(ColorBlue,ColorGreen,ColorRed);
//显示灰度图像
m_tResPixelArray[i][j].rgbBlue=m_tResPixelArray[i][j].rgbGreen=
m_tResPixelArray[i][j].rgbRed=cgray;
//重置位图
MakeBitMap();
.
..
}
//method3是定义的一个函数指针,定义如下:
CPreProcess*method3;
//初始化如下
method3=newCPreProcess(m_tOriPixelArray,m_nWndWidth,m_nWndHeight);
③图像灰度化效果:
图4-2图像灰度化
4.2.2灰度变换
按照一定的规律修改像素的灰度值,使图像的亮度或者对比度发生改变,使之
.
..
更易于分辨,达到更好的视觉效果。
(1)具体实现功能
进行编码来实现该功能:
在编辑界面中添加一个滑动条控件和文本编辑器,将其命名为‘灰度化变
换’,并其ID号分别设为IDC_SLIDER1,IDC_EDIT1,对应文件
CFaceDetectDlg.Cpp中的函数OnReleadcaptureSlider1()和OnChangeEdit1()
实现。
打开ClassWizard的MemberVariables标签,给每个控件添加所需的成员
变量,参数如下:
表4.1
空间ID号
变量类型变量名范围和大小
IDC_SLIDER1
CSliderCtrlm_Slider――
IDC_EDIT1
intm_Gray0~255
在滑动条的消息处理函数OnReleadcaptureSlider1()中设置滑动条的值使
它等于文本编辑框的初始值。代码为:
//设置滑动条的初始值
m_(m_Gray);
//刷新界面
UpdateData(true);
在滑动条的消息处理函数OnReleadcaptureSlider1()中进行灰度化变换,将
滑动条的值赋给灰度,并将其控制在【0,255】之间。代码为:
cgray+=m_Gray;
if(cgray<0)
{
.
..
cgray=0;
}
if(cgray>255)
{
cgray=255;
}
m_tResPixelArray[i][j].rgbBlue=m_tResPixelArray[i][j].rgbGreen=
m_tResPixelArray[i][j].rgbRed=cgray;
}
}
MakeBitMap();
}
//重置位图MakeBitMap();的主要代码
{
CClientDCClientDC(pDCShow->GetWindow());
if(m_pResMap!=NULL)deletem_pResMap;
m_pResMap=newCBitmap();
m_pResMap->CreateCompatibleBitmap(&ClientDC,m_nWndWidth,m_nWndHeight);
CDCdc;
CompatibleDC(&ClientDC);
Object(m_pResMap);
for(inti=0;i
for(intj=0;j
.
..
elV(j,i,RGB(m_tResPixelArray[i][j].rgbRed,m_tResPixelArray[i][j].rgbGreen,
m_tResPixelArray[i][j].rgbBlue));
DC();
MyDraw();
}
(2)效果图
图4-3比较柔和的灰度图像
.
..
图4-4灰度较强图像
4.2.3sobel边缘提取
图像边缘:是指图像中象素灰度值有阶跃变化或屋顶状变化的那些象素的集
合。图像边缘是一种重要的视觉信息,图像边缘检测是图像处理、图像分析、模
式识别、计算机视觉以及人类视觉的基本步骤。其结果的正确性和可靠性将直接
影响到机器视觉系统对客观世界的理解。实现边缘检测有很多不同的方法,也一
直是图像处理中的研究热点,人们期望找到一种抗噪强、定位准、不漏检、不误
检的检测算法。经典的算法[1-2]中主要用梯度算子,最简单的梯度算子是
Roberts算子,比较常用的有Prewitt算子和Sobel算子,其中Sobel算子效果
较好。
.
..
(1)算法思想
Sobel边缘检测算子使用两个如下有向算子(一个水平的,一个是垂直的),
每一个逼近一个偏导数:
x
D(,){(1,1)2(1,)(1,1)}{(1,1)2(1,)(1,1)}fxyfxyfxyfxyfxyfxyfxy
y
D(,){(1,1)2(,1)(1,1)}{(1,1)2(,1)(1,1)}fxyfxyfxyfxyfxyfxyfxy
2(,)(,)(,)
Xy
DfxyDfxyDfxy
式(4.6)
然后将
(,)Dfxy
的值赋给待求点的灰度值。
(2)具体实现Sobel功能
首先对整张图片的像素点进行扫描,得到每个像素点的R,G,B,然后计算
得到这个像素点的灰度值,
//-101
//-202
//-101
col=temp6+2*temp7+temp8-temp1-2*temp2-temp3;式(4.7)
//-1-21
//000
//121
.
..
row=temp3+2*temp5+temp8-temp1-2*temp4-temp6;式(4.8)
temp=method3->CalSobel(col,row);式(4.9)
//对计算的值进行限制
if(temp<0)
{
temp=0;
}
if(temp>255)
{
temp=255;
}
//重置像素
m_tResPixelArray[i][j].rgbBlue=m_tResPixelArray[i][j].rgbGreen=
m_tResPixelArray[i][j].rgbRed=temp;
}
}
MakeBitMap();
}
{
CClientDCClientDC(pDCShow->GetWindow());
if(m_pResMap!=NULL)deletem_pResMap;
m_pResMap=newCBitmap();
m_pResMap->CreateCompatibleBitmap(&ClientDC,m_nWndWidth,m_nWndHeight);
CDCdc;
CompatibleDC(&ClientDC);
.
..
Object(m_pResMap);
for(inti=0;i
for(intj=0;j
elV(j,i,RGB(m_tResPixelArray[i][j].rgbRed,m_tResPixelArray[i][j].rgbGreen,m_t
ResPixelArray[i][j].rgbBlue));
DC();
MyDraw();
}
(2)效果图
图4-5sobel边缘提取
.
..
4.2.4对比度增强
(1)进行编码来实现该功能:
在编辑界面中添加一个滑动条控件和文本编辑器,将其命名为‘灰度化变换’,
并其ID号分别设为IDC_SLIDER2,IDC_EDIT2,对应文件CFaceDetectDlg.Cpp
中的函数OnReleadcaptureSlider2()和OnChangeEdit2()实现。打开
ClassWizard的MemberVariables标签,给每个控件添加所需的成员变量,参
数如下:
表4.2
空间ID号
变量类型变量名范围和大小
IDC_SLIDER1
CSliderCtrlm_Slider2――
IDC_EDIT1
intm_Degree0~255
在滑动条的消息处理函数OnReleadcaptureSlider2()中设置滑动条的值使
它等于文本编辑框的初始值。代码为:
for(inti=0;i
{
for(intj=0;j
{
//获取红色分量
intr=m_tResPixelArray[i][j].rgbRed;
//获取绿色分量
intg=m_tResPixelArray[i][j].rgbGreen;
//获取蓝色分量
intb=m_tResPixelArray[i][j].rgbBlue;
//对RGB进行变换
intred=abs((127-r)*m_Degree)/255;
intgreen=abs((127-g)*m_Degree)/255;
intblue=abs((127-b)*m_Degree)/255;
.
..
//使颜色对比度更加明显
if(r>127)r+=red;
el
r-=red;
if(g>127)
{
g+=green;
}
el
g-=green;
if(b>127)
{
b+=blue;
}
el
b-=blue;
if(r>255)r=255;
if(r<0)r=0;
if(g>255)g=255;
if(g<0)g=0;
if(b>255)b=255;
if(b<0)b=0;
m_tResPixelArray[i][j].rgbRed=r;
m_tResPixelArray[i][j].rgbGreen=g;
m_tResPixelArray[i][j].rgbBlue=b;
}
}
MakeBitMap();
UpdateData(true);
.
..
(2)效果图
图4-6原图像
.
..
图4-6对比度增强后效果图
.
..
第5章系统综合与测试
5.1系统综合
人脸识别应用程序采用VisualC++6.0作为开发工具,利用MFC采用面向
对象的方法,用C++语言编写程序。将面向对象的编程技术直接应用于图像处理
知识,并按功能进行细化,建立通用的类,从而减少了繁琐性,增加代码的可重
用性和可移植性,提高了效率。本设计中建立的多层次类结构都是可以修改和维
护的。所有的类都是开放的,可以向其中添加新方法以支持新功能,而不会对原
有功能构成任何威胁。本设计中建立的多层次类结构都是可以修改和维护的。所
有的类都是开放的,可以向其中添加新方法以支持新功能,而不会对原有功能构
成任何威胁。
5.2结构设计
图像预处理设计:
表5.1
函数功能
OnBtGray()图象灰度化
CalGray1(int,int,int)计算图象的灰度值
OnChangeEdit1()设置滑动条的初始值
OnReleadcaptureSlider()改变灰度变化
MakeBitMap()重置位图
SetRange()设置滑动条的范围
GetPos()得到滑动条的值
SetPos()设置滑动条的值
OnBUTTONSobel()实现Sobel边缘提取
OnCustomdrawSlider1()将滑动条的消息映射给文本框
.
..
各成员函数解析
函数名称:OnBtGray
参数:CSliderCtrlm_Slider----灰度滑动条的值
intm_Gray----编辑框的值
返回值:void
说明:该函数将编辑框的值映射给滑动条
函数名称:CalGray1
参数:intBlue----待求点像素的蓝色值
intGreen----待求点像素的绿色值
intRed----待求点像素的红色值
返回值:int----待求点的灰度值
说明:该函数计算某像素点的灰度值
函数名称:OnChangeEdit1
参数:CSliderCtrlm_Slider----灰度滑动条的值
intm_Gray----编辑框的值
返回值:void
说明:该函数将编辑框的值映射给滑动条
函数名称:OnReleadcaptureSlider
参数:void
返回值:void
说明:该函数将编辑框的值映射给滑动条
函数名称:MakeBitMap
参数:void
返回值:void
.
..
说明:重新设置位图
函数名称:SetRange
参数:intnMin----灰度滑动条的最小值
intnMax----灰度滑动条的最大值
BOOLbRedraw
返回值:void
说明:设置滑动条的最大最小值,确定滑动条的范围
函数名称:GetPos
参数:void
返回值:void
说明:得到滑动条的当前值
函数名称:SetPos
参数:intnPos----设置滑动条的值
返回值:void
说明:设置滑动条的值
函数名称:OnBUTTONSobel
参数:void
返回值:void
说明:设置滑动条的值
5.3系统测试
测试是为了找出程序的错误。正如测试的规则所确定的一样:测试是为了发
现程序中的错误而执行程序的过程;好的测试方案是极可能发现迄今为止尚未发
现的错误的测试方案;成功的测试是发现了迄今为止尚未发现的错误的测试。本
系统主要由图像处理、人脸定位、特征提取组成,而图像处理对于后面的工作结
果好坏起着至关重要的作用,因此从软件开发的最初阶段我们就要对软件进行不
断的测试,对图像处理模块中的各个子模块进行测试以便检测经过处理后的图像
.
..
效果是否达到预期的效果。下面对图像处理模块的测试过程进行描述:
图像处理模块:
该模块分为、图像变成灰色、对比度变换、实现图像对比度增强、Sboel边
缘提取。对该模块进行测试的方法是:采用多张24位的彩色图像来进行逐一测
试,看这些图片经过处理后是否达到预期的效果,如图像灰度化模块的检测则需
看所测的彩色图片是否变成灰色;而灰度变换就是为了调试图像最适合的灰度
级。图像对比度增强是为了将图像的特征一步一步显现出来,在测试的过程中,
用含人脸的图片进行检测看是否图像的特征显示出来的是否足够明显。
5.3.1测试原则
1、应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。
2、测试用例应由测试输入数据和与之对应的预期输出结果两部分组成。
3、程序员应避免检查自己的程序。(注意不是指对程序的调试)
4、在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。不合理
的输入条件是指异常的,临界的,可能引起问题异变的输入条件。
5、充分注意测试中的群集现象。经验表明,测试后程序残存的错误数目与该程
序中以发现的错误数目或检错率成正比。应该对错误群集的程序段进行重点测
试。
6、严格执行测试计划,排除测试的随意性。测试计划应包括:所测软件的功能,
输入和输出,测试内容,各项测试的进度安排,资源要求,测试资料,测试工具,
测试用例的选择,测试的控制方法和过程,系统的组装方式,跟踪规则,调试规
则,以及回归测试的规定等等以及评价标准。
7、应当对每一个测试结果做全面的检查。
8、妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护提供方便。
知道了测试的目的和测试的原则之后,现在进行软件的具体测试,对软件的功能
实现进行详细的测试。
.
..
第6章总结
经过几个月的毕业设计,对我各方面的影响都很大,对此我体会颇多。虽然
这次设计成品还存在着很多问题,但我从中学到了不少知识。在开发过程中遇到
的问题不计其数,其中最令人感到头痛的是一些不容易注意到的小错误,例如在
编写Sobel边缘提取这个按钮的时候,没有考虑到BMP图片的文件格式,所以
编写程序得到的效果一直不能达到预想的效果,后来通过请教我们小组做文件存
储这方面的成员才发现了这个错误;开发一个大的系统的时候,不管是个人还是
团队,必须作好需求分析,建立好数据库,如果需求分析不成功,那到后面是很
难做下去的,本系统的开发就遇到这样的情况,以至做了很多无用功,经常全部
从新部署。一个好的需求分析报告将给系统带来很大的惊喜,它会很大程度上减
少程序员的负担。
系统完成在后,发现做事情不但要独立自主的完成任务,也要通过周围的朋
友或是网络资料库等获取信息,只有大量的使用周围方便的活资源,而不只依赖
与书本上的例子,才能得到更大的进步,做起事情来才有事半功倍的效果。
本次毕业设计是针对我们大学四年来所学知识而进行的一次全面性的检验,
它涵盖的知识面广,涉及到多个领域,需要我们具有较高的综合知识水平及较强
的解决问题的能力。同时也是对我们工作能力,团队合作精神的一次考验。通过
这次设计,一方面让我更进一步的熟悉和掌握了C++语言的基本语法以及更深入
的了解了算法和VisualC++开发工具的使用。另一方面在动手能力上有了很大的
提高,以前学的知识只是“知识”,而现在是将“知识”转化成自身的本领,全
面提高了自身解决具体问题的能力。
.
..
致谢
本论文是在黄老师悉心指导下完成的。从论文的选题,文献的查找到实验的
设备和设计,黄老师都给予了亲切的指导。在此深深感谢黄老师给予学生学业上
的教导和生活上的关怀,老师严谨的治学态度和一丝不苟的工作作风给我极大的
影响,不仅使我在静心完成论文的研究工作,而且也将勉励我今后刻苦学习和积
极工作。同时本人对未知新理论的兴趣和积极探索,也很多来自于和导师交谈受
到的启发。感谢我的父母和同学,他们的鼓励和支持是我踏实求学勤奋钻研的动
力。大学四年时间是我人生的一个重要的阶段,在此期间,我所取得的每一滴进
步无不得益于师长的教诲、朋友的帮助。为此,我要诚挚地向他们表达深深的谢
意。
.
..
参考文献
[1]陆宗骐,金登男,VisualC++图像处理编程,北京:清华大学出版社,
2006.
[2]周长发,精通VisualC++图像编程.北京:电子工业出版社,2000
[3]徐建华,图象处理与分析.北京:科学出版社,1992
[4]陈元琰,VisualC++MFC类库应用详解.北京:科学出版社,2004
[5]张翠平,苏光大人脸识别技术综述中国图像图形学报2000年11期
[6]向世明,VisualC++数字图像与图形处理.北京:电子工业出版社,2002
[7]陈其杰,张桂林。人脸外轮廓线的提取方法。红外与激光工程,2001
[8]滕振字,孟祥旭,杨承磊.基于有向图的边界表示模型与重描算法.工程图
学学报.2000.1.6.
[9]MilanSonka,VaclavHlavac,RogerBoyle,ImageProcessingAnalysis
andMachineVision(SECONDEDITION).ThomsonLearningandPTPress,2003
[10]CamellHampton、TimPersons、ChrisWyatr、YaochunZhang,Surveyof
ImageSegmentation1999
.
..
本文发布于:2022-11-27 10:03:15,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/30326.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |