基于matlab的人脸识别系统设计与仿真(含源文件) - 图文

更新时间:2023-12-21 11:18:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

第一章 绪论 ........................................................ 2

1.1 研究背景 .................................................... 2 1.2 人脸图像识别的应用前景 ...................................... 3 1.3 本文研究的问题 .............................................. 4 1.4 识别系统构成 ................................................ 4 1.5 论文的内容及组织 ............................................ 6 第二章 图像处理的Matlab实现 ....................................... 7

2.1 Matlab简介 .................................................. 7 2.2 数字图像处理及过程 .......................................... 7

2.2.1图像处理的基本操作 ..................................... 7 2.2.2图像类型的转换 ......................................... 8 2.2.3图像增强 ............................................... 8 2.2.4边缘检测 ............................................... 9 2.3图像处理功能的Matlab实现实例 ................................ 9 2.4 本章小结 ................................................... 13 第三章 人脸图像识别计算机系统 ..................................... 14

3.1 引言 ....................................................... 14 3.2系统基本机构 ................................................ 15 3.3 人脸检测定位算法 ........................................... 15

3.4 人脸图像的预处理 ........................................... 22

3.4.1 仿真系统中实现的人脸图像预处理方法 .................... 23

第四章 基于直方图的人脸识别实现 ................................... 26

4.1识别理论 .................................................... 26 4.2 人脸识别的matlab实现 ...................................... 26 4.3 本章小结 ................................................... 27 第五章 总结 ....................................................... 28 致谢 .............................................................. 29 参考文献 .......................................................... 30 附录 .............................................................. 32

1

第一章 绪论

本章提出了本文的研究背景及应用前景。首先阐述了人脸图像识别意义;然后介绍了人脸图像识别研究中存在的问题;接着介绍了自动人脸识别系统的一般框架构成;最后简要地介绍了本文的主要工作和章节结构。

1.1 研究背景

自70年代以来.随着人工智能技术的兴起.以及人类视觉研究的进展.人们逐渐对人脸图像的机器识别投入很大的热情,并形成了一个人脸图像识别研究领域,.这一领域除了它的重大理论价值外,也极具实用价值。

在进行人工智能的研究中,人们一直想做的事情就是让机器具有像人类一样的思考能力,以及识别事物、处理事物的能力,因此从解剖学、心理学、行为感知学等各个角度来探求人类的思维机制、以及感知事物、处理事物的机制,并努力将这些机制用于实践,如各种智能机器人的研制。人脸图像的机器识别研究就是在这种背景下兴起的,因为人们发现许多对于人类而言可以轻易做到的事情,而让机器来实现却很难,如人脸图像的识别,语音识别,自然语言理解等。如果能够开发出具有像人类一样的机器识别机制,就能够逐步地了解人类是如何存储信息,并进行处理的,从而最终了解人类的思维机制。

同时,进行人脸图像识别研究也具有很大的使用价依。如同人的指纹一样,人脸也具有唯一性,也可用来鉴别一个人的身份。现在己有实用的计算机自动指纹识别系统面世,并在安检等部门得到应用,但还没有通用成熟的人脸自动识别系统出现。人脸图像的自动识别系统较之指纹识别系统、DNA鉴定等更具方便性,因为它取样方便,可以不接触目标就进行识别,从而开发研究的实际意义更大。

2

并且与指纹图像不同的是,人脸图像受很多因素的干扰:人脸表情的多样性;以及外在的成像过程中的光照,图像尺寸,旋转,姿势变化等。使得同一个人,在不同的环境下拍摄所得到的人脸图像不同,有时更会有很大的差别,给识别带来很大难度。因此在各种干扰条件下实现人脸图像的识别,也就更具有挑战性。

国外对于人脸图像识别的研究较早,现己有实用系统面世,只是对于成像条件要求较苛刻,应用范围也就较窄,国内也有许多科研机构从事这方而的研究,并己取得许多成果。

