www.pudn.com > pca(2).rar > pca(1).m


allsamples=[]; 
for i=12:14 
	for j=1:2 
	a=imread(strcat('三种剪切灰度\',num2str(i),'\',num2str(j),'.bmp')); 
	 b=a(1:112*92); 
	b=double(b); 
	allsamples=[allsamples;b]; 
	end 
end 
samplemean=mean(allsamples); 
for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; 
end; 
%获取特征植及特征向量 
sigma=xmean*xmean'; 
[v d]=eig(sigma); 
d1=diag(d); 
%按特征值大小以降序排列 
dsort=flipud(d1); 
vsort=fliplr(v); 
%以下选择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 
i=1; 
% (训练阶段)计算特征脸形成的坐标系 
base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2));  
allcoor=allsamples*base; 
accu = 0; 
%测试过程 
for i=12:14 
	for j=2:3%读入40 x 5 副测试图像 
	a=imread(strcat('三种剪切灰度\',num2str(i),'\',num2str(j),'.bmp')); 
	b=a(1:10304); 
	b=double(b); 
	tcoor=b*base; 
	for k=1:200 
		mdist(k)=norm(tcoor-allcoor(k,:)); 
	end; 
  %三阶近邻 
[dist,index2]=sort(mdist);  
        class1=floor( (index2(1)-1)/5 )+1;  
        class2=floor((index2(2)-1)/5)+1;  
        class3=floor((index2(3)-1)/5)+1;  
        if class1~=class2 && class2~=class3  
            class=class1;  
        elseif class1==class2  
            class=class1;  
        elseif class2==class3  
            class=class2;  
        end;  
        if class==i  
            accu=accu+1;  
        end;  
    end;  
end;  
accuracy=accu/200 % 输出识别率