1基于PCA的人脸识别算法AlenFielding摘要:文章具体讨论了主成分分析(PCA)人脸识别算法的原理及实现。它具有简单、快速和易行等特点,能从整体上反映人脸图像的灰度相关性具有一定的实用价值。关键词:人脸识别;PCA;生物特征;识别技术中图分类号:TP302文献标识码:AFacerecognitionmethodbasedonPCAZhangjinhua(Informationengineeringcollege,Southwestuniversityofscienceandtechnology,Sichuan,621010,China)Abstract:Thepaperdiscussedtheprincipalcomponentanalysis(PCA)facerecognitionalgorithmofprincipleandrealization.Itissimple,rapidandeasywaitforacharacteristic,canreflectfromwholefaceimagegraycorrelationhascertainpracticalvalue.Keywords:Facerecognition;PCA;Biologicalcharacteristics;Recognitiontechnology1引言PCA,即PrincipalComponentAnalysis,主成分分析方法,是一种得到广泛应用的事实上的标准人脸识别方法。传统主成分分析方法的基本原理是:利用K-L变换抽取人脸的主要成分,构成特征脸空间,识别时将测试图像投影到此空间,得到一组投影系数,通过与各个人脸图像比较进行识别。这种方法使得压缩前后的均方误差最小,且变换后的低维空间有很好的分辨能力。2K-L变换PCA方法是由Turk和Pentlad提出来的,它的基础就是Karhunen-Loeve变换(简称K-L变换),是一种常用的正交变换。首先对K-L变换作一个简单介绍:假设X为n维的随机变量,X可以用n个基向量的加权和来表示:X=nia1iφi式中:αi是加权系数,φi是基向量,此式可以用矩阵的形式表示:X=(φ1,φ2,φ3,……,φn)(α1,α2,……αn)=Φα2系数向量为:α=ΦTX综上所述,K-L展开式的系数可用下列步骤求出:步骤一求随机向量X的自相关矩阵R=E[XTX],由于没有类别信息的样本集的μ均值向量,常常没有意义,所以也可以把数据的协方差矩阵=E[(x-μ)(x-μ)T]作为K-L坐标系的产生矩阵,这里μ是总体均值向量。步骤二求出自相关矩阵或者协方差矩阵R的本征值λi和本征向量φi,Φ=(φ1,φ2,φ3,……,φn)步骤三展开式系数即为α=ΦTXK-L变换的实质是建立一个新的坐标系,将一个物体主轴沿特征矢量对齐的转变换,这个变换解除了原有数据向量的各个分量之间相关性,从而有可能去掉那些带有较少信息的坐标系以达到降低特征空间维数的目的。3PCA方法PCA方法,也被叫做特征脸方法(eigenfaces),是一种基于整幅人脸图像的识别算法,被广泛用于降维,在人脸识别领域也表现突出。一个N×N的二维脸部图片可以看成是N的一个一维向量,一张112×92的图片可以看成是一个10,304维的向量,同时也可以看成是一个10,304维空间中一点。图片映射到这个巨大的空间后,由于人脸的构造相对来说比较接近,因此,可以用一个相应的低维子空间来表示。我们把这个子空间叫做“脸空间”。PCA的主要思想就是找到能够最好地说明图片在图片空间中的分布情况的那些向量。这些向量能够定义“脸空间”,每个向量的长度为N,描述一张N×N的图片,并且是原始脸部图片的一个线性组合。对于一副M*N的人脸图像,将其每列相连构成一个大小为D=M*N维的列向量。D就是人脸图像的维数,也即是图像空间的维数。设n是训练样本的数目;Xj表示第j幅人脸图像形成的人脸向量,则所需样本的协方差矩阵为:Sr=1()()NTjijxuxu(1)其中u为训练样本的平均图像向量:u=11njjxn(2)令A=[x1-ux2-u……xn-u],则有Sr=AAT,其维数为D*D。3根据K-L变换原理,需要求得的新坐标系由矩阵AAT的非零特征值所对应得特征向量组成。直接计算的计算量比较大,所以采用奇异值分解(SVD)定理,通过求解ATA的特征值和特征向量来获得AAT的特征值和特征向量。依据SVD定理,令li(i=1,2,……,r)为矩阵ATA的r个非零特征值,vi为ATA对应于li的特征向量,则AAT的正交归一特征向量ui为:1iiiuAvl(i=1,2,……r)(3)则特征脸空间为:w=(u1,u2……ur,)。将训练样本投影到“特征脸”空间,得到一组投影向量Ω=wTu,构成人脸识别的数据库。在识别时,先将每一幅待是识别的人脸图像投影到“特征脸”空间,再利用最近邻分类器的比较其与库中人脸的位置,从而识别出该图像是否是库中的人脸,如果是,是哪一个人脸。4利用PCA进行人脸识别完整的PCA人脸识别的应用包括几个步骤:人脸图像预处理;读入人脸库,训练形成特征子空间;把训练图像和测试图像投影到上一步骤中得到的子空间上;选择一定的距离函数进行识别。本文采用matlab7.5作为工具平台,实现了一个人脸自动识别的系统原型。实验在样本图库英国剑桥大学的ORL(OlivettiResearchLaboratory)人脸库上进行,它为网上下载的国外标准人脸数据库。ORL库包含40个人,每个人10副图像,共计400幅人脸正面图像,每幅图像大小为92×112,图像是在不同时间,光线轻微变化的条件下摄制的,其中包括姿态、光照和表情的差别。其中部分如图1所示:图1ORL人脸数据库中的5幅图像该数据库提供了经过预处理的人脸训练集和测试集。选取前5张人脸图像作为训练样本,后5张人脸图像作为测试样本。本实验运行的环境是IntelCeleronCPU2.00GHz处理器、512MB内存,WindowsXP操作系统,对ORL人脸库样本训练时间为70.91s,4识别率为90%,训练样本数目多增加人脸特征库的容量,会几何级增加人脸识别核心算法的时间和空间复杂度。在识别结果的显示窗口中,一共显示了在整个人脸图像库中最小的10个欧氏距离,它们的排列也是从小到大进行排列的,同时,换句话说,这10个欧氏距离,也就分别代表了与实验中选取的待识别的人脸图像最相近的10幅人脸图像。距离最近,当然也就是我们实验所需识别的人脸图像。下面详细描述整个过程:4.1读入人脸库归一化人脸库后,将库中的没人选择一定数量的图像构成训练集,其余的构成测试集。设归一化后的图像时n*m维,按列相连就构成N=n*m维矢量,可视为N维空间中的一个点,可以空过K-L变换用一个低维子空间描述这个图像。4.2计算通过K-L变换的生成矩阵所有训练样本的协方差矩阵为(以下三个等价);a.C1=(1.MkkkxxT)/M-mx.mxTb.C1=(A.AT)/M(1)c.C1=[1()()MTixixixmxm]/MA=(φ1φ2,……,φm),φi=xi-mx,其中mx是平均人脸,M是训练人脸数,协方差矩阵C1是一个N*N的矩阵,N是xi的维数。为了方便计算特征值和特征向量,一般选用第二个公式。根据K-L变换原理,我们所求的新坐标即由矩阵A.AT的非零特征值所对应的特征向量组成。直接求N*N大小矩阵的C1的特征值和正交归一特征向量是很困难的,根据奇异值分解原理,可以通过求解ATA的特征值和特征向量来获得AAT的特征值和特征向量。4.3识别利用公式Y=UT*X,首先把所有图片进行投影,然后对于测试图片也进行同样的投影,采用判别函数对投影系数进行识别。5结论与展望5人脸识别是目前较活跃的研究领域,本文详细给出了基于主成分分析的人脸特征提取的原理与方法。并使用matlab作为工具平台,实现了一个人脸自动识别的系统原型。实验结果表明,该系统识别率为85%,达到预期的效果。如果想进一步提高人脸识别率,可以考虑与其他方法结合。仅单独使用任何一种现有的方法一般都不会取得很好的识别效果,将其他人脸识别方法组合是今后研究的一种趋势。也可以考虑改进分类决策的方法。本系统采用的最小距离分类法属于线性的分类器,而利用神经网络这类学习能力更强的非线性分类器对高维人脸识别问题可能会有更好的解决。参考文献:[1]邓楠,基于主成份分析的人脸识别.2006.06.[2]龚勋,PCA与人脸识别及其理论基础.2007.04.[3]田印中,董志学,黄建伟,基于PCA的人脸识别算法研究及实现.2010.03.[4]李华胜,杨桦,袁保宗.人脸识别系统中的特征提取.2001,06.[5]温福喜,刘宏伟.基于2DPCA和2DLDA的人脸识别方法.2007.08.[6]李刚,高政.人脸识别理论研究进展.2003,01.[7]张翠平,苏光大.人脸识别技术综述.2000,05.[8]罗昊,孟传良.基于特征脸和LDA的人脸识别.2005,12附录-Matlab源代码:functionFaceRecognition6clear%calcxmean,sigmaanditseigendecompositionallsamples=[];%所有训练图像fori=1:40forj=1:5a=imread(strcat('D:\rawdata\ORL\s',num2str(i),'\',num2str(j),'.pgm'));%imshow(a);b=a(1:112*92);%b是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右b=double(b);allsamples=[allsamples;b];%allsamples是一个M*N矩阵,allsamples中每一行数据代表一张图片,其中M=200endendsamplemean=mean(allsamples);%平均图片,1×Nfori=1:200xmean(i,:)=allsamples(i,:)-samplemean;%xmean是一个M×N矩阵,xmean每一行保存的数据是“每个图片数据-平均图片”end;sigma=xmean*xmean';%M*M阶矩阵[vd]=eig(sigma);d1=diag(d);[d2index]=sort(d1);%以升序排序cols=size(v,2);%特征向量矩阵的列数fori=1:colsvsort(:,i)=v(:,index(cols-i+1));%vsort是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量dsort(i)=d1(index(cols-i+1));%dsort保存的是按降序排列的特征值,是一维行向量end%完成降序排列%以下选择90%的能量dsum=sum(dsort);dsum_extract=0;p=0;while(dsum_extract/dsum0.9)p=p+1;dsum_extract=sum(dsort(1:p));endi=1;%(训练阶段)计算特征脸形成的坐标系while(i=p&&dsort(i)0)base(:,i)=dsort(i)^(-1/2)*xmean'*vsort(:,i);%base是N×p阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化,详见《基于PCA的人脸识别算法研究》p317i=i+1;end%addbywolfsky就是下面两行代码,将训练样本对坐标系上进行投影,得到一个M*p阶矩阵allcoorallcoor=allsamples*base;accu=0;%测试过程fori=1:40forj=6:10%读入40x5副测试图像a=imread(strcat('D:\rawdata\ORL\s',num2str(i),'\',num2str(j),'.pgm'));b=a(1:10304);b=double(b);tcoor=b*b