基于PCA算法的人脸识别研究及其GUI实现
2015-05-25毕运锋江娟娟林园胜周伟峰吴益红
毕运锋,许 钢,江娟娟,林园胜,周伟峰,吴益红
(安徽工程大学检测技术与节能装置省级重点实验室;安徽芜湖 241000)
基于PCA算法的人脸识别研究及其GUI实现
毕运锋,许 钢*,江娟娟,林园胜,周伟峰,吴益红
(安徽工程大学检测技术与节能装置省级重点实验室;安徽芜湖 241000)
随着科学技术的飞速发展,传统的身份识别(如门禁卡,身份卡,口令等)安全系数比较低,容易被破解,而生物特征识别技术使得身份鉴别更加可靠,能够达到期望的安全系数;针对上述问题,介绍了一种人脸识别常用的算法及其算法的改进,并采用ORL数据库作为实验库进行了算法改进前后的识别率比较实验,最后在Matlab中通过图形化界面进行了验证实现。
人脸识别;Matlab;图形化界面
人脸识别技术是目前模式识别领域研究的热点也是难点之一,为了得到紧凑的人脸图像,Kirby和Turk等首次把主元分析的子空间思想引入到人脸识别中。然而对于其问题的复杂性至今仍有许多关键性问题需要解决,怎样进行人脸的定位与检测以及人脸特征的提取[1]都是需要解决的难题。现以基于代数特征的主成分分析(Principal Component Analysis)来说明算法的执行过程,并用Matlab图形化界面在ORL人脸数据库上做了分析,使得操作更加直观。
1 算法介绍
主成分分析法的基本原理是:利用K-L变换抽取人脸的主要成分,构成特征脸空间,识别时将测试图像投影到此空间得到一组投影系数,通过与各个人脸图像比较进行识别[2],其算法如下。
(1)读入人脸库。读入每一个二维的人脸图像数据并转化为一维的向量,每人选择一定数量的图像构成训练集,其他的为测试集。假设图像的大小是(w和h分别为图像的宽度和高度),整个人脸库中图像个数是n,用于训练的人脸图像个数是n1,测试的图像是n2,令m=w×h,则训练集是一组列向量:{Xi}(Xi∈Rm×n,i=1,2,…,n1)通过训练样本对其均值向量和协方差矩阵进行估计。
(2)均值向量μ通过下式进行估计:
协方差矩ST阵通过下式估计:
(3)由式(2)可得生成矩阵ST的特征值和特征向量,构造字空间。首先把特征值按从大到小的顺序进行排序,对应的特征向量顺序也作相应的调整。然后选择其中的一部分特征向量构造特征子空间。设协方差矩阵的非零特征值个数为k,k值一般小于等于n1也远小于m,但是通常情况下,k值仍然很大,根据实际需要减去一些信息量小的特征向量[3]。采用保证剩余的特征向量所包含的信息与总的信息量相比大于一定的阈值(e)的方法,计算方法如下:
(4)把训练图像和测试图像投影到特征空间中。每一副人脸图像投影到子空间以后,就对应于子空间中的一个点[4]。同样,子空间中的任一点也对应于一副图像。
(5)把投影到子空间中的所有人脸测试图像和训练图像进行比较,确定待识别样本所属归类。该方法是计算训练图像和测试图像的2范数,并采用三阶近邻法确定识别图像[5]。
2 算法改进
以K-L变换为基础的人脸识别方法是统计最优的,它使得变换前后的均方差最小,K-L变换将人脸投影到低维空间中,这样便有很好的分辨能力[6]。但PCA算法也存在着缺陷。作为一种图像的统计方法,图像中的所有像素被赋予了同等的地位,可是许多因素的干扰如图1所示,会导致识别率急剧下降,因此较好的识别算法应当对人脸进行矫正处理,且方法所使用的数据库的人脸分辨率大小为112×92,按照算法一共有20×5幅图像用于训练,所形成的协方差矩阵就变得非常大。针对上述问题就在人脸识别之前首先对ORL数据库中的图像进行必要的裁剪、缩放与直方图均衡化[7,8],改进后框图如图2所示。
图1 影响人脸图像表观的因素
图2 改进后算法
3 实验部分
方法在ORL人脸库上完成了算法验证,ORL库是英国剑桥大学模式识别实验室创建的人脸识别数据库,其中包含40个人的人脸,其中每人10幅112×92分辨率图像,计400幅经过预处理的图像。其中有些图像是拍摄于不同时期的,人的脸部表情和脸部细节也有着不同程度的变化,比如笑或不笑、眼睛或睁或闭、戴或不戴眼镜;人脸姿态也有着相当程度的变化,深度旋转和平面旋转可达20度;人脸的图像也有多达10%的变化[4]。
3.1 图像的裁剪与直方图均衡化
方法先对图像进行裁剪然后采用一种基于累积分布函数变换法为基础的直方图修正法进行修正。它可以通过对直方图进行均匀化修正,可以使图像的灰度间距增大或灰度均匀分布、增大反差,使图像的细节变得清晰,实验结果如图3所示。
3.2 不同阈值对应的识别率
将每个人的后5幅图总共200幅图作为测试集计算不同特征值个数(即不同阈值)对应的正确识别率,结果见图4。为了验证改进算法的可行性,做了大量的实验,图4为PCA算法改进前后识别率的对比。从图4中可以发现在采用相同分类器时经过裁剪和直方图修正后的人脸整体识别率要高于没有经过修正的,而且用时更短(用tic与toc命令对来实现对时间的观测,tic命令表示开启一个Matlab的计时器,toc则表示停止之前与之对应的tic开启的计时器,并得到最后的计时结果)。进一步研究可以发现随着特征值能量的增加识别率是逐步增加的,也有个别点例外如上图中改进前特征值能量为0.95和改进后特征值能量为0.8时结果反而有所降低,认为当特征向量个数增加时,特征向量所能表征的主要人脸模式也随之增加,但当特征向量个数增加到一定程度后,会引入一些次要人脸模式和噪声,因此识别率变化不大反而有所下降[9]。
图3 图像的裁剪与直方图均衡化
图4 算法改进前后识别率的对比
3.3 PCA算法的Matlab GUI实现
为了使得操作更加方便直观,将算法用Maltab GUI工具对方法进行了验证实现。取每个人的前5副图作为训练集,测试集由操作者选择。其中GUI界面包含4个模块如图5所示。
3.3.1 第1个模块
用户首先设置一个按钮(pushbutton1),点击按钮能实现对人脸的训练;设置一个按钮(pushbutton2),用户点击后选择需要识别的人脸图像;设置一个图形框(axes1)用于显示用户选择的需要识别的图像;以及一个文本框(edit1)用于显示选取的是第几个人。算法的具体实现如下:
(1)设置ORL库每个人的前5幅图作为训练集点击pushbutton1完成训练。
(2)用Matlab工具箱函数uigetfile实现识别图像的获取,并且得到文件名和路径名,采用ORL库做实验所以路径名为ORL\S*\,而文件名则为*.bmp。其中S*中的*就表示用户选取的是第几个人,而*.bmp中的*表示选取的人的第几幅人脸。
(3)指定axes1用于显示图像就要在显示之前加上一句axes(handles.axes1),如所需要显示的图像名为im,用axes显示的程序代码为:axes(handles.axes1);imshow(im);。
(4)在edit1中显示选取的是第几个人就是在第2点中的路径名ORL\S*\中的*值取出来并用set语句就可以了,因为ORL库中有40个人的人脸所以*值为1~40,在具体实施过程中需要判定*值是两位数还是一位数,只需判断倒数第3个字符是不是′S′即可,如果是那么就是一位数,如果不是那就是两位数,取出的*值实际上是字符在set语句之前还应该用num2str将字符转成数值。
3.3.2 第2个模块
设置了一个滑动条(slider1)让用户自由选取阈值、一个文本框(edit2)用于显示选取的阈值;具体实施如下:
双击点开slider1的属性设置max为1,min为0这样滑动条的值域就在0~1之间变化,使用get函数能得到滑动条的值。选中滑动条右击,在滑动条的callback中输入如下内容就能够在edit2中显示滑条的数值:ht=get(handles.slider1,′value′);set(handles.edit2,′string′,num2str(ht))。
3.3.3 第3个模块
设置一个按钮(pushbutton3),用户点击后即可进行识别,设置一个图形框(axes2)用于显示利用PCA算法识别到的哪个人并设置一个文本框(edit3)用于显示,实现如下:
识别算法是在pushbutton3的callback中完成的,在设计算法的时候非常巧妙,在识别过程中将选取的人脸特征和用于训练的每幅人脸的特征进行比对并计算其2范数,得到一个向量vm用sort函数将此向量重新按从小到大的顺序排序,语句为[dist,index2]=sort(vm);dist是原来的向量vm按行从小到大重新排列得到的新向量。index2是重排的详细信息,也就是做了什么样的变动。index2的值就是按顺序识别的结果值域为1~200,具体到到底是哪个人时只需要将index2除以5即可。选取index2的前3个数作为分类器的输入,才用三阶近邻法完成判断,文本框和图片框的显示和第一个模块是差不多的。
3.3.4 第4个模块
设置了一个图形框(axes3)用于描绘不同阈值对应的识别率、设置两个按钮(pushbutton4)用于绘图,(pushbutton5)用于擦除。图5是实验过程中的截图,在描点的过程中用到了hold on函数,pushbutton5的回调函数为axes(handles.axes3);cla。
如图5所示绘制不同阈值对应的识别率的时候在某个区间段一致,这是有道理的。程序中特征值选取的时候用到这么一句语句:dsum_extract/dsum<e,其中e是阈值,dsum是所有特征值总和dsum_extract是选取的特征值总和。由于特征值的数值不是连续的所以特征值之和也是间断的而阈值在这个区间中浮动的时候其识别率是不会改变的。需要指出的是识别的人脸并不一定就是选取的人脸如图5所示,这是由程序设计思想决定的。
3.3.5 实验结果分析
为了便于实验分析,对上述GUI界面进行简化。GUI界面包含3个模块:设置一个按钮,用户点击后选择需要识别的图片,设置一个模块用于显示用户选择的需要识别的图像,最后设置一个文本框用于显示识别出的结果,识别出的结果就放在文本框中。实验结果如图6所示(其中特征向量量取90%的能量即阈值e的取值为0.9)。
通过实验发现选取的第5人和第10人测试的图像与训练的图像表情上已经有了很大的差别,应用此算法仍然能够正确识别;而且第36人用于训练的前5幅图都没有戴眼镜的,从实验结果可以发现戴眼镜后应用此算法还是能够正确的识别;但是在取第15人第7幅人脸的时候识别结果是第16人(图6中下面的那5张人脸为第16人用于训练的前5幅人脸),发生了识别错误,说明在阈值取0.9,前5幅图作为训练图像,应用上述方法在ORL数据库中不能完全正确的识别人脸,还有待改进。
图5 人脸识别的MatlabGUI实现
图6 典型人脸的识别结果
4 结 语
主成分分析法是一种人脸识别常用的算法,先分析了该算法的实现过程,然后用Matlab验证了算法,并分别对改进前后的算法在ORL人脸库进行验证,实验表明经过改进的结果更加理想,最后将这种算法在Matlab中用图形化界面加以实现。
[1]罗鑫,赵永进.基于PCA算法人脸识别的matlab实现[J].黑龙江科技信息,2013(2):18-21
[2]蔡静,尹绍宏.基于MATLAB的人脸识别研究[J].电子世界,2012,21:20-21
[3]周涛.基于PCA的人脸识别研究[D].南京:南京理工大学,2004
[4]沈银银,冯颖凌.二维PCA人脸特征提取算法及其改进[J].南通职业大学学报,2010,24(3):98-100
[5]边肇祺,张学工.模式识别[M].北京:清华大学出版社,2002
[6]朱超平.基于人脸识别的门禁系统设计与实现[J].重庆工商大学学报:自然科学版,2011(4):29-32
[7]杨帆.数字图像处理与分析[M].北京:北京航空航天大学出版社,2010
[8]齐兴敏.基于PCA人脸识别技术的研究[D].武汉:武汉理工大学,2007
[9]韩柯,朱秀昌.基于二维PCA的人脸识别方法研究[J].杭州电子科技大学学报,2007,27(1):69-72
Research on Face Recognition and Its GUI Based on PCA Algorithm
BI Yun-feng,XU Gang,JIANG Juan-juan,LIN Yuan-sheng,ZHOU Wei-feng,WU Yi-hong
(Anhui Provincial Key Lab of Detection Technology and Energy Saving Devices,Anhui Polytechnic University,Wuhu 241000,China)
With the rapid development of science and technology,the safety factor of traditional identification such as access cards,identity cards,passwords,etc.is relatively low,and which are easy to be cracked.However biometric identification makes identity authentication more reliable,and can reach the safety factor expected.In order to solve the problems above,this paper presents a common face recognition algorithm and improves the algorithm,and then do comparison experiments on the recognition rate between the common algorithm and the improved algorithm based on the ORL face database.Finally the results are validated by the graphical user interface on Matlab.
face recognition;Matlab;Graphical User Interface
TP201
A
1672-058X(2015)03-0031-06
10.16055/j.issn.1672-058X.2015.0003.007
2014-07-10;
2014-09-10.
毕运锋(1990-),男,安徽歙县人,硕士研究生,从事信号与信息处理研究.
*通讯作者:许钢(1972-),男,安徽芜湖人,副教授,硕导,从事信号与信息处理研究.Email:19022744@qq.com