您好,欢迎访问三七文档
PCA人脸识别二十一组YHWLWH算法介绍主成分析法(pca)是模式识别中一种常用的线性组合方法,该方法依据样本点在空间中的位置分布,把样本点在多维空间中最大变换方向,即方差最大方向,作为判断响亮来实现图像的数据压缩和特征提取三个主要部分1.图像读取图像库中每幅图像的像素值为112*92=10304,训练集图像为40*5=200幅,所以我们构建10304行、200列矩阵来读入训练数据。此时,每一列存储一副图像的数据,每一行代表一类特征。imdata=zeros(112*92,40*ph);fori=1:40forj=1:phaddr=strcat('D:\study\学习\模式识别\实验四\1107\orl_faces\s',num2str(i),'/',num2str(j),'.pgm');a=imread(addr);%从地址中读入图像b=a(1:112*92);%把图像a矩阵按列顺序转为行向量bimdata(:,ph*(i-1)+j)=b';%把b的转置矩阵存放到imdata矩阵的第ph*(i-1)+j列endend2.获取主成分(1)坐标系平移此步需要先计算出图像的平均值(列向量),然后用每一幅图像(列向量)减去平均向量。(2)确定满足特征值阈值的最大特征个数因为10304*10304维矩阵数据量过于庞大,所以改用矩阵im_pre的转制求得200*200维特征矩阵。之后计算出200个特征值排序,求和确定最大的k个特征值之和占特征值总和的90%时的k值。%计算协方差矩阵(3)计算需要的特征向量对应(2)中计算出的特征个数,取出相应的特征向量。imaverage=mean(imdata,2);%按行求平均mean(a,2)按列mean(a)%坐标平移im_pre=zeros(112*92,40*ph);fori=1:40*phim_pre(:,i)=imdata(:,i)-imaverage;end%计算协方差矩阵W=im_pre'*im_pre;%200*200%确定达到要求时的特征向量个数d=eigs(W,40*ph);%计算特征值sum1=0;fori=40*ph:-1:1sum1=sum1+d(i);ifsum1/sum(d)=thresholdk=40*ph-i+1;break;endend%计算特征向量[V,d]=eigs(W,k);%降到200*k维V=im_pre*V;%还原成10304*k3.对测试集进行测试(1)将训练集图像和测试集图像映射到特征空间我们要把训练集和测试集在主成分的特征空间内进行对比,所以首先要映射。(2)最小距离计算根据题目要求,这里采用最小欧氏距离判断图像属于哪一类。构造了figureNum函数进行判断(3)判决测试之后需要对正确率进行计算,这里我们要确定算法所判断结果与真实结果是否一致。在这里用除以同类个数并取整的方法进行判断。算法介绍(1)将训练集图像和测试集图像映射到特征空间featuretrain=zeros(k,40*ph);fori=1:40*ph%映射训练集图像add=VT'*im_pre(:,i);featuretrain(:,i)=add;end(2)最小距离计算functiontype=figureNum(test,t1,train,num)type=1;T=norm(test(:,t1)-train(:,1));%初始默认第一列最匹配fort2=1:numdistance=norm(test(:,t1)-train(:,t2));if(distanceT)type=t2;T=distance;endendend最后返回type值代表算法识别结果。算法介绍(3)判决测试count=0;fort=1:40*(10-ph)type=figureNum(featuretest,t,featuretrain,40*ph);%计算匹配个数if(round(type/ph+0.4)==round(t/(10-ph)+0.4))count=count+1;endend结果分析1.计算得到达90%的特征脸数为70张,如下图特征人脸从上图来看,从1到70张特征脸人脸的特征逐渐衰减,因此可以说是其含有的人脸信息不断减少,也就对应了我们所说的按照特征大小来排序。改变阈值,计算得下表算法介绍通过上表可以分析知,对于本训练数据来说,阈值下降到60%并不会给模型带来非常大的影响,但特征脸的个数下降了80%以上,因此在计算量较大的情况下,我们可以对阈值稍稍降低来提升计算资源的利用效率,从而使计算速度加快。平均人脸平均人脸实现流程
本文标题:PCA-人脸识别
链接地址:https://www.777doc.com/doc-1992183 .html