• 大小: 31.46MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-21
  • 语言: Matlab
  • 标签: PCA  降维  人脸识别  

资源简介

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);%预分配数据可以加速数据读取,矩阵的行数是训练数据的个数,列数是图片的维度,建0矩阵
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);
%imshow(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);%预分配数据可以加速数据读取,建0矩阵
test_data=zeros(1row*column);%预分配数据可以加速数据读取,建0矩阵
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

%****************选择一幅图片读入*****************%
   file_test_name=(‘E:\\学习资料\\论文\\图像\\PCA人脸降维\\人脸识别\\dataset\\Testing\\00020fb010_930831.bmp‘);
   img_data=imread(file_test_name);
   
   figure(1);
   subplot(121);
    
   
   imshow(img_data);
   title(‘测试图片‘);
    
    
   img_data=img_data(1:row*column);%将一幅图片转换成一个行向量
   test_data(1:)=img_data;
%{
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(1:)-train_data_reduced(1:));
    
    position=1;
for j=2:train_num
        distance=norm(test_data_reduced(1:)-train_data_reduced(j:));
        if min>distance
            min=distance;
  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-12-08 15:51  PCA单幅图像匹配\
     目录           0  2015-12-08 15:51  PCA单幅图像匹配\matlab\
     文件        4673  2015-12-07 23:34  PCA单幅图像匹配\matlab\my_face_recognition.m
     文件         351  2015-12-07 19:39  PCA单幅图像匹配\matlab\test_energy.m
     文件         320  2015-12-07 19:38  PCA单幅图像匹配\matlab\test_face_num.m
     文件         355  2015-12-07 19:37  PCA单幅图像匹配\matlab\train_face_num.m
     目录           0  2012-06-03 15:11  人脸识别\
     目录           0  2012-06-03 15:08  人脸识别\dataset\
     目录           0  2012-06-03 15:08  人脸识别\dataset\Testing\
     文件       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
............此处省略2374个文件信息

评论

共有 条评论