1.2 人脸图像识别的应用前景

人脸图像识别除了具有重大的理论价值以及极富挑战性外,还其有许多潜在的应用前景,利用人脸图像来进行身份验证,可以不与目标相接触就取得样本图像,而其它的身份验证手段,如指纹、眼睛虹膜等必须通过与目标接触或相当接近来取得样木,在某些场合,这些识别手段就会有不便之处。

就从目前和将来来看,可以预测到人脸图像识别将具有广阔的应用前景,如表1-1中所列举就是其中已经实现或逐步完善的应用。

表1-1 人脸识别的应用

应用 信信用卡、汽车驾照、护照以及个人身份验证等 嫌疑犯照片匹配 优点 图像摄取可控 图像分割可控 图像质量好 图像质量不统一 多幅图像可用 潜在的巨大图像库 存在问题 需要建立庞大的数据库 3

互联网应用 视频信息价值高多人参与 存在虚假 银行/储蓄安全 监控效果好 图像分割不可控 图像质量较差 人群监测 图像质量高 可利用摄像图像 图像分割自由 图像质量低、实时性

1.3 本文研究的问题

本文介绍了人脸图像识别中所应用MATLAB对图像进行预处理,应用该工具箱对图像进行经典图像处理,通过实例来应用matlab图像处理功能,对某一特定的人脸图像处理,进而应用到人脸识别系统。本文在总结分析人脸识别系统中几种常用的图像预处理方法基础上,利用MATLAB实现了一个集多种预处理方法于一体的通用的人脸图像预处理仿真系统,将该系统作为图像预处理模块可嵌入在人脸识别系统中,并利用灰度图像的直方图比对来实现人脸图像的识别判定。

其中涉及到图像的选取,脸部定位,特征提取,图像处理和识别几个过程。

1.4 识别系统构成

人类似乎具有“与生俱来”的人脸识别能力,赋予计算机同样的能力是人类的梦想之一,这就是所谓的“人脸识别”系统。假设我们把照相机、摄像头、扫描仪等看作计算机的“眼睛”,数字图像可以看作计算机观察到的“影像”,那么AFR赋予计算机根据其所“看到”的人脸图片来判断人物身份的能力。

4

3.2系统基本机构

人脸识别是一个复杂的过程,一个计算机人脸识别的流程如图3-1所示。它包括几个步骤:对采集到的图像,首先进行人脸检测(在输入图像中寻找人脸),给出人脸有无的结果;然后进行人脸定位,确定人脸的位置并提取出来。对人脸的定位在输入是图像序列时一般也称之为人脸跟踪。通常检测和定位结合进行。对提取出来的人脸借助人脸描述就可以进行(狭义的)人脸识别,即通过提取特征来确定其身份。

开始图像采集人脸检测定位是否定位成功否否是图像与处理是否处理成功否否是是人脸识别是否识别成功否否是是识别结果结束

图3.1 基本框架图

3.3 人脸检测定位算法

人脸检测定位算法大致可分为两大类:基于显式特征的方法和基于隐式特征的方法。

所谓显式特征是指对人类肉眼来说直观可见的特征,如肤色、脸部轮廓、脸

15

部结构等。基于显式特征的方法是指由人通过肉眼观察,总结出人脸区别于“非人脸”区域的特征,然后根据被检测区域是否满足这些“人脸特征”,来判定该区域是否包含人脸。根据所选择的“人脸特征”,基于显式特征的方法分以下三类:基于肤色模型的方法、模板匹配的方法、基于先验知识的方法。

在彩色图像中,颜色是人脸表面最为显著的特征之一,利用颜色检测人脸是很自然的想法。Yang等在考察了不同种族、不同个体的肤色后,认为人类的肤色能在颜色空间中聚成单独的一类,而影响肤色值变化的最主要因素是亮度变化。因此他们采用广泛使用的RGB颜色空间,在滤去亮度值的图像中通过比较像素点的r、g值与肤色范围来推断该像素点及其邻域是否属于人脸区域。除了RGB颜色空间,还有诸如HIS,LUV,GLHS等其它颜色空间被使用。寻找到肤色区域后,必须进行验证,排除类肤色区域。Yoo等利用肤色像素的连通性分割出区域,使用椭圆拟合各个区域,根据椭圆长短轴的比率判断是否为人脸。

