《基于PCA的人脸识别算法.docx》由会员分享,可在线阅读,更多相关《基于PCA的人脸识别算法.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于PCA的人脸识别算法Alen Fielding摘要:文章具体讨论了主成分分析( PCA)人脸识别算法的原理及实现。它具有简单、快速与易行等特点,能从整体上反映人脸图像的灰度相关性具有一定的实用价值。关键词:人脸识别;PCA;生物特征;识别技术中图分类号: TP302文献标识码: AFace recognition method based on PCA Zhangjinhua(Information engineering college,Southwest university of science and technology,Sichuan,621010,China)Abstract
2、 : The paper discussed the principal component analysis (PCA) face recognition algorithm of principle and realization. It is simple, rapid and easy wait for a characteristic, can reflect from whole face image gray correlation has certain practical value.Key words : Face recognition; PCA; Biological
3、characteristics; Recognition technology1引言 PCA,即Principal Component Analysis,主成分分析方法,是一种得到广泛应用的事实上的标准人脸识别方法。传统主成分分析方法的基本原理是:利用K-L变换抽取人脸的主要成分,构成特征脸空间,识别时将测试图像投影到此空间,得到一组投影系数,通过与各个人脸图像比较进行识别。这种方法使得压缩前后的均方误差最小,且变换后的低维空间有很好的分辨能力。2 K-L变换 PCA方法是由Turk与Pentlad提出来的,它的基础就是Karhunen-Loeve变换(简称K-L变换),是一种常用的正交变换。
4、首先对K-L变换作一个简单介绍:假设X为n维的随机变量,X可以用n个基向量的加权与来表示: X= ii式中:i是加权系数,i是基向量,此式可以用矩阵的形式表示: X =(1 ,2,3 ,n)( 1, 2 , n)= 系数向量为: =TX综上所述,K-L展开式的系数可用下列步骤求出:步骤一 求随机向量X的自相关矩阵R=EXTX,由于没有类别信息的样本集的均值向量,常常没有意义,所以也可以把数据的协方差矩阵=E(x-)(x-)T作为K-L坐标系的产生矩阵,这里是总体均值向量。步骤二 求出自相关矩阵或者协方差矩阵R的本征值i与本征向量i,=(1 ,2,3 ,n)步骤三 展开式系数即为=TX K-L变
5、换的实质是建立一个新的坐标系,将一个物体主轴沿特征矢量对齐的转变换,这个变换解除了原有数据向量的各个分量之间相关性,从而有可能去掉那些带有较少信息的坐标系以达到降低特征空间维数的目的。3 PCA方法 PCA方法,也被叫做特征脸方法(eigenfaces),是一种基于整幅人脸图像的识别算法,被广泛用于降维,在人脸识别领域也表现突出。一个NN的二维脸部图片可以看成是N的一个一维向量,一张11292的图片可以看成是一个10,304维的向量,同时也可以看成是一个10,304维空间中一点。图片映射到这个巨大的空间后,由于人脸的构造相对来说比较接近,因此,可以用一个相应的低维子空间来表示。我们把这个子空间
6、叫做“脸空间”。PCA的主要思想就是找到能够最好地说明图片在图片空间中的分布情况的那些向量。这些向量能够定义“脸空间”,每个向量的长度为N,描述一张NN的图片,并且是原始脸部图片的一个线性组合。对于一副M*N的人脸图像,将其每列相连构成一个大小为D=M*N维的列向量。D就是人脸图像的维数,也即是图像空间的维数。设n是训练样本的数目;Xj表示第j幅人脸图像形成的人脸向量,则所需样本的协方差矩阵为: Sr= (1)其中u为训练样本的平均图像向量: u = (2) 令A=x1-u x2-uxn-u,则有Sr=AAT,其维数为D*D。 根据K-L变换原理,需要求得的新坐标系由矩阵AAT的非零特征值所对
7、应得特征向量组成。直接计算的计算量比较大,所以采用奇异值分解(SVD)定理,通过求解ATA的特征值与特征向量来获得AAT的特征值与特征向量。 依据SVD定理,令li(i=1,2,r)为矩阵ATA的r个非零特征值,vi为ATA对应于li的特征向量,则AAT的正交归一特征向量ui为: (i=1,2,r) (3)则特征脸空间为:w=(u1 ,u2 ur,)。将训练样本投影到“特征脸”空间,得到一组投影向量=wTu,构成人脸识别的数据库。在识别时,先将每一幅待是识别的人脸图像投影到“特征脸”空间,再利用最近邻分类器的比较其与库中人脸的位置,从而识别出该图像是否是库中的人脸,如果是,是哪一个人脸。4利用
8、PCA进行人脸识别 完整的PCA人脸识别的应用包括几个步骤:人脸图像预处理;读入人脸库,训练形成特征子空间;把训练图像与测试图像投影到上一步骤中得到的子空间上;选择一定的距离函数进行识别。本文采用matlab7.5作为工具平台, 实现了一个人脸自动识别的系统原型。实验在样本图库英国剑桥大学的ORL( Olivetti Research Laboratory) 人脸库上进行,它为网上下载的国外标准人脸数据库。ORL 库包含40 个人,每个人10副图像,共计400 幅人脸正面图像,每幅图像大小为92112,图像是在不同时间,光线轻微变化的条件下摄制的,其中包括姿态、光照与表情的差别。其中部分如图1
9、 所示:图1ORL 人脸数据库中的 5幅图像该数据库提供了经过预处理的人脸训练集与测试集。选取前5 张人脸图像作为训练样本,后5 张人脸图像作为测试样本。本实验运行的环境是IntelCelero n CPU 2.00GHz 处 理器、512MB 内 存,Window s XP 操作系统,对ORL 人脸库样本训练时间为70. 91s,识别率为90% ,训练样本数目多增加人脸特征库的容量,会几何级增加人脸识别核心算法的时间与空间复杂度。在识别结果的显示窗口中, 一共显示了在整个人脸图像库中最小的10 个欧氏距离,它们的排列也是从小到大进行排列的,同时, 换句话说,这10 个欧氏距离,也就分别代表了
10、与实验中选取的待识别的人脸图像最相近的10 幅人脸图像。距离最近, 当然也就是我们实验所需识别的人脸图像。下面详细描述整个过程:4.1 读入人脸库 归一化人脸库后,将库中的没人选择一定数量的图像构成训练集,其余的构成测试集。设归一化后的图像时n*m维,按列相连就构成N=n*m维矢量,可视为N维空间中的一个点,可以空过K-L变换用一个低维子空间描述这个图像。4.2 计算通过K-L变换的生成矩阵所有训练样本的协方差矩阵为(以下三个等价);a. C1=( T)/M-mx.mxTb. C1=(A.AT)/M (1)c. C1= /MA=(12,m), i=xi-mx,其中mx是平均人脸,M是训练人脸数
11、,协方差矩阵C1是一个N*N的矩阵,N是xi的维数。为了方便计算特征值与特征向量,一般选用第二个公式。根据K-L变换原理,我们所求的新坐标即由矩阵A.AT的非零特征值所对应的特征向量组成。直接求N*N大小矩阵的C1的特征值与正交归一特征向量是很困难的,根据奇异值分解原理,可以通过求解ATA的特征值与特征向量来获得AAT的特征值与特征向量。4.3 识别利用公式Y=UT*X,首先把所有图片进行投影,然后对于测试图片也进行同样的投影,采用判别函数对投影系数进行识别。5结论与展望人脸识别是目前较活跃的研究领域, 本文详细给出了基于主成分分析的人脸特征提取的原理与方法。并使用matlab 作为工具平台,
12、 实现了一个人脸自动识别的系统原型。实验结果表明, 该系统识别率为85%, 达到预期的效果。如果想进一步提高人脸识别率, 可以考虑与其他方法结合。仅单独使用任何一种现有的方法一般都不会取得很好的识别效果, 将其他人脸识别方法组合是今后研究的一种趋势。也可以考虑改进分类决策的方法。本系统采用的最小距离分类法属于线性的分类器, 而利用神经网络这类学习能力更强的非线性分类器对高维人脸识别问题可能会有更好的解决。参考文献:1 邓楠, 基于主成份分析的人脸识别. 2006.06.2 龚勋, PCA 与人脸识别及其理论基础. 2007.04.3 田印中, 董志学, 黄建伟, 基于PCA 的人脸识别算法研究
13、及实现. 2010.03.4 李华胜, 杨桦,袁保宗. 人脸识别系统中的特征提取. 2001,06.5 温福喜, 刘宏伟. 基于 2D PCA与 2D LDA的人脸识别方法. 2007.08.6 李刚, 高政.人脸识别理论研究进展. 2003, 01.7 张翠平, 苏光大.人脸识别技术综述. 2000, 05.8 罗昊, 孟传良.基于特征脸与LDA的人脸识别.2005,12附录-Matlab源代码:function FaceRecognitionclear% calc xmean,sigma and its eigen decompositionallsamples=;%所有训练图像for i
14、=1:40 for j=1:5 a=imread(strcat(D:rawdataORLs,num2str(i),num2str(j),.pgm); % imshow(a); b=a(1:112*92); % b是行矢量 1N,其中N10304,提取顺序是先列后行,即从上到下,从左到右 b=double(b); allsamples=allsamples; b; % allsamples 是一个M * N 矩阵,allsamples 中每一行数据代表一张图片,其中M200 endendsamplemean=mean(allsamples); % 平均图片,1 Nfor i=1:200 xmea
15、n(i,:)=allsamples(i,:)-samplemean; % xmean是一个M N矩阵,xmean每一行保存的数据是“每个图片数据-平均图片”end;sigma=xmean*xmean; % M * M 阶矩阵v d=eig(sigma);d1=diag(d);d2 index=sort(d1); %以升序排序cols=size(v,2);% 特征向量矩阵的列数for i=1:cols vsort(:,i) = v(:, index(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量 ds
16、ort(i) = d1( index(cols-i+1) ); % dsort 保存的是按降序排列的特征值,是一维行向量end %完成降序排列%以下选择90%的能量dsum = sum(dsort); dsum_extract = 0; p = 0; while( dsum_extract/dsum 0.9) p = p + 1; dsum_extract = sum(dsort(1:p); endi=1;% (训练阶段)计算特征脸形成的坐标系while (i0) base(:,i) = dsort(i)(-1/2) * xmean * vsort(:,i); % base是Np阶矩阵,除以d
17、sort(i)(1/2)是对人脸图像的标准化,详见基于PCA的人脸识别算法研究p31 i = i + 1;end% add by wolfsky 就是下面两行代码,将训练样本对坐标系上进行投影,得到一个 M*p 阶矩阵allcoorallcoor = allsamples * base;accu = 0;% 测试过程for i=1:40 for j=6:10 %读入40 x 5 副测试图像 a=imread(strcat(D:rawdataORLs,num2str(i),num2str(j),.pgm); b=a(1:10304); b=double(b); tcoor= b * base;
18、%计算坐标,是1p阶矩阵 for k=1:200 mdist(k)=norm(tcoor-allcoor(k,:); end; %三阶近邻 dist,index2=sort(mdist); class1=floor( index2(1)/5 )+1; class2=floor(index2(2)/5)+1; class3=floor(index2(3)/5)+1; if class1=class2 & class2=class3 class=class1; elseif class1=class2 class=class1; elseif class2=class3 class=class2; end; if class=i accu=accu+1; end; end;end;accuracy=accu/200 %输出识别率第 11 页