• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-17
  • 语言: Matlab
  • 标签: 源码  工具  

资源简介

NULL 博文链接:https://gongwanlu.iteye.com/blog/1018161

资源截图

代码片段和文件信息

%**********************************************
% Aim : The first AI program homework
% title : PCA for face recognition
% Author : GongWanlu & Hufei
% Version : 1.0 final
% Submit Time : 2011-04-07
%**********************************************

% %%%%%%%%%%%%%%%%%%%%%%INITIAL
clear all
clc
close all

% %%%%%%%%%%%%%%%%%%%%%%Some variables according to the Yale Face DB
Num_subject = 15;
Num_image = 11;
Train_num_image = 8;                    %for every subject we choose 8 to train
Test_num_image = 9;                     %choose the left 3 images to test

% %%%%%%%%%%%%%%%%%%%%%%Load Data
Data = [];
for i=1:Num_subject
    for j=1:Train_num_image
        path = sprintf(‘FaceDB_yaleA/%03d/%02d.jpg‘ij);
        pic = imread (path);            %read one picture
        
        %Make Data Add pic into Data
        pic_line = pic(1:147*137);      %The pic size is 147*137
                                        %pic_line is 1*N N=147*137. from up to
                                        %downleft to right.
                                        %Reshape 2D image to 1D image
                                        %vectors
        Data = [Data;double(pic_line)]; %add pic_line into Data
    end
end
% End of Load Data

%%%%%%%%%%%%%%%%%%%%%%%Substract mean from Data and make covariance from centering Data
samplemean = mean(Data);                %mean pic 1*N

for k = 1:(Num_subject * Train_num_image)
    xmean(k:)=Data(k:)-samplemean;    %Normalize
end                                     %xmean is M*N each line is one pic
                                        %data(mean data) be normalized
sigma = xmean *xmean‘;                  %M*M  here is 120*120
[V D]=eig(sigma);                       %calculate the eigenvalue&eigenvector
                                        %eigenvalue in Dand vectors in V
 D1=diag(D);                            %the eigenvalues
 
 %%%%%%%%%%%%%%%%%%%%%%%% Sorting and eliminating eigenvalues
 % At first : sort desc
 Dsort=flipud(D1);
 Vsort=fliplr(V);
 
 %choose part eigenvalues
 Dsum = sum(Dsort);                     %sum of the eigenvalueswe only choose 80%
                                        %we have different ways to choose
                                        %eigenvalues we need90%or>1……
temp_sum = 0;
p = 0;
while(temp_sum/Dsum<0.8)
    p = p+1;
    temp_sum = sum(Dsort(1:p));
end
%End of sort part

 %%%%%%%%%%%%%%%%%%%%%%%Train Step: get the coordinate system
 i=1;
 while(i<=p && Dsort(i)>0)
     face_base(:i) = Dsort(i)^(-1/2) * xmean‘ * Vsort (:i);
     i=i+1;
 end
 % Dsort(i)^(-1/2) used to normalize make variance=1
 % face_base is N*p
 % xmean‘ * Vsort (:i); is change small matrix to big matrix. CHACHENG(Chinese)
 
 %next sentence is vary important is our train result
 allcoor = Data * face_base;
 %End of training
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Draw part
  %draw CDF
 x = Dsort (1:p);
 x = flipud (x);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4982  2011-04-08 00:32  PCA.m

----------- ---------  ---------- -----  ----

                 4982                    1


评论

共有 条评论