模板匹配的方法一般是人为地先定义一个标准人脸模板,计算输入图像与模板的似然度;然后,确定一个似然度阈值,用以判断该输入图像中是否包含人脸。标准人脸模板可以是固定的样板,也可以是带参变量的曲线函数。

基于先验知识的方法则采用符合人脸生理结构特征的人脸镶嵌图(mosaic image)模型,并在分析了足够多的人脸图像样本的基础上,针对人脸的灰度、边缘、纹理等信息,建立一种关于人脸的知识库。在检测中,首先抽取这些灰度、边缘等信息,然后检验它是否符合知识库中关于人脸的先验知识。

以上三种方法的优缺点比较见表3-1。

16

表3-1 基于显示特征方法的特点 检测方法 优点与适用场合 缺点与需要改进的地方 高光和阴影会造成人脸区域被分割而肤色模型 检测速度快 被漏检;肤色区域的存在提高了预警率 直观性好,具有较好的对表情、尺度变换敏感;可变模板的模板匹配 适应性 选择和参数的确定非常困难 基于知识的方适用复杂图像中的人脸依赖先验知识;多尺度空间遍历工作法

基于隐式特征的方法将人脸区域看成一类模式,使用大量“人脸”、“非人脸”样本训练、构造分类器,通过判别图像中所有可能区域是否属于“人脸模式”的方法来实现人脸检测。这类方法有:特征脸法、人工神经网络法、支持向量机法;积分图像法。

特征脸法(eigenface)把单个图像看成一维向量,众多的一维向量形成了人脸图像特征空间,再将其变换到一个新的相对简单的特征空间,通过计算矩阵的特征值和特征向量,利用图像的代数特征信息,寻找“人脸”、“非人脸”两种模式在该特征空间中的分布规律。

人工神经网络(Artificial Neural Network,ANN)的方法是通过训练一个

17

检测 量大,运算时间长

网络结构,把模式的统计特性隐含在神经网络的结构和参数之中。基于人工神经网络的方法对于复杂的、难以显式描述的模式,具有独特的优势。

支撑向量机(Support Vector Machine,SVM)法是在统计学习理论基础上发展出的一种新的模式识别方法,它基于结构风险最小化的原理,较之于基于经验风险最小化的人工神经网络,一些难以逾越的问题,如:模型选择和过学习问题、非线性和维数灾难问题、局部极小点问题等都得到了很大程度上的解决。但是直接使用SVM方法进行人脸识别有两方面的困难:第一,训练时需要求解二次规划问题计算复杂度高,内存需求量巨大;第二,在非人脸样本不受限制时,需要极大规模的训练集合,得到的支持向量会很多,使得分类器的计算量过高。

基于积分图像(Integral Image)特征的人脸检测方法是Viola等新近提出的一种算法,它综合使用了积分图像描述方法、Adaboost学习算法及训练方法、级联弱分类器。

以上四种方法的优缺点比较见表3-2 表3-2 基于隐式特征方法的特征 检测方法 优点 缺点与需要改进的地方 标准人脸模板能抽象人脸全部信但模板检测效率低,多模板提本征脸法 息,运算不涉及迭代耗费时间短 高了效率也增加了检测时间 神经网络检测效率高,错误报警数目不多,多样本训练耗费时间多,但网法 训练成熟的网络监测速度快 络监测错误报警数目多 比神经网络方法具有更好的泛化“非人脸”样本复杂多样,造支撑向量能力,能对为观测到的例子进行有成支持向量数目多,运算复杂机机法 效分类 度大 18

