• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: Matlab
  • 标签: matlab  人脸识别  

资源简介

基于PCA的人脸识别算法,matlab实现,使用的是ORL数据库,需要配合使用

资源截图

代码片段和文件信息

function FaceRecognition  
clear  % calc xmeansigma and its eigen decomposition    
close all  
allsamples=[];%所有训练图像   
for i=1:40      
    for j=1:5          
        if(i<10)  
           a=imread(strcat(‘E:\ORL_92x112\00‘num2str(i)‘0‘num2str(j)‘.bmp‘));       
        else  
            a=imread(strcat(‘E:\ORL_92x112\0‘num2str(i)‘0‘num2str(j)‘.bmp‘));    
        end            
        b=a(1:112*92); % b是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右          
        b=double(b);          
        allsamples=[allsamples; b];  % allsamples 是一个M * N 矩阵,allsamples 中每一行数据代表一张图片,其中M=200     
    end  
end  
samplemean=mean(allsamples); % 平均图片,1 × N    
figure%平均图  
imshow(mat2gray(reshape(samplemean11292)));  
for i=1:200   
    xmean(i:)=allsamples(i:)-samplemean; % xmean是一个M × N矩阵,xmean每一行保存的数据是“每个图片数据-平均图片”   
end;     
% figure%平均图  
% imshow(mat2gray(reshape(xmean(1:)11292)));  
sigma=xmean*xmean‘;   % M * M 阶矩阵   
[vd]=eig(sigma);  
d1=diag(d);   
[d2index]=sort(d1); %以升序排序   
cols=size(v2);% 特征向量矩阵的列数  
  
for i=1:cols        
    vsort(:i) = v(: index(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量每一列构成一个特征向量        
    dsort(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));       
end  
a=1:1:200;  
for i=1:1:200  
y(i)=sum(dsort(a(1:i)) );  
end  
figure  
y1=ones(1200);  
plot(ay/dsumay1*0.9‘linewidth‘2);  
grid  
title(‘前n个特征特占总的能量百分比‘);  
xlabel(‘前n个特征值‘);  
ylabel(‘占百分比‘);  
figure  
plot(adsort/dsum‘linewidth‘2);  
grid  
title(‘第n个特征特占总的能量百分比‘);  
xlabel(‘第n个特征值‘);  
ylabel(‘占百分比‘);  
i=1;  % (训练阶段)计算特征脸形成的坐

评论

共有 条评论