• 大小: 23.76MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-07-09
  • 语言: Matlab
  • 标签: PCA  人脸识别  matlab  

资源简介

本matlab程序实现了基于PCA的人脸识别,并提供了相应的论文和测试数据集,并给出了测试结果。

资源截图

代码片段和文件信息

function [accuracy]=my_face_recognition( train_dirtest_dirtrain_numtest_numenergyb )
%该函数实现了利用PCA方法进行人脸识别的过程
%Input
%       train_dir:训练数据集的目录
%       test_dir:测试数据集的目录
%       train_num:选择的训练数据集的个数
%       test_num:要测试的数据集的个数,要小于训练数据集个数

if train_num    fprintf(‘训练数据集要大于测试数据集!\n‘);
    return ;
end


%因为文件大小固定,所以在此我们设置矩阵的行列为定值
row=142;
column=120;
train_data=zeros(train_numrow*column);%预分配数据可以加速数据读取,矩阵的行数是训练数据的个数,列数是图片的维度
train_files=dir(train_dir);%获取训练目录下的所有文件,获得的每一个文件都是一个结构体,我们需要的是其中的name属性。第一个和第二个文件分别表示当前目录和父目录,需要跳过
for i=1:train_num
    file_name=sprintf(‘%s\\%s‘train_dirtrain_files(i+2).name);%这里需要加双斜杠
    
    img_data=imread(file_name);
    %[row column]=size(img_data);
    img_data=img_data(1:row*column);%将读取的数据转成一个行向量
    train_data(i:)=img_data;%将该行向量添加到训练集中
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%求平均脸,与人脸识别无关,只是一个测试
imgmean=mean(train_data);
size(imgmean);
mean_img=reshape(imgmeanrowcolumn);
mean_img=uint8(mean_img);
imwrite(mean_img‘D:\1.bmp‘);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%{
if b==1
    for i=1:test_num
        train_data(i:)=train_data(i:)-imgmean;
    end
end
%}

%进行主成份分析,返回的结果为
%   COEFF:特征向量
%   latent:特征值,按由大到小的顺序排列
%当数据的维度大于数据个数时,通过在函数后面添加参数‘econ’可以加速计算
[COEFF~latent] = princomp(train_data‘econ‘);

%保存的维度(特征值)个数使图像保存的能量大于95%
dimension_left=0;
cum_percent=cumsum(latent)/sum(latent);
for i=1:length(cum_percent)
    if cum_percent(i)>=energy
        dimension_left=i;
        break;
    end
end
%fprintf(‘dimension left is %d\n‘dimension_left);


%将训练数据集进行降维
train_data_reduced=train_data*COEFF(:1:dimension_left);

%读取测试数据集
test_data=zeros(train_numrow*column);%预分配数据可以加速数据读取
test_files=dir(test_dir);%获取训练目录下的所有文件,获得的每一个文件都是一个结构体,我们需要的是其中的name属性。第一个和第二个文件分别表示当前目录和父目录,需要跳过
for i=1:test_num
    file_name=sprintf(‘%s\\%s‘test_dirtest_files(i+2).name);%这里需要加双斜杠
    img_data=imread(file_name);
    img_data=img_data(1:row*column);%将读取的数据转成一个行向量
    test_data(i:)=img_data;%将该行向量添加到训练集中
end

%{
if b==1
    for i=1:test_num
        test_data(i:)=test_data(i:)-imgmean;
    end
end
%}

%将测试数据集进行降维
test_data_reduced=test_data*COEFF(:1:dimension_left);

accuracy=0;
for i=1:test_num
    %通过计算向量二阶范数的方法计算欧式距离
    min=norm(test_data_reduced(i:)-train_data_reduced(1:));
    position=1;
    for j=2:train_num
        distance=norm(test_data_reduced(i:)-train_data_reduced(j:));
        if min>distance
            min=distance;
            position=j;
        end
    end
    %fprintf(‘test_file:%strain_file;%s\n‘test_files(i+2).nametrain_files(position+2).name);
    if same_person(test_files(i+2).nametrain_files(position+2).name)==1
        accuracy=accuracy+1;
    else
        %fprintf(‘test_file:%strain_file;%s\n‘test_files(i+2).nametrain_files(position+2).name);
    end
end
accuracy=accuracy/test_num;
fprintf(‘Accuracy is %fenergy %fdimension left %d\n‘accuracyenergydim

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00001fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00002fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00003fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00004fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00005fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00006fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00007fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00008fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00009fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00010fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00011fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00012fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00013fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00014fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00015fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00016fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00017fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00018fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00019fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00020fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00021fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00022fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00023fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00024fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00025fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00026fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00027fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00028fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00029fb010_930831.bmp

     文件      18118  2010-05-24 13:21  人脸识别\dataset\Testing\00030fb010_930831.bmp

............此处省略2377个文件信息

评论

共有 条评论