基于积分检测速度快,基本满足实时检测要错误报警数目少时,检测率不图像分析求,检测效率可以与神经网络法比高 法 较 运用matlab仿真进行人脸检测定位实例: 人脸检测定位程序:

%%%%% Reading of a RGB image

i=imread('face1.jpg'); I=rgb2gray(i); BW=im2bw(I); figure,imshow(BW)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% minimisation of background portion

[n1 n2]=size(BW); r=floor(n1/10); c=floor(n2/10); x1=1;x2=r; s=r*c;

19

for i=1:10 y1=1;y2=c; for j=1:10

if (y2<=c | y2>=9*c) | (x1==1 | x2==r*10) loc=find(BW(x1:x2, y1:y2)==0); [o p]=size(loc); pr=o*100/s; if pr<=100

BW(x1:x2, y1:y2)=0; r1=x1;r2=x2;s1=y1;s2=y2; pr1=0; end imshow(BW); end

y1=y1+c; y2=y2+c; end x1=x1+r; x2=x2+r; end

figure,imshow(BW)

20

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% detection of face object

L = bwlabel(BW,8);

BB = regionprops(L, 'BoundingBox'); BB1=struct2cell(BB); BB2=cell2mat(BB1);

[s1 s2]=size(BB2); mx=0;

for k=3:4:s2-1

p=BB2(1,k)*BB2(1,k+1);

if p>mx & (BB2(1,k)/BB2(1,k+1))<1.8 mx=p; j=k; end end

figure,imshow(I); hold on;

rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','r' )

21

均衡化灰度图片 人脸定位

3.4 人脸图像的预处理

不同的人脸识别系统根据其采用的图像来源和识别算法需要不同,采用的预处理方法也不同。常用的人脸图像预处理方法有:滤波去噪、灰度变换、图像二

22

值化、边缘检测、尺寸归一化、灰度归一化等。用在同一系统中的可能只有其中一种或几种预处理方法,但一旦库中采集到的原始图像质量发生较大变化(如人脸大小、光照强度、拍摄条件、成像系统等方面变化),原有的预处理模块便不能满足特征提取的需要,还要更新,这是极不方便的。鉴于此,作者在总结分析了滤波去噪、边缘检测、灰度变换三种广泛应用于不同人脸识别系统中的预处理方法基础上,设计了一个通用的人脸图像预处理仿真系统。该系统可对不同条件下的原始图像进行相应的预处理。如,用户可根据需要选择使用不同的滤波方法去除噪声、不同的边缘检测算子检测人脸边缘、选择不同的灰度变换算法实现图像的灰度校正和灰度归一化,仿真系统同时还实现了尺寸归一化、二值化等其他常用的图像预处理算法。

3.4.1 仿真系统中实现的人脸图像预处理方法

根据所查阅文献资料,常应用于人脸图像的预处理方法有:图像类型转换、滤波去噪、灰度变换、边缘检测及二值化、尺寸归一化、灰度归一化等。作为通用人脸图像预处理模块,要能够充分适应不同人脸库中图像在人脸大小、光照强度、成像系统等方面的任意性和差异性,不能单独采用某种单一的滤波、灰度变换和边缘检测方法。所以,在本仿真系统中,对上述的每种预处理方法全部加以实现的同时,还对三种最常用预处理方法:滤波去噪、灰度变换、边缘检测,提供了多种不同的具体算法供用户比较、选择之用。

1)滤波去噪

由于噪声给图像带来的失真和降质,在特征提取之前采用滤波的方式来去除噪声是实际人脸识别系统中所必须的步骤。滤波的方法有很多,如各种平滑滤波、

23

各种锐化滤波等,关于各种滤波方法的原理和分类可参考文献[2]。下面对本文实现的滤波方法及其选择依据加以说明。在人脸图像预处理中使用较多的滤波是平滑滤波,方法可分为以下三类:线性滤波、中值滤波、自适应滤波。

