基于K-L 变换的人脸识别一、基本要求从网上下载人脸图像,构建人脸训练数据库和测试数据库,采用K-L 变换进行特征脸提取,并实现人脸识别。
通过K-L 变换在人脸识别中的应用,加深对所学内容的理解和感性认识。
1、或者从网上下载其它数据库,编程实现K-L 变换。
2、课堂报告、并提交实验报告及相应程序。
二、实验原理1、K-L 变换:就是以样本特征向量在特征空间分布为原始数据,通过变换,找 到维数较少的组合特征,达到降维的目的。
K-L 变换是一种正交变换,即将一个向量X ,在某一种坐标系统中的描述,转换成用另一种基向量组成的坐标系表示。
这组基向量是正交的,其中每个坐标基向量用j u 表示,∞=,2,1 ,j ,因此,一个向量X 可表示成 ∑∞==1j jjuc X如果我们将由上式表示的无限多维基向量坐标系统改成有限维坐 标系近似,即∑=∧=dj j j u c X 1表示X 的近似值或估计量,我们希望在同样维数条件下,使向量X 的估计量误差最小。
确切地说是使所引起的均方误差:)]ˆ()ˆ[(X X XX E T --=ξ 为最小。
K-L 变换可以实现这个目的。
因为⎩⎨⎧≠==ij ij u u i Tj 01将 ∑∞+=∧=-1d j jjuc X X 带入到)]ˆ()ˆ[(X X XX E T --=ξ中可得到 ][12∑∞==j jcE ξ容易看到 Xu c Tj j =因此 ][1∑∞+=d j TT j u XX u E ξ 由于j u 是确定性向量,因此上式可改写为 []∑∞+==1d j j TT j u XX E u ξ 令 []TXX E =ψ则 ∑∞+==1d j j T j u u ψξ用拉格朗日乘子法,可以求出在满足正交条件下,ξ取极值的坐标系统,即用函数∑∑∞+=∞+=--=11]1[d j j Tj j d j j Tjj u u u u u g λψ)( 对j u ,∞+=,,1 d j 求导数,因此有∞+==,,1,0- d j u I j j )(λψ 我们令0=d ,从而可得到以下的结论:以矩阵ψ的本征向量座位坐标轴来展开X 时,其截断均方误差具有极值性质,且当取d 个d j u j ,,2,1 =,来逼近X 时,其均方误差 ∑∞+==1d j jλξ式中j λ是矩阵ψ的相应本征值。
可以证明,当取d 个与矩阵ψ的d 个最大本征值对应的本征向量来展开X时,其截断均方误差和在所有其他正交坐标系情况下用d 个坐标展开X 时所引起的均方误差相比为最小。
这d 个本征向量所组成的正交坐标系称作X 所在的D 维空间的d 维K-L 变换坐标系,在坐标系上的展开系数向量称为X 的变换。
本实验所采用的人物脸部灰度图像默认已经过归一化,所以对于图像的归一化,我们不予处理。
可以以样本集的总体散布矩阵为产生矩阵,即:∑-=--=∑10))((1M i T i ix xMμμ其中:i x 表示第i 个训练样本图像 ,μ表示训练样本集的平均图像向量,M 为训练样本的总数。
2、奇异值分解:为了求22*N N 维∑矩阵的特征值和正交归一的特征向量,直接计算是困难的。
为此引入了SVD 定理:设A 是一秩为r 的n*r 维矩阵,则存在两个正交矩阵: I U U u u u U T rn r =ℜ∈=-*110],,,[I V V v v v V T rr r =ℜ∈=-*110],,,[以及对角阵rr r diag *110],,,[ℜ∈=Λ-λλλ ,且 110-≥≥≥r λλλ满足 TV U A 21Λ=其中:)1,,1,0(-=r i i λ为矩阵T AA 和A A T 的非零特征值,i u 和i v 分别为T AA 和 A A T 对应于i λ的特征向量。
上述分解称为矩阵的奇异值分解,简称SVD ,iλ为A 的奇异值。
又有推论 21Λ=AV U 易知1,,2,1,01-==M i Xv u iii λ这就是图像的特征向量。
它是通过计算较低为矩阵R 的特征值与特征向量而间接求出的。
3、特征向量的选取:我们总共的得到M 个特征向量。
虽然 M 比 2N 小很多。
但通常情况下,仍然会很大。
而事实上,根据应用的需要,并非所有的都有很大的保留意义。
考虑到使用变换作为对人脸图像的压缩手段,可以选取最大的前k 个特征向量,使得αλλ≥∑∑-==100M i iki i上式中,可以选取%99=α。
这说明样本及在前个轴上能量占整个能量的99%以上。
4、产生矩阵的选取: 在考虑到训练样本的类别信息,对人脸识别会有更大意义,以及节省计算量的前提下,我们采用训练样本集的类间散布矩阵作为K-L 变换的产生矩阵,即: ∑-=--=1))()((P i T i iib P S μμμμω其中:i μ为训练样本集中第i 个人的平均图像向量,P 为训练样本集中的总人数,本实验()i P ω不予考虑。
显然,与总体散布矩阵∑相比,特征脸的个数由M 降低到P ,因而在计算量上要减少很多。
对于每个人的训练样本的平均图像向量)1,,1,0(-==P i i μ,向由“特征脸”图像向量所展成的P 子空间上投影,其坐标系数向量就是其K-L 变换的展开系数向量,即: 1,,1,0,-==P i U c i T i μ可知T TV X U C 21∑== 其中:],,,[110-=P c c c C ,i c 为训练样本集中第i 个人的特征系数向量。
三、实验过程1、对于选取每个人n 幅脸图像作为训练样本集的正确率第一步: 搜集人脸图像,建立人脸库。
共40个人,每人9幅。
第二步:选定产生矩阵∑=--=70))()((i T i i i b P S μμμμω,分别选取每个人n(n=1,2,...,7)幅脸图像作为训练样本集,进行K-L 变换,利用奇异值 分解计算出相应的特征向量。
确定%99=α,计算选取出“特征脸” 向量并计算出每个人训练样本的平均图像向量)7,,1,0( =i iμ在由“特征脸”图像向量所张成的子空间上坐标系数向量。
第三步:选取所有人第8、9两张脸图像进行测试,分别计算出它们在特征脸 空间中的坐标系数向量,即特征系数向量。
第四步:分别计算测试样本特征系数向量与每个人训练样本特征系数向量的欧氏 距离,选取距离最小的样本类别作为识别结果,并与测试样本本身所属 于的类别比较,判断识别的正误。
第五步:统计正确的次数,计算正确率。
2、选取不同的α值计算测试样本的识别正确率第一步:产生矩阵依旧为 ∑=--=70))()((i T i i i b P S μμμμω。
确定训练样本集为所有人第1至7幅脸图像,测试样本集还是所有人第8、9张脸图像。
第二步:利用上面实验的部分结果,分别取α为不同值,计算并选取出对应的“特 征脸”向量。
第三步:对于不同的α值,计算出测试样本集的特征系数向量。
第四步:计算测试样本集特征系数向量与样本集中每个人的特征系数向量的欧 氏距离,选取距离最小的样本类别作为识别结果,并与测试样本本身所 属于的类别比较,判断识别的正误。
第五步:统计α取不同值的识别正确率,比较。
3、显示识别图像和特征脸图像选取训练样本集为所有人第1至7幅脸图像,测试样本集为随机选取的5个不同人脸图像,取%99=α,利用上面两个实验部分结果进行识别,并显示结果和部分特征脸图像。
四、实验结果:表1 以类间散布矩阵为产生矩阵的K-L 变换进行人脸识别正确率(%99=α) 训练集中每个人图片数 1 2 3 4 5 6 7 识别正确率 67.5% 78.75% 76.25% 80% 86.25% 90% 90%表2 不同的α值对人脸识别正确率的影响(训练集中每个人图片数为7)α值对识别正确率的影响α值50% 55% 65% 70% 75% 80% 85% 95% 99% 识别正确率 47.5% 62.5% 63.75% 70% 78.75% 88.75% 88.75% 90%90%部分识别人脸图像部分特征脸图像四、实验结论1、由表1可知测试样本集的识别正确率随着训练样本中的每个人的人脸图片数 的增加而增大(%99=α)。
2、由表2可知测试样本集的识别正确率在一定范围内随着α值的增大而增大(训 练集中每个人图片数为7)五、实验心得这个实验比较有意思,与生活中的某些应用也有联系,通过做这个作业,更加认识到理论应用于实际的作用,同时对课本这部分内容也有了更全面的了解。
六、附录(实验代码)clcclear all for i=1:40for j=1:9 %一共有40人的人脸图片,每人读取9张 if i<10strname=strcat('C:\Users\yeqi\Desktop\1\orl_00',num2str(i),'_00',num2str(j),'.bmp');%生成图片文件的路径 elsestrname=strcat('C:\Users\yeqi\Desktop\1\orl_0',num2str(i),'_00',n um2str(j),'.bmp');%生成图片文件的路径 endfid=imread(strname); [row,clo]=size(fid);face(:,9*(i-1)+j)=reshape(fid,[row*clo,1]); end endfu1=7; %训练样本选取每个人fu1张图像Total=40; %定义变量,标定了待识别的人数 X=zeros(row*clo,Total);%初始化变量X ,训练样本中元素由每个人的平均图像向量组成for i=1:TotalYangben=face(:,9*(i-1)+1: 9*(i-1)+fu1);%把样本集face 中的每个人的前fu 张图片组成训练集X(:,i)=mean(Yangben,2);%求得每个人的平均图像向量 endmeanvetor=mean(X,2);%求得总体的平均图像向量 X1=X;for i=1:TotalX(:,i)=X(:,i)-meanvetor;%求得训练集,由每个人平均图像向量减去总体平均图像向量得到endpmetrix=X'*X; %求X'*X,应用的原理是奇异值分解的推论[vet vetvalue]=eig(pmetrix);%求特征值和特征向量vet=fliplr(vet); %对特征值由大到小vetvalue=fliplr(vetvalue);%对特征值由大到小排列,相应的特征向量也进行变换for jj1=1:40U(:,jj1)=(1/sqrt(vetvalue(41-jj1,jj1)))*X*vet(:,jj1);%应用奇异值分解的推论得到正交化的特征脸endCvetvalue=sum(vetvalue);Ctotal=sum(Cvetvalue,2);a=0.99; %选取能量比for i=1:Totalparttotal=sum(Cvetvalue(1,1:i));ratio=parttotal/Ctotal;if ratio>a %选择最大的前i个特征值,由这些值的和在总特征值中占得比例大于a break;endendA= U(:,1:i)';%选择前i个特征值对应的特征向量组成特征脸y= A*X1;%求训练集中各图像在特征脸空间中的坐标bianshi=zeros(6,Total);for i=1:Totalface=double(face);for j=8:9 %每个人图像第8、9张做为待识别的图像ceshi=face(:,(i-1)*9+j);zbceshi=A*ceshi; %求得其在特征脸空间的坐标for k=1:Totalwucha=zbceshi-y(:,k);wuchametrix(:,k)=wucha'*wucha; %计算该坐标与训练集中各图像坐标之间的距离end[h,I]=min(wuchametrix); %最近邻法进行人脸识别if I==i %统计每个待辨识图像是否成功识别,成功为1,失败为0bianshi(j-7,i)=1;elsebianshi(j-7,i)=0;endendendgg=sum(bianshi);gg=sum(gg,2);chenggongratio=gg/(2*Total) %用识别正确的图像个数除以总图像个数得到识别正确率for n1=1:20 %显示前20张特征脸A1=U(1:row*clo/3,n1);[min1,num1]=min(A1);[max1,num2]=max(A1);A1=(1/(max1-min1))*A1;B=reshape(A1,row,clo/3);B1=mat2gray(B);subplot(4,5,n1),imshow(B)hold onend。