• 大小: 5KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: Matlab
  • 标签: 2dpca  人脸识别  

资源简介

这是一个基于pca的二维人脸识别的matlab代码

资源截图

代码片段和文件信息

%This program is writen by zhangming on 2009-5-10
%this is my homeworke of machine leaning
%my e-mail: zm_fred@163.com
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
clc
close all
%选择训练样本路径
TrainDatabasePath = uigetdir(‘D:\ORL人脸数据库‘ ‘Select training database path‘ );
%选择测试样本路径
TestDatabasePath = uigetdir(‘D:\ORL人脸数据库‘ ‘Select test database path‘);
%生成测试数据集
%T = CreateDatabase(TrainDatabasePath);
TrainFiles = dir(TrainDatabasePath);
class_Number = 0;
s=size(TrainFiles1);
%计算训练样本个数
for i = 1:size(TrainFiles1)
    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                                        %class_Number=40      
%读取训练集第一个图像,得到其尺寸,初始化图像矩阵
str = strcat(TrainDatabasePath‘\s1\1.bmp‘);
img = imread(str);
[irowicol] = size(img);
A=zeros(irowicol2);
%合计有Train_Number人的目录,每个目录存放某人的10幅人脸图像取前n副图像做训练样本
n=5;
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‘.pgm‘);
        img = imread(str);
        A(::n*(i-1)+j) = img; 
    end
end
%得到训练样本的个数Train_Number
Train_Number = size(A3);
%求所有训练样本向量的均值 M
M=mean(A3);

%求图像散布矩阵Gt
Gt=zeros(icolicol);
for i = 1 : Train_Number
    temp = A(::i)-M;
    Gt =  Gt + temp‘*temp;
end
Gt=Gt/Train_Number;
d = 10;
[V D] = eigs(Gtd);
%PCA空间投影图像
%V = orth(V);
ProjectedImages = zeros(irowd);
for i = 1 : Train_Number
    ProjectedImages(::i) = A(::i)*V;    
end
%已识别测试集的数目Recnum
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‘.pgm‘); %测试样本路径
         %测试样本原始数据
        im = imread(TestImage);
        %测试样本的投影
        ProjectedTestImage = double(im)*V;
       
        gc=[];
 

评论

共有 条评论