(1)线性滤波最典型的线性滤波方法如,采用邻域平均法的均值滤波器、采用邻域加权平均的高斯滤波和维纳滤波。对图像进行线性滤波可以去除图像中某些特定类型的噪声,如图像中的颗粒噪声,高斯噪声、椒盐噪声等。对扫描得到的人脸图像根据其噪声类型一般采用此种滤波方法。考虑滤波模板大小对滤波效果影响较大,仿真系统选择算法时对同种滤波算法提供了不同模板大小的情况。

(2)中值滤波法中值滤波法是一种非线性滤波方法,它把像素及其邻域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值。中值滤波方法的最大优点是抑制噪声效果明显且能保护边界。对于使用基于整体的人脸识别算法的系统中,由于失掉小区域的细节对特征提取影响较小,所以这种滤波方法最受欢迎。

(3)自适应滤波自适应滤波能够根据图像的局部方差来调整滤波器的输出,其滤波效果要优于线性滤波,同时可以更好地保存图像的边缘和高频细节信息。

2)灰度变换

灰度变换是图像增强技术中的一种。通过灰度变换,可对原始图像中的光照不均进行补偿,使得待识别人脸图像遵循同一或相似的灰度分布。只有这样,不同图像在特征提取和识别时才具有可比性。这一过程,也被称作灰度归一化。常用在人脸识别系统中的灰度变换方法主要有:基于图像统计特征的直方图均衡化、直方图规定化和灰度均值方差标准化三种方法。直方图均衡化和直方图规定

24

化的灰度变换原理和实现方法可由matlab仿真来实现。

三种灰度变换方法,均能在一定程度上消除由于光照条件不同而对人脸识别带来的影响。故在仿真系统中提供了三种灰度变换效果比较及选择界面,用户可根据需要选用。

3)边缘检测

对输入人脸图像进行边缘检测是很多人脸识别系统在人脸粗定位及人脸主要器官(眼睛、鼻子、嘴巴)定位时采用的预处理方法。边缘检测的方法有很多,主要有:微分算子法、Sobel算子法、拉普拉斯算子法、canny算子法等。每种算子对不同方向边缘的检测能力和抑制噪声的能力都不同。所以,和灰度变换及滤波去噪部分的设计思路相同,在仿真系统中,笔者给出了canny、sobel、log、prewitt四种算子在不同灰度阈值下、不同方向的边缘检测算法,使用者可从检测结果中加以比较、选择合适的算法。图像类型转换、图像二值化、尺寸归一化也是一些人脸识别系统中经常使用的预处理方法。为了在不修改其他算法的基础上,扩大系统处理图像的类型和范围,将输入图像首先转换为统一的类型,是多数人脸图像预处理中的第一步。在本仿真系统中通过调用MATLAB中提供的各种图像类型转换函数来实现TIF、JPG转换为BMP格式及彩色到灰度图像的转换;对图像二值化,采用了graythresh()函数来自动选择阈值的二值化方法[1];尺寸归一化采用的算法是对人脸图像进行剪裁和尺寸缩放,实现去除大部分头发、服饰和背景的干扰并将人脸图像大小统一。

25

第四章 基于直方图的人脸识别实现

4.1识别理论

用灰度直方图增强图像对比度是基于图像灰度值统计的一种重要方法,它以概率论为基础的,常用的实现算法主要是直方图均衡化和直方图规定化。

直方图均衡化主要用于增强动态范围较小的图像的反差,基本思想是把原始图的直方图变换为均匀分布的形式,这样就增强了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。直方图均衡化的优点是能自动地增强整个图像的对比度,但它的具体的增强效果不好控制,处理的结果总是得到全局均衡化的直方图。实际中有时需要变换直方图使之成为某个需要的形状,从而有选择地增强某个灰度值范围内的对比度或使图像灰度值的分布满足特定的要求,这时可以采用比较灵活的直方图规定化方法。

4.2 人脸识别的matlab实现

26

