www.gusucode.com > 2dpca的matlab源代码 > 2dpca的matlab源代码/Untitled1.m
%进行二维PCA人脸识别 clear all;clc; %选择训练样本路径 TrainPath=uigetdir('D:\Matlab编程实例\pca和fisher算法用于人脸识别\2dpca的matlab源代码',... '请选择训练样本文件夹'); %选择测试样本路径 TestPath=uigetdir('D:\Matlab编程实例\pca和fisher算法用于人脸识别\2dpca的matlab源代码',... '请选择测试样本文件夹'); TrainFiles=dir(TrainPath); s=size(TrainFiles,1); %计算训练样本个数 Train_Number=0; for i = 1:size(TrainFiles,1) if not(strcmp(TrainFiles(i).name,'.')|strcmp(TrainFiles(i).name,'..')) Train_Number=Train_Number+1; % Number of all images in the training database end end %计算测试样本的个数 TestFiles=dir(TestPath); Test_Number=0; for i = 1:size(TestFiles,1) if not(strcmp(TestFiles(i).name,'.')|strcmp(TestFiles(i).name,'..')) Test_Number=Test_Number+1; % Number of all images in the training database end end %读取训练集第一个图像,得到其尺寸,初始化图像矩阵 str=strcat(TrainPath,'\1.jpg'); img=imread(str); img=rgb2gray(img); [height,width]=size(img); trainData=CreateDatabase(TrainPath,height,width,Train_Number); testData=CreateDatabase(TestPath,height,width,Test_Number); numvecs=10; [eigvectors,eigvalues,meanData,newTrainData,newTestData]=TDPCA(trainData,testData,height,width,numvecs); Recnum=0; for i=1:Test_Number gc=[]; for j=1:Train_Number temp=norm( newTestData(i,:)-newTrainData(j,:),'fro'); gc=[gc temp]; end [Euc_dist_min,Recognized_index]=min(gc);%得到差值最小的图像的索引号 str=strcat(TestPath,'\',num2str(i),'.jpg'); disp(['被测试对象:',str]); if ceil(Recognized_index/2)==i disp('识别成功!'); Recnum=Recnum+1; else disp('识别失败!!!') str=strcat(TestPath,'\',num2str(i),'.jpg'); subplot(121);imshow(str);title('被识别图像'); str=strcat(TrainPath,'\',num2str(Recognized_index),'.jpg'); subplot(122);imshow(str);title('被误识别为'); disp(['别误识别为:',str]); pause; end end disp(['正确识别率:',num2str(Recnum/10*100),'%']);