您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 基于KL变换的人脸识别
基于K-L变换的人脸识别一、实验原理及基本要求特征脸方法是基于K-L变换的人脸识别方法,K-L变换是图像压缩的一种最优正交变换。高维的图像空间经过K-L变换后得到一组新的正交基,保留其中重要的正交基,由这些基可以张成低维线性空间。如果假设人脸在这些低维线性空间的投影具有可分性,就可以将这些投影用作识别的特征矢量,这就是特征脸方法用于人脸识别的基本思想。在人脸识别中,可以用离散K-L变换对人脸图像的原始空间进行转换,即构造人脸图像数据集的协方差矩阵,对之进行正交变换,求出协方差矩阵的特征向量,再依据特征值的大小对这些特征向量进行排序,每一个向量表示人脸图像中一个不同数量的变量,这些特征向量表示特征的一个集合,它们共同表示一个人脸图像。在人脸识别领域,人们常称这些特征向量为特征脸。每一个体人脸图像都可以确切地表示为一组特征脸的线性组合。这样我们首先通过有指导的训练(给定训练样本集已知分类)得到样本集在特征脸空间中的坐标。训练完成后,输入待辨识图像,求得在特征脸空间的坐标,采用欧式距离法,就可以实现人脸识别。我们从网上下载人脸图像,构建人脸训练数据库和测试数据库,采用K-L变换进行特征脸提取,并实现人脸识别。通过K-L变换在人脸识别中的应用,加深对所学内容的理解和感性认识。二、具体做法及流程图ORL人脸库是由英国剑桥Olivetti实验室从1992年4月到1994年4月期间拍摄的一系列人脸图像组成,共有40个不同年龄、不同性别和不同种族的对象。每个对象10幅图像共计400幅灰度图像组成,图像尺寸是92×112,图像背景为黑色。其中人脸部分表情和细节均有变化,例如笑与不笑、眼睛睁着或闭着,戴或不戴眼镜等,人脸姿态也有变化,其深度旋转和平面旋转可达20度,人脸尺寸也有最多10%的变化。该库是目前使用最广泛的标准数据库,它含有大量的比较结果。本次试验我们用的是ORL人脸库中的人脸样本集,每个人的人脸样本集中含有十个人脸样本。我们从其中挑出训练样本和测试样本。对训练样本集采用K-L变换进行特征脸提取,并对测试样本集进行人脸识别。步骤:1、读入训练人脸库。读入时,将每个人脸图像转化为一维的列向量。本次实验参与训练的人脸图像有N=40个,每个图像大小为92*112.则训练图像可以表示为一个(92×112)×40的矩阵X。其中,第i个人脸可以表示为],,,[)(:,112*9221iiiixxxiXx,)40,2,1(i2、计算平均脸和相应的距离向量。平均脸就是所有人脸图像的平均值向量。计算公式如下:NiixNx11则每张人脸与平均脸之间的距离向量可以表示为:xxdii3、计算特征脸。设矩阵],,[21NdddA,本次试验我们选择训练样本集的类间散布矩阵作为K-L变换的产生矩阵,即:NiTiiTbddNAANS111计算特征脸时要计算出协方差矩阵的前Z(ZN)个较大特征值的特征向量。但是由于上式是一个(92*112)×(92*112)的高维向量,计算这个矩阵的特征值和特征向量的计算量非常大,所以先计算AAT的特征值与特征向量,设它们分别为i和)40,,2,1(ivi。再将i的值从大到小排列,选取前Z个特征值,使其满足:NiiZii11这里的表示样本集的前Z个轴上的能量占整个能量的以上。本次实验我们取的为99%。然后,从zi2,1,计算21iiiAvu,则由Z个iu可以组成一个特征脸空间},,{21ZuuuW。4、投影。将每一幅人脸与平均脸的差值矢量id投影到“特征脸”空间,得到第i个人脸的特征脸向量表示为:),,2,1(NidWPiTi5、对待识别的人脸进行识别(利用欧氏距离分类)。先选定一个距离阈值,如果待识别的人脸图像投影到特征脸空间后与人脸集空间中点的最小距离仍然大于这个阈值,则说明待识别人脸包含的是未知人脸。本次实验我们选取的阈值为),2,1,}({max21,NkjPPkjkj把待识别的人脸图像R投影到特征脸空间,得到:)(xRWPTP与每个人脸的距离定义为:),2,1(22NkPPkk人脸分类的规则如下:(1)、若,,kk则输入图像中包含的是未知人脸。(2)、若,}min{k则输入图像为库中第k个人的人脸。流程图如下:三、实验结果与分析1、首先,我们从人脸库中的二十个人脸样本集每个人脸样本集中抽取两个样本组成一个包含四十个样本的训练样本集,并将这二十个人脸样本集中每个人脸样本集剩下的8个人脸样本作为测试样本集待测试。测试结果如下:测试结果样本集错误个数错误率S1450%S200S3112.5%S4112.5%S500S600S700S800S900S10225%S11225%S1200S13225%S14225%S1500S16337.5%S178100%S1800S19225%S20337.5%2、下面是,从四十个人的人脸样本集中每个人脸样本集中选择一个样本构成一个样本数为四十的训练样本集,用第一次实验的测试样本集继续进行测试,测试结果如下:测试结果样本集错误个数错误率S1450%S200S3225%S400S5450%S600S700S800S900S108100%S11225%S1200S13225%S14225%S15337.5%S16562.5%S178100%S1800S19675%S20450%分析:从上面两次实验的结果比较可以发现,实验二的错误率比实验一高,原因有两个:一是实验一中得训练样本是由二十个人脸样本集各抽出两个人脸样本组成的;二是实验二中所用训练样本集来自四十个不同人的人脸样本集,所以出现错误的可能性会加大。四、心得体会本次实验拿到题目之后,我们首先从书上以及其它资料上了解了K-L变换,弄懂了它的原理以及做法,然后从网上下载了人脸库,并根据设计好的实验步骤用MATLAB编写程序,最后对测试样本进行测试,得到结果并进行分析。本次实验时在编写程序上我们已经能够很熟练了,并且出现的错误也很少了。程序代码:1、用20个人每人两个人脸样本组成训练样本N=40;X=zeros(92*112,80);i=1;img1=imread('C:\Users\Administrator\Desktop\renlianXL\1.pgm','pgm');forj=1:10304X(j,i)=img1(j);endi=i+1;%依次进行读入训练样本集forj=1:10304X(j,i)=img60(j);endSUM=sum(X');XP=1/N*SUM;XP=XP';A=zeros(10304,40);fori=1:40A(:,i)=X(:,i)-XP;endB=A'*A;[VVp]=eig(B);%下面需要将vi和di重新排列,保证按从大到小d=zeros(40,40);V=zeros(40,40);fori=1:40d(i,i)=p(41-i,41-i);V(:,i)=VV(:,41-i);enddd=0;forj=1:40dd=dd+d(j,j);%计算所有特征值之和endz=40;fora=1:40s=0;forj=1:as=s+d(j,j);endifs/dd=0.99&&a=z%求出占特征值总和的前z个特征值z=a;endendW=zeros(10304,z);forj=1:zW(:,j)=A*V(:,j)*1/sqrt(d(j,j));%此时的W是特征脸空间endP=zeros(z,40);fori=1:40P(:,i)=W'*A(:,i);%将每一幅人脸与平均脸的差值矢量投影到特征脸空间endsita1=0;fori=1:40forj=1:40ss=norm(P(:,i)-P(:,j));ifsssita1sita1=ss;endendendsita=0.5*sita1;img01=imread('C:\Users\Administrator\Desktop\renlianCS\s4\1.pgm','pgm');I=zeros(10304,1);forj=1:10304I(j,1)=img01(j);endP01=W'*(I-XP);P02=W*P01+XP;sigma=norm(I-P02);sigma1=zeros(z,1);fork=1:40sigma1(k,1)=norm(P01-P(:,k));end[sigma2,z0]=min(sigma1);ifsigma=sitafprintf('输入图像不是人脸图像');elseifsigma2=sitafprintf('输入图像包含未知人脸');elsefprintf('输入图像为库中的第%d个人脸',z0)endend2、四十个人脸样本集中各出一个人脸样本组成人脸样本集N=40;X=zeros(92*112,40);i=1;img1=imread('C:\Users\Administrator\Desktop\renlianXL\1.pgm','pgm');forj=1:10304X(j,i)=img1(j);endi=i+1;%依次进行,读入训练样本集。forj=1:92*112X(j,i)=img40(j);endSUM=sum(X');XP=1/N*SUM;XP=XP';A=zeros(10304,40);fori=1:40A(:,i)=X(:,i)-XP;endB=A'*A;[VVp]=eig(B);%下面需要将vi和di重新排列,保证按从大到小d=zeros(40,40);V=zeros(40,40);fori=1:40d(i,i)=p(41-i,41-i);V(:,i)=VV(:,41-i);enddd=0;forj=1:40dd=dd+d(j,j);%计算所有特征值之和endz=80;fora=1:40s=0;forj=1:as=s+d(j,j);endifs/dd=0.99&&a=z%求出占特征值总和的前z个特征值z=a;endendW=zeros(10304,z);forj=1:zW(:,j)=A*V(:,j)*1/sqrt(d(j,j));%此时的W是特征脸空间endP=zeros(z,40);fori=1:40P(:,i)=W'*A(:,i);%将每一幅人脸与平均脸的差值矢量投影到特征脸空间endsita1=0;fori=1:40forj=1:40ss=norm(P(:,i)-P(:,j));ifsssita1sita1=ss;endendendsita=0.5*sita1;img01=imread('C:\Users\Administrator\Desktop\renlianCS\s4\10.pgm','pgm');I=zeros(10304,1);forj=1:10304I(j,1)=img01(j);endP01=W'*(I-XP);P02=W*P01+XP;sigma=norm(I-P02);sigma1=zeros(z,1);fork=1:40sigma1(k,1)=norm(P01-P(:,k));end[sigma2,z0]=min(sigma1);ifsigma=sitafprintf('输入图像不是人脸图像');elseifsigma2=sitafprintf('输入图像包含未知人脸');elsefprintf('输入图像为库中的第%d个人脸',z0);endend
本文标题:基于KL变换的人脸识别
链接地址:https://www.777doc.com/doc-5900046 .html