图4.1 用户界面 图4.2 实现结果

4.3 本章小结

在过去十年中基于直方图方法证其明简单性和有用性。 最初这种想法基于颜色直方图。 此算法提供我们的建议技术名为\直方图处理人脸识别\的第一部分。同时使用灰度图像。 第一,每个灰度级的频率是计算并存储在媒介作进一步处理。 第二,平均从存储载体的连续九个频率的计算,并存储在另一个载体,供以后使用,在测试阶段。 此均值向量用于计算平均值的曾受训练的图像和测试图像绝对差异。 最后确定最小差异的图像与测试图像匹配, 识别的准确性是 99.75%

27

第五章 结语

基于matlab数字图像处理与识别系统其实是一个范围很大的应用系统,作者在此只是有针对性、有选择地进行了一些开发和实现。

该系统的主要功能模块共有二个:(1)数字图像处理的基本方法;(2)人脸识别。

在“数字图像处理的基本方法”这一部分,用到的一些基本方法和一些最常用的处理方法来实现图像预处理,如格式转换,灰度变化和滤波锐化。仅就这一部分而言,就有很多可以继续完成的工作,可将其它一些数字图像处理方法进一步加以实现,如图像的平滑,图像矩阵的变换(K-L变换、Fourier变换、小波变换等),图像的膨胀腐蚀、图像的几何变换(平移、旋转、缩放等),以及各种编码图像的读写与显示。仅这一部分即可形成一个专用的图像处理平台。

关于“人脸识别”,在了解了人脸识别的各种方法后,选择了图像直方图差值比较进行了实现。该方法能较好地实现人脸的分类,但对人脸图像的要求较高,目前仅是采用Orl的标准人脸库中的图像来进行测试,因此能获得较高的识别率。而在现实生活中采集到的人脸图像则会受到很多因素的影响,识别率就未必能达到要求了。若要进一步提高识别率和适用范围,则还需要结合其它算法,如PCA、神经网络等。

28

致谢

在××大学的学习生活即将结束,在做毕业设计的这段时间里,我的老师、同学、朋友和家人给予了我无微不至的关心,毫无保留的指导和耐心细致的帮助,借此毕业论文完成之际,谨向他们致以我最真诚的感谢!

首先,我衷心感谢我的导师林森老师。林老师学识渊博、治学严谨、平易近人,他以其宽广的视野、敏锐的洞察力、严谨的治学态度在学术上给了我悉心的指导。论文进展并不顺利时,是林老师以长者的仁爱胸怀对我表示了理解,不仅帮我指正了论文的方向,而且为我提供了大量的参考文献和网页论坛,导师勤勉的敬业精神和一丝不苟的工作态度使我深深感动,这将是我一生工作和学习的好榜样。

其次,我还要特别感谢我的同学范红杰以及杜锋,他们不仅为我提供了部分MATLAB编程代码,还细心的给我讲解了代码的含义,让我对我的课题有了更加深入的了解。

最后,我要感谢我的父母和家人,他们这么多年来一直给我以无私的关爱和支持,浓浓的亲情和期盼都是我学习的动力和源泉。

再次真心的感谢所有关心爱护我的良师益友和亲人们

29

参考文献

[1] 祝磊,朱善安.人脸识别的一种新的特征提取方法[J].计算机学报,2007,34(6):122-1251

[2] 何东风,凌捷.人脸识别技术综述[J].计算机学报,2003,13(12)75-78 [3] ,Younus Fazl-e-Basit Javed和Usman Qayyum”,采用直方图的人脸识别

和处理”,第三阶段仅相关新兴技术研报告。

[4] 何国辉,甘俊英.PCA-LDA算法在性别鉴别中的应用[J].中国图像图形学报,2006,32(19):208-211.

[5] 王聃,贾云伟,林福严.人脸识别系统中的特征提取[J].自动化学报,2005,

21(7-3).

