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),'%']);