clear all
clc
close all
%选择训练样本路径
TrainDatabasePath = uigetdir('E:\VOA\ORL', 'Select training database path' );
%选择测试样本路径
TestDatabasePath = uigetdir('E:\VOA\ORL', 'Select test database path');
c1=clock;
%生成测试数据集
%T = CreateDatabase(TrainDatabasePath);
TrainFiles = dir(TrainDatabasePath);
class_Number = 0;
s=size(TrainFiles,1);
%计算训练样本个数
for i = 1:size(TrainFiles,1)
if not(strcmp(TrainFiles(i).name,'.')|strcmp(TrainFiles(i).name,'..')|strcmp(TrainFiles(i).name,'README'))
class_Number = class_Number + 1; % Number of all images in the training database
end
end
%读取训练集第一个图像,得到其尺寸,初始化图像矩阵
str = strcat(TrainDatabasePath,'\s1.\1.jpg');
img = imread(str);
[irow,icol] = size(img);
A=zeros(irow,icol,2);
%合计有Train_Number人的目录,每个目录存放某人的10幅人脸图像,取前n副图像做训练样本
n=str2double(inputdlg('please input NumImaTra(must be int number)','INPUT NumImaTra',1,{'5'}));%训练样本下面读入人脸图像,共四十人,每人十幅图像,图像大小为112*92
d=str2double(inputdlg('please input Characteristic dimension(must be int number)','INPUT Characteristic dimension',1,{'2'}));
for i = 1 : class_Number
topdir = int2str(i);
topdir = strcat(TestDatabasePath,'\s',topdir);
for j= 1 : n
%for j= 1 :2 :9
str = int2str(j);
str = strcat(topdir,'\',str,'.jpg');
img = imread(str);
A(:,:,n*(i-1)+j) = img;
end
end
%得到训练样本的个数Train_Number
Train_Number = size(A,3);
%求所有训练样本向量的均值 M
M=mean(A,3);
%求图像散布矩阵Gt
Gt=zeros(icol,icol);
for i = 1 : Train_Number
temp = A(:,:,i)-M;
Gt = Gt + temp'*temp;
end
Gt=Gt/Train_Number;
[V D] = eigs(Gt,d);
%PCA空间投影图像
%V = orth(V);
ProjectedImages = zeros(irow,d);
for i = 1 : Train_Number
ProjectedImages(:,:,i) = A(:,:,i)*V;
end
c2=clock;
fprintf('特征抽取时间:');etime(c2,c1) %特征抽取时间
%已识别测试集的数目Recnum
c3=clock;
Recnum=0;
for i = 1 : class_Number
topdir = int2str(i);
topdir = strcat(TestDatabasePath,'\s',topdir);
for j= n+1:10
%for j= 2 :2 :10
str = int2str(j);
TestImage = strcat(topdir,'\',str,'.jpg'); %测试样本路径
%测试样本原始数据
im = imread(TestImage);
%测试样本的投影
ProjectedTestImage = double(im)*V;
gc=[];
% for t=1 : class_Number
%mk=mean( ProjectedImages( :,:,(t-1)*n+1:t*n), 3); %此处参数t*n,n是前n个样本作为训练样本,
%temp = norm( ProjectedTestImage - mk );
%gc=[gc temp];
% end
for i=1 : Train_Number
temp = norm( ProjectedTestImage - ProjectedImages( :,:,i ),'fro');
gc=[gc temp];
end
[dist_min , Recognized_index1] = min(gc);
Recognized_index1 = floor((Recognized_index1-1)/n)+1;
OutputName = Recognized_index1;
OutputName =strcat(TestDatabasePath,'\s',int2str(OutputName));
%如果测试样本分类正确,则 Recnum加1
if(strcmp(OutputName,topdir)==1)
Recnum = Recnum+1;
end
%返回测试样本和其所匹配的样本信息
%disp(TestImage);
Recognized_index1 = strcat('Matched image No is : ',int2str(Recognized_index1)) ;
%disp( Recognized_index1 );
str = strcat('Matched image is : ',OutputName);
% disp(str);
end
end
str=strcat('recognition count : ', int2str(Recnum));
disp(str );
str=strcat('recognition rate:',num2str(Recnum/(class_Number*(10-n))));
disp(str);
c4=clock;
fprintf('识别时间:');etime(c4,c3) %识别时间
2DPCA 两维的主成分分析法人脸识别
5星 · 超过95%的资源 需积分: 13 168 浏览量
2011-05-09
20:40:46
上传
评论 1
收藏 2KB RAR 举报
andrew5512186
- 粉丝: 1
- 资源: 5
最新资源
- delphi实现DBGrid全选和反选功能
- 25C11F41-2B2A-4D1A-AAA8-7C654526B129.pdf
- Android Studio Jellyfish(android-studio-2023.3.1.18-cros.deb)
- MVC+EF框架+EasyUI实现权限管理源码程序
- python第66-75天,Day66-75.rar
- python后端服务project-of-tornado.rar
- python测验,hello-tornado.rar
- 基于SpringBoot+Vue3快速开发平台、自研工作流引擎源码设计.zip
- docker安装部署全流程
- 基于树莓派的人脸识别系统python源码+项目部署说明+超详细代码注释.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页