[6] 张俭鸽,王世卿,盛光磊.基于小波和DFB-PCA的人脸识别算法研究[J].自动化学报,2007,23(2-1).

[7] 曹林,王东峰,刘小军,邹谋炎.基于二维Gabor小波的人脸识别算法[J].电子学报,2006,28(3)490-494

[8] 焦峰,山世光,崔国勤,高文,李锦涛.基于局部特征分析的人脸识别方法[J].自动化学报,2003,15(1):53-58

[9] Wangmeng Zuo,Kuanquan Wang,David Zhang,Hongzhi Zhang. Combination

of two novel LDA-based methods for face recognition[C].Proceedings of the IEEE,2007:735-742

[10] 徐倩,邓伟.一种融合两种主成分分析的人脸识别方法[J].计算机学报,

2007,43(25):195-197

[11] 刘贵喜,杨万海.基于小波分解的图像融和方法及性能评价[J].自动化学

30

报,2002,28(6):927-934

[12] 周嫔,马少平,苏中.多分类器合成方法综献[J].自动化学报,2000,28(1):122-124

[13] 王蕴红,范伟,谭铁牛.融合全局与局部特征的子空间人脸识别算法[J].

电子学报,2005,28(10):1657-1662

[14] 庄哲民,张阿妞,李芬兰.基于优化的LDA算法人脸识别研究[J].中国图像

图形学报,2007,29(9):2047-2049

[15] 钟向阳.基于Gabor小波的人脸识别系统的实现[J].中国图像图形学报,2005,23(3)

[16] 张燕昆,刘重庆.一种新颖的基于LDA的人脸识别方法[J].自动化学报,

2003,22(5):327-330

31

附录 人脸识别matlab程序

function varargout = FR_Processed_histogram(varargin) %这种算法是基于直方图处理的方法

%The histogram of image is calculated and then bin formation is done on the

osis of mean of successive graylevels frequencies. The training is done on odd images of 40 subjects (200 images out of 400 images)

%The results of the implemented algorithm is 99.75 (recognition fails on image number 4 of subject 17)

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @FR_Processed_histogram_OpeningFcn, ...

'gui_OutputFcn', @FR_Processed_histogram_OutputFcn, ...

32

'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT

%--------------------------------------------------------------------------

% --- Executes just before FR_Processed_histogram is made visible. function FR_Processed_histogram_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn. % hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

33

% varargin command line arguments to FR_Processed_histogram (see VARARGIN)

% Choose default command line output for FR_Processed_histogram handles.output = hObject;

% Update handles structure guidata(hObject, handles);

% UIWAIT makes FR_Processed_histogram wait for user response (see UIRESUME)

% uiwait(handles.figure1);

global total_sub train_img sub_img max_hist_level bin_num form_bin_num;

total_sub = 40; train_img = 200; sub_img = 10; max_hist_level = 256; bin_num = 9; form_bin_num = 29;

%----------------------------------------------------------------

34

----------

% --- Outputs from this function are returned to the command line. function varargout = FR_Processed_histogram_OutputFcn(hObject, eventdata, handles)

% varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure varargout{1} = handles.output;

%--------------------------------------------------------------------------

% --- Executes on button press in train_button.

