您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > KL变换应用于人脸识别
基于K-L变换的人脸识别一、基本要求从网上下载人脸图像,构建人脸训练数据库和测试数据库,采用K-L变换进行特征脸提取,并实现人脸识别。通过K-L变换在人脸识别中的应用,加深对所学内容的理解和感性认识。1、或者从网上下载其它数据库,编程实现K-L变换。2、课堂报告、并提交实验报告及相应程序。二、实验原理1、K-L变换:就是以样本特征向量在特征空间分布为原始数据,通过变换,找到维数较少的组合特征,达到降维的目的。K-L变换是一种正交变换,即将一个向量X,在某一种坐标系统中的描述,转换成用另一种基向量组成的坐标系表示。这组基向量是正交的,其中每个坐标基向量用ju表示,,2,1,j,因此,一个向量X可表示成1jjjucX如果我们将由上式表示的无限多维基向量坐标系统改成有限维坐标系近似,即djjjucX1表示X的近似值或估计量,我们希望在同样维数条件下,使向量X的估计量误差最小。确切地说是使所引起的均方误差:)]ˆ()ˆ[(XXXXET为最小。K-L变换可以实现这个目的。因为ijijuuiTj01将1djjjucXX带入到)]ˆ()ˆ[(XXXXET中可得到][12jjcE容易看到XucTjj因此][1djTTjuXXuE由于ju是确定性向量,因此上式可改写为1djjTTjuXXEu令TXXE则1djjTjuu用拉格朗日乘子法,可以求出在满足正交条件下,取极值的坐标系统,即用函数11]1[djjTjjdjjTjjuuuuug)(对ju,,,1dj求导数,因此有,,1,0-djuIjj)(我们令0d,从而可得到以下的结论:以矩阵的本征向量座位坐标轴来展开X时,其截断均方误差具有极值性质,且当取d个djuj,,2,1,来逼近X时,其均方误差1djj式中j是矩阵的相应本征值。可以证明,当取d个与矩阵的d个最大本征值对应的本征向量来展开X时,其截断均方误差和在所有其他正交坐标系情况下用d个坐标展开X时所引起的均方误差相比为最小。这d个本征向量所组成的正交坐标系称作X所在的D维空间的d维K-L变换坐标系,在坐标系上的展开系数向量称为X的变换。本实验所采用的人物脸部灰度图像默认已经过归一化,所以对于图像的归一化,我们不予处理。可以以样本集的总体散布矩阵为产生矩阵,即:10))((1MiTiixxM其中:ix表示第i个训练样本图像,表示训练样本集的平均图像向量,M为训练样本的总数。2、奇异值分解:为了求22*NN维矩阵的特征值和正交归一的特征向量,直接计算是困难的。为此引入了SVD定理:设A是一秩为r的n*r维矩阵,则存在两个正交矩阵:IUUuuuUTrnr*110],,,[IVVvvvVTrrr*110],,,[以及对角阵rrrdiag*110],,,[,且110r满足TVUA21其中:)1,,1,0(rii为矩阵TAA和AAT的非零特征值,iu和iv分别为TAA和AAT对应于i的特征向量。上述分解称为矩阵的奇异值分解,简称SVD,i为A的奇异值。又有推论21AVU易知1,,2,1,01MiXvuiii这就是图像的特征向量。它是通过计算较低为矩阵R的特征值与特征向量而间接求出的。3、特征向量的选取:我们总共的得到M个特征向量。虽然M比2N小很多。但通常情况下,仍然会很大。而事实上,根据应用的需要,并非所有的都有很大的保留意义。考虑到使用变换作为对人脸图像的压缩手段,可以选取最大的前k个特征向量,使得100Miikii上式中,可以选取%99。这说明样本及在前个轴上能量占整个能量的99%以上。4、产生矩阵的选取:在考虑到训练样本的类别信息,对人脸识别会有更大意义,以及节省计算量的前提下,我们采用训练样本集的类间散布矩阵作为K-L变换的产生矩阵,即:10))()((PiTiiibPS其中:i为训练样本集中第i个人的平均图像向量,P为训练样本集中的总人数,本实验iP不予考虑。显然,与总体散布矩阵相比,特征脸的个数由M降低到P,因而在计算量上要减少很多。对于每个人的训练样本的平均图像向量)1,,1,0(Pii,向由“特征脸”图像向量所展成的P子空间上投影,其坐标系数向量就是其K-L变换的展开系数向量,即:1,,1,0,PiUciTi可知TTVXUC21其中:],,,[110PcccC,ic为训练样本集中第i个人的特征系数向量。三、实验过程1、对于选取每个人n幅脸图像作为训练样本集的正确率第一步:搜集人脸图像,建立人脸库。共40个人,每人9幅。第二步:选定产生矩阵70))()((iTiiibPS,分别选取每个人n(n=1,2,...,7)幅脸图像作为训练样本集,进行K-L变换,利用奇异值分解计算出相应的特征向量。确定%99,计算选取出“特征脸”向量并计算出每个人训练样本的平均图像向量)7,,1,0(ii在由“特征脸”图像向量所张成的子空间上坐标系数向量。第三步:选取所有人第8、9两张脸图像进行测试,分别计算出它们在特征脸空间中的坐标系数向量,即特征系数向量。第四步:分别计算测试样本特征系数向量与每个人训练样本特征系数向量的欧氏距离,选取距离最小的样本类别作为识别结果,并与测试样本本身所属于的类别比较,判断识别的正误。第五步:统计正确的次数,计算正确率。2、选取不同的值计算测试样本的识别正确率第一步:产生矩阵依旧为70))()((iTiiibPS。确定训练样本集为所有人第1至7幅脸图像,测试样本集还是所有人第8、9张脸图像。第二步:利用上面实验的部分结果,分别取为不同值,计算并选取出对应的“特征脸”向量。第三步:对于不同的值,计算出测试样本集的特征系数向量。第四步:计算测试样本集特征系数向量与样本集中每个人的特征系数向量的欧氏距离,选取距离最小的样本类别作为识别结果,并与测试样本本身所属于的类别比较,判断识别的正误。第五步:统计取不同值的识别正确率,比较。3、显示识别图像和特征脸图像选取训练样本集为所有人第1至7幅脸图像,测试样本集为随机选取的5个不同人脸图像,取%99,利用上面两个实验部分结果进行识别,并显示结果和部分特征脸图像。四、实验结果:表1以类间散布矩阵为产生矩阵的K-L变换进行人脸识别正确率(%99)训练集中每个人图片数1234567识别正确率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)五、实验心得这个实验比较有意思,与生活中的某些应用也有联系,通过做这个作业,更加认识到理论应用于实际的作用,同时对课本这部分内容也有了更全面的了解。六、附录(实验代码)clcclearallfori=1:40forj=1:9%一共有40人的人脸图片,每人读取9张ifi10strname=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',num2str(j),'.bmp');%生成图片文件的路径endfid=imread(strname);[row,clo]=size(fid);face(:,9*(i-1)+j)=reshape(fid,[row*clo,1]);endendfu1=7;%训练样本选取每个人fu1张图像Total=40;%定义变量,标定了待识别的人数X=zeros(row*clo,Total);%初始化变量X,训练样本中元素由每个人的平均图像向量组成fori=1:TotalYangben=face(:,9*(i-1)+1:9*(i-1)+fu1);%把样本集face中的每个人的前fu张图片组成训练集X(:,i)=mean(Yangben,2);%求得每个人的平均图像向量endmeanvetor=mean(X,2);%求得总体的平均图像向量X1=X;fori=1:TotalX(:,i)=X(:,i)-meanvetor;%求得训练集,由每个人平均图像向量减去总体平均图像向量得到endpmetrix=X'*X;%求X'*X,应用的原理是奇异值分解的推论[vetvetvalue]=eig(pmetrix);%求特征值和特征向量vet=fliplr(vet);%对特征值由大到小vetvalue=fliplr(vetvalue);%对特征值由大到小排列,相应的特征向量也进行变换forjj1=1:40U(:,jj1)=(1/sqrt(vetvalue(41-jj1,jj1)))*X*vet(:,jj1);%应用奇异值分解的推论得到正交化的特征脸endCvetvalue=sum(vetvalue);Ctotal=sum(Cvetvalue,2);a=0.99;%选取能量比fori=1:Totalparttotal=sum(Cvetvalue(1,1:i));ratio=parttotal/Ctotal;ifratioa%选择最大的前i个特征值,由这些值的和在总特征值中占得比例大于abreak;endendA=U(:,1:i)';%选择前i个特征值对应的特征向量组成特征脸y=A*X1;%求训练集中各图像在特征脸空间中的坐标bianshi=zeros(6,Total);fori=1:Totalface=double(face);forj=8:9%每个人图像第8、9张做为待识别的图像ceshi=face(:,(i-1)*9+j);zbceshi=A*ceshi;%求得其在特征脸空间的坐标fork=1:Totalwucha=zbceshi-y(:,k);wuchametrix(:,k)=wucha'*wucha;%计算该坐标与训练集中各图像坐标之间的距离end[h,I]=min(wuchametrix);%最近邻法进行人脸识别ifI==i%统计每个待辨识图像是否成功识别,成功为1,失败为0bianshi(j-7,i)=1;elsebianshi(j-7,i)=0;endendendgg=sum(bianshi);gg=sum(gg,2);chenggongratio=gg/(2*Total)%用识别正确的图像个数除以总图像个数得到识别正确率forn1=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)holdonend
本文标题:KL变换应用于人脸识别
链接地址:https://www.777doc.com/doc-5696918 .html