基于Matlab的人脸识别课程设计Word文件下载.docx
《基于Matlab的人脸识别课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于Matlab的人脸识别课程设计Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
![基于Matlab的人脸识别课程设计Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/24/c55506d8-9191-46bd-b8ea-7f3aa61dfdd2/c55506d8-9191-46bd-b8ea-7f3aa61dfdd21.gif)
2)国内的发展3
二、系统的需求分析和方案选择3
1.可行性分析3
1)技术可行性3
2)操作可行性4
2.需求分析4
3.预处理法案选择5
1)设计方案的原则选择5
2)图像文件格式选择5
3)开发工具选择5
4)算法选择分析6
三、系统概要设计7
四、系统详细设计9
1.系统整体设计流程图9
2.图像处理详细设计10
3.编程时的问题解决19
五、测试20
1.测试方案的选择原则21
2.测试方案21
结束语23
参考文献24
一、绪论
1.背景
随着安全入口控制和金融贸易方面应用需要的快速增长,生物统计识别技术得到了新的重视。
目前,微电子和视觉系统方面取得的新进展,使该领域中高性能自动识别技术的实现代价降低到了可以接受的程度。
而人脸识别是所有的生物识别方法中应用最广泛的技术之一,人脸识别技术是一项近年来兴起的,但不大为人所知的新技术。
人们更多的是在电影中看到这种技术的神奇应用:
警察将偷拍到的嫌疑犯的脸部照片,输入到电脑中,与警方数据库中的资料进行比对,并找出该嫌犯的详细资料和犯罪记录。
这并非虚构的情节。
在国外,人脸识别技术早已被大量使用在国家重要部门以及军警等安防部门。
在国内,对于人脸识别技术的研究始于上世纪90年代,目前主要应用在公安、金融、网络安全、物业管理以及考勤等领域。
2.人脸识别技术研究的意义
Ø
富有挑战性的课题
面部关键特征定位及人脸2D形状检测技术
面部感知系统的重要内容
3.发展史
1)国外的发展
见诸文献的机器自动人脸识别研究开始于1966年PRI的Bledsoe的工作,1990年日本研制的人像识别机,可在1秒钟内中从3500人中识别到你要找的人。
1993年,美国国防部高级研究项目署(AdvancedResearchProjectsAgency)和美国陆军研究实验室(ArmyResearchLaboratory)成立了Feret(FaceRecognitionTechnology)项目组,建立了feret人脸数据库,用于评价人脸识别算法的性能。
美国陆军实验室也是利用vc++开发,通过软件实现的,并且FAR为49%。
在美国的进行的公开测试中,FAR,为53%。
美国国防部高级研究项目署,利用半自动和全自动算法。
这种算法需要人工或自动指出图像中人的两眼的中心坐标,然后进行识别。
在机场开展的测试中,系统发出的错误警报太多,国外的一些高校(卡内基梅隆大学(CarnegieMellonUniversity)为首,麻省理工大学(MassachusettsInstituteofTechnology)等,英国的雷丁大学(UniversityofReading))和公司(Visionics公司Facelt人脸识别系统、Viiage的FaceFINDER身份验证系统、LauTech公司Hunter系统、德国的BioID系统等)的工程研究工作也主要放在公安、刑事方面,在考试验证系统的实现方面深入研究并不多。
2)国内的发展
人脸识别系统现在在大多数领域中起到举足轻重的作用,尤其是用在机关单位的安全和考勤、网络安全、银行、海关边检、物业管理、军队安全、智能身份证、智能门禁、司机驾照验证、计算机登录系统。
我国在这方面也取得了较好的成就,国家863项目“面像检测与识别核心技术”通过成果鉴定并初步应用,就标志着我国在人脸识别这一当今热点科研领域掌握了一定的核心技术。
北京科瑞奇技术开发股份有限公司在2002年开发了一种人脸鉴别系统,对人脸图像进行处理,消除了照相机的影响,再对图像进行特征提取和识别。
这对于人脸鉴别特别有价值,因为人脸鉴别通常使用正面照,要鉴别的人脸图像是不同时期拍摄的,使用的照相机不一样。
系统可以接受时间间隔较长的照片,并能达到较高的识别率,在计算机中库藏2300人的正面照片,每人一张照片,使用相距1--7年、差别比较大的照片去查询,首选率可以达到50%,前20张输出照片中包含有与输入照片为同一人的照片的概率可达70%。
2005年1月18日,由清华大学电子系人脸识别课题组负责人苏光大教授主持承担的国家"
十五"
攻关项目《人脸识别系统》通过了由公安部主持的专家鉴定。
鉴定委员会认为,该项技术处于国内领先水平和国际先进水平。
二、系统的需求分析和方案选择
在开发该人脸识别软件之前,我们查询了前人所写过的诸多论文以及源程序,在开发之时,结合了资料中的算法并揉进了自己的一些思想,使程序可以对人脸图片进行简易识别。
1.可行性分析
1)技术可行性
图像的处理方法很多,我们可以根据需要,有选择地使用各种方法。
在确定脸部区域上,通常使用的方法有肤色提取。
肤色提取,则对脸部区域的获取则比较准确,成功率达到95%以上,并且速度快,减少很多工作。
图像的亮度变化,由于图像的亮度在不同环境的当中,必然受到不同光线的影响,图像就变得太暗或太亮,我们就要对它的亮度进行调整,主要采取的措施是对图像进行光线补偿。
高斯平滑:
在图像的采集过程中,由于各种因素的影响,图像中往往会出现一些不规则的随机噪声,如数据在传输、存储时发生的数据丢失和损坏等,这些都会影响图像的质量,因此需要将图片进行平滑操作以此来消除噪声。
灰度变换:
进行灰度处理,我们要保证图像信息尽可能少的丢失。
同样在进行灰度变换前,我们也要对图像的信息进行统计,找出一个比较合理的灰度值,才能进行灰度变换。
灰度均衡:
灰度变换后,就要进行灰度均衡,可以根据灰度分布来进行灰度均衡。
对比度增强:
将所要处理的区域和周围图像区域进一步拉开他们的对比度,使它们更加明显,主要通过像素的聚集来实现。
2)操作可行性
该人脸识别软件需要如下的运行环境:
CPU:
500M及以上;
内存:
64M及以上。
安装有Windows98、WindowsMe、Windows2000、WindowsNT等操作系统中的其中一种。
另还装有摄像头可进行随机拍照和识别。
因此,从操作可行性来看,只要系统用户的硬件软件设备满足以上条件,即可用该人脸识别软件进行人脸的识别。
2.需求分析
✧应用程序的功能需求分析
该软件最主要的功能就是要能识别出人脸,首先该系统需要对通过摄像头拍照而获取到的原始的人脸图片进行一系列处理才可进行下一步的工作,该处理过程也称图像预处理。
预处理这个模块在整个人脸识别系统的开发过程中占有很重要的地位,只有预处理模块做的好,才可能很好的完成后面的人脸定位和特征提取这两大关键模块。
因此本设计中所要完成的主要功能如下所述:
◆图像获取功能:
该模块主要是从摄像头拍照后进行获取图片,也可以从图片库中获取,获取后的图片可以在软件的界面中显示出来以便进行识别。
◆图像预处理功能:
该模块主要包括图像光线补偿、图像变成灰色、高斯平滑、均衡直方图、实现图像对比度增强、二值化变换等。
◆人脸定位功能:
该模块主要是将处理后的人脸图片进行定位,将眼睛、鼻子、嘴巴标记出来,以便进行特征提取。
◆特征提取功能:
该模块是在定位后的人脸图片中将眼睛、鼻子、嘴巴的特征值提取出来。
◆识别功能:
该模块是将从图片中提取的特征值和后台数据库中的值进行比较来完成识别功能。
3.预处理法案选择
1)设计方案的原则选择
本应用程序的设计方案原则如下:
采用较为先进的技术力量,保证应用程序在技术上具备一定的优势。
采用成熟的技术,保证应用程序的安全性和可靠性。
应用程序便于扩展和维护,易于技术的更新。
应用程序充分利用现有的资源,尽量减少不必要的再投资。
编写的代码必须严谨易读,代码的解释必须清楚明白,为应用程序的再开发提供应尽的责任。
2)图像文件格式选择
在设计的过程中,为了定位和特征提取的方便,我们采用的是24位位图。
3)开发工具选择
Matlab2012b
4)算法选择分析
本文主要研究的对象是图像预处理模块,该模块分为光线补偿、图像灰度化、高斯平滑、图像对比度增强、均衡直方图,每个小模块的实现都有许多相应的算法。
下面将本系统采用的算法进行介绍:
·
光线补偿:
由于光线原因,所照的图像可能会存在光线不平衡的情况而造成色彩偏差,为了抵消这种整个图像中存在的色彩偏差,本系统采用的解决方法是:
将整个图像中的所有像素的亮度从高到低进行排列,取前5%的像素,然后线性放大,使这些像素的平均亮度达到255。
实际上就是调整图片像素的RGB值。
图像灰度化:
图像灰度化是将图像变成灰色,本系统中采用以下步骤来实现图像的灰度化:
彩色转换成灰度、灰度比例变换、灰度线性变换、灰度线性截断、灰度取反。
但是如果平滑不当,就会使图像本身的细节如边界轮廓、线条等变的模糊不清,为了既平滑掉噪声有尽量保持图像细节,本系统采用高斯平滑。
均衡直方图:
使用该模块的目的是通过点运算使输入转换为在每一灰度级上都有相同的像素点数的输出图像。
它的实现主要是利用灰度均衡的转换式
DB=f(DA)=
H(u)du。
(式1)
图像对比度增强:
为了将图像的特征一步一步显现出来,需要进行图像的对比度增强,它主要通过对图像的灰度值进行统计,对于小于Low则认为是有关的信息,则将它作为黑色处理,对于处于High以上的则认为是一些无关的信息,将它们去掉,而处于两者之间的,则进行对比度增强,将他们在总的灰度值里面的比例作为新的像素信息保存起来。
三、系统概要设计
❆各模块功能概述
以上是该系统的总体结构设计图以及图像预处理模块的层次图。
下面介绍系统中的各模块的功能及算法:
✈图像获取模块
✈人脸区域获取
该系统中图像里人脸区域的获取,主要是根据肤色来进行获取,通过肤色非线形分段色彩变换来实现。
这一非线性分段色彩变换得到的肤色模型属于色彩空间中的聚类模型,这一类肤色模型的建立首先要选取一种合适的色彩空间。
✈图像预处理模块
图像预处理就是对获取得来的图像进行适当的处理,使它具有的特征能够在图像中明显的表现出来。
该模块中的子模块有如下5个,下面对它们进行概述:
光线补偿[3]
因为系统得到的图片可能会存在光线不平衡的情况,这会影响我们对特征的提取,同时系统中要用到YcrCB色彩空间,所以有必要对图像进行光线补偿。
尽可能将它的特征在图像中表现出来。
YcrCB是一种色彩空间,它用于视频系统中,在该色彩空间中,Y分量表示像素的亮度,Cr表示红色分量,Cb表示蓝色分量,通常把Cr和Cb称为色度。
YcrCB色彩空间是以演播室质量标准为目标的CC601编码方案中采用的彩色表示模型。
灰度变化[4]
图像灰度化的过程就是把彩色图像转换为黑白色图像的过程,它也是为了将图像的信息更加具体、简单的表现出来,但是,这样做也将会丢失图像信息。
因此,尽可能在转化的过程中用简单的方式表现图像复杂的信息。
高斯平滑处理[5]
高斯平滑将对图像进行平滑处理,在图像采集过程中,由于各种因素的影响,图像往往会出现一些不规则的噪声,入图像在传输、存储等都有可能产生数据的丢失。
从而影响图像的质量。
处理噪声的过程称为平滑。
平滑可以降低图像的视觉噪声,同时出去图像中的高频部分后,那些本来不明显的低频成分更容易识别。
平滑可以通过卷积来实现。
经过卷积平滑后的水平投影后,二值化提供了较好的图像效果。
对比度增强[6]
对比度增强,就是对图像的进一步处理,将对比度再一次拉开。
它针对原始图像的每一个像素直接对其灰度进行处理的,其处理过程主要是通过增强函数对像素的灰度级进行运算并将运算结果作为该像素的新灰度值来实现的。
通过改变选用的增强函数的解析表达式就可以得到不同的处理效果。
二值化[7]
二值化的目的是将采集获得的多层次灰度图像处理成二值图像,以便于分析理解和识别并减少计算量。
二值化就是通过一些算法,通过一个阈值改变图像中的像素颜色,令整幅图像画面内仅有黑白二值,该图像一般由黑色区域和白色区域组成,可以用一个比特表示一个像素,“1”表示黑色,“0”表示白色,当然也可以倒过来表示,这种图像称之为二值图像。
这便有利于我们对特征的提取。
该设计中采用组内方差和组外方差来实现二值化。
直方图均衡[8]
直方图均衡化的目的是使一输入图像转换为在每一灰度级上都有相同的象素点数,它的处理的中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布,它的研究思路是:
通过直
方图变换式来进行直方图的均衡处理,直方图变换式是
✧但是直方图均衡化存在着两个缺点:
变换后图像的灰度级减少,某些细节消失;
某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
✈人脸定位模块
人脸定位是将典型的脸部特征(如眼睛,鼻尖,嘴唇等等)标记出来,在本系统中,定位的特征是眼睛,鼻尖和嘴巴三个。
由于眼睛具有对称性,因此可以很快就能标记出来,而鼻子是在眼睛下面,且嘴巴在鼻子下面,所以只要眼睛标记好,鼻子和嘴巴也能相应的标记出来。
✈特征提取模块
特征提取按以下4个步骤进行:
✧提取两只眼睛的距离
✧眼睛的倾角度
✧眼睛、嘴巴的重心
✧用一个矩形标出每一个特征
在特征提取完之后将会得到相应的特征值以便存入后台数据库。
✈识别模块
该模块通过与库存中的特征向量进行比较,找出与特征最相近的参数,再对该参数进一步分析。
如果分析在我们所确认的范围内,我们就认为该人就是我们所要找的。
然后从库存中提取出该人相关的信息,并显示出来。
如果库存中没有,则给出提示是否对存库作为样本。
四、系统详细设计
1.系统整体设计流程图
输入
2.图像处理详细设计
图像点运算是一种既简单又重要的技术,它能让用户改变图像数据占据的灰度范围,一幅输入图像经过点运算后将产生一幅新的输出图像,由输入像素点的灰度值决定相应的输出像素点的灰度值,点运算与局部运算的差别在于:
后者每个输出像素的灰度值由对应输入像素的一个领域内几个像素的灰度值决定。
所以,点运算不可以改变图像内的空间关系。
点运算可以按照预定的方式改变一幅图的灰度直方图。
除了灰度级的改变是根据某种特定的灰度变换函数进行之外,点运算可以看作是“从像素到像素”的复制操作。
如果输入图像为A(x,y),输出图像为B(x,y),则点运算可表示为:
B(x,y)=f[A(x,y)](式2)
其中函数f(D)被称为灰度变换(GrayScaleTransformation,GST)函数,它描述了输入灰度值和输出灰度值之间的转换关系,一旦灰度变换函数确定,该点运算就完全被确定下来了。
点运算有时又称为对比度增强、对比度拉伸或灰度变换,它是图像数字化软件和图像显示软件的重要组成部分。
下面将对本设计解决各图像点处理模块运用进行到的理论和编程实现进行详细讲述。
(1)光线补偿
(1)算法思想:
光线补偿的想法的提出主要是考虑到肤色等色彩信息经常受到光源颜色、图像采集设备的色彩偏差等因素的影响,而在整体上偏离本质色彩而向某一方向移动,即我们通常所说的色彩偏冷、偏暖、照片偏黄、便蓝等等。
这种现象在艺术照片中更为常见。
所以AnilK.Jain等提出,为了抵消这种整个图像中存在着的色彩偏差,我们将整个图像中所有像素亮度(是经过了非线形r-校正后的亮度)从高到低进行排列,取前5%的像素,如果这些像素的数目足够多(例如,大于100),我们就将它们的亮度作为“参考白”(ReferenceWhite),也即将它们的色彩的R、G、B分量值都调整为255。
整幅图像的其他像素点的色彩值也都按这一调整尺度进行交换。
(2)具体实现光线补偿功能:
明白了光线补偿这功能的算法及思想,就可以编码实现其功能了,实现过程如下:
①、编辑菜单IDR_MAINFRAM,先在其中添加一菜单项,将其命名为“预处理”,并在其属性栏中将其设为“弹出”菜单,点击预处理该菜单项将会弹出一个新的子菜单,此时把该子菜单命名为“光线补偿”,并把其ID设为ID_READY_LIGHTINGCONPENSATE,对应文件FaceDetectView.Cpp中的函数ReadyLightingconpensate()实现,并在voidCFaceDetectView:
:
OnReadyLightingconpensate()中添加如下代码:
hDIBTemp=gDib.CopyHandle(hDIB);
gDib.LightingCompensate(hDIB);
GlobalUnlock(hDIB);
Invalidate();
光线补偿功能实质上是用上段代码中的LightingCompensate()函数来进行实现。
函数LightingCompensate()是类DIB的一个成员函数。
其核心代码如下所述:
//下面的循环对图像进行光线补偿
for(i=0;
i<
height;
i++)
for(intj=0;
j<
width;
j++)
{
//获取像素偏移
lOffset=this->
PixelOffset(i,j,wBytesPerLine);
//得到蓝色分量
*(lpData+lOffset)=colorb;
//绿色分量
colorb=*(lpData+lOffset+1);
colorb*=co;
if(colorb>
255)
colorb=255;
*(lpData+lOffset+1)=colorb;
//红色分量
colorb=*(lpData+lOffset+2);
*(lpData+lOffset+2)=colorb;
}
②光线补偿的效果图如下所示:
图4-1原图
图4-2光线补偿效果图
(2)2、图像灰度化
(1)算法思想
①彩色转换成灰度
将彩色图像转化为灰阶图像常采用如下的经验式:
gray=0.39×
R+0.50×
G+0.11×
B(式3)
其中,gray为灰度值,R、G、B分别为红色、绿色和蓝色分量值。
②灰度比例变换
灰度比例变换是把原像素的灰度乘以一个缩放因子,并最后截至[0,255]。
③灰度线性变换
当图像由于成像时曝光不足或曝光过度,会产生对比度不足的弊病,从而使图像中的细节分辨不清。
将图像灰度进行线性扩展,常能显著地改善图像的外观。
灰度线性变换的计算式