function train_button_Callback(hObject, eventdata, handles) % hObject handle to train_button (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

global train_processed_bin;

global total_sub train_img sub_img max_hist_level bin_num

35

form_bin_num;

train_processed_bin(form_bin_num,train_img) = 0; K = 1;

train_hist_img = zeros(max_hist_level, train_img);

for Z=1:1:total_sub

for X=1:2:sub_img %%%train on odd number of images of each subject

I = imread( strcat('ORL\\S',int2str(Z),'\\',int2str(X),'.bmp') ); [rows cols] = size(I);

for i=1:1:rows for j=1:1:cols if( I(i,j) == 0 )

train_hist_img(max_hist_level,

K)

=

train_hist_img(max_hist_level, K) + 1;

else

train_hist_img(I(i,j), K) = train_hist_img(I(i,j), K) + 1;

end

36

end end

K = K + 1; end end

[r c] = size(train_hist_img); sum = 0; for i=1:1:c K = 1;

for j=1:1:r

if( (mod(j,bin_num)) == 0 )

sum = sum + train_hist_img(j,i); train_processed_bin(K,i) = sum/bin_num; K = K + 1; sum = 0; else

sum = sum + train_hist_img(j,i); end end

train_processed_bin(K,i) = sum/bin_num; end

37

display ('Training Done')

save 'train' train_processed_bin;

%--------------------------------------------------------------------------

% --- Executes on button press in Testing_button.

function Testing_button_Callback(hObject, eventdata, handles) % hObject handle to Testing_button (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global train_img max_hist_level bin_num form_bin_num; global train_processed_bin; global filename pathname I

load 'train'

test_hist_img(max_hist_level) = 0; test_processed_bin(form_bin_num) = 0;

[rows cols] = size(I);

38

for i=1:1:rows for j=1:1:cols if( I(i,j) == 0 )

test_hist_img(max_hist_level)

test_hist_img(max_hist_level) + 1;

else

=

test_hist_img(I(i,j)) = test_hist_img(I(i,j)) + 1; end end end

[r c] = size(test_hist_img); sum = 0;

K = 1;

for j=1:1:c

if( (mod(j,bin_num)) == 0 )

sum = sum + test_hist_img(j); test_processed_bin(K) = sum/bin_num; K = K + 1; sum = 0; else

39

sum = sum + test_hist_img(j); end end

test_processed_bin(K) = sum/bin_num; sum = 0; K = 1;

for y=1:1:train_img

for z=1:1:form_bin_num sum

=

sum

+

abs(

test_processed_bin(z)

train_processed_bin(z,y) );

end

img_bin_hist_sum(K,1) = sum; sum = 0; K = K + 1; end

[temp M] = min(img_bin_hist_sum); M = ceil(M/5);

getString_start=strfind(pathname,'S');

-

40

getString_start=getString_start(end)+1; getString_end=strfind(pathname,'\\'); getString_end=getString_end(end)-1;

subjectindex=str2num(pathname(getString_start:getString_end));

if (subjectindex == M) axes (handles.axes3)

%image no: 5 is shown for visualization purpose

imshow(imread(STRCAT('ORL\\S',num2str(M),'\\5.bmp'))) msgbox ( 'Correctly Recognized'); else

display ([ 'Error==> Testing Image of Subject >>' num2str(subjectindex) ' matches with the image of subject >> ' num2str(M)])

axes (handles.axes3)

%image no: 5 is shown for visualization purpose

imshow(imread(STRCAT('ORL\\S',num2str(M),'\\5.bmp'))) msgbox ( 'Incorrectly Recognized'); end

display('Testing Done')

41

%--------------------------------------------------------------------------

function box_Callback(hObject, eventdata, handles) % hObject handle to box (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of box as text % str2double(get(hObject,'String')) returns contents of box as a double

%--------------------------------------------------------------------------

% --- Executes during object creation, after setting all properties. function box_CreateFcn(hObject, eventdata, handles) % hObject handle to box (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

42

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

%--------------------------------------------------------------------------

% --- Executes on button press in Input_Image_button.

function Input_Image_button_Callback(hObject, eventdata, handles) % hObject handle to Input_Image_button (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global filename pathname I

[filename, pathname] = uigetfile('*.bmp', 'Test Image'); axes(handles.axes1)

imgpath=STRCAT(pathname,filename);

I = imread(imgpath); imshow(I)

%--------------------------------------------------------------------------

% --- Executes during object creation, after setting all properties.

43

function axes3_CreateFcn(hObject, eventdata, handles) % hObject handle to axes3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called

% Hint: place code in OpeningFcn to populate axes3 %Programmed by Usman Qayyum

44

本文来源:https://www.bwwdw.com/article/g7a5.html

Top