资源简介
本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个文件信息
- 上一篇:经典手眼标定算法matlab代码
- 下一篇:MATLAB之父++编程实践++中译本
相关资源
-
PCA SPE T2 Contribution Simuli
nk matlab - oldpac.rar
- 基于ORL库和PCA方法的人脸识别系统m
- 基于神经网络的人脸识别_检测MATLAB模
- PCA主成分分析实现方法Matlab
- 人脸识别 MATLAB代码
- BP神经网络的人脸识别matlab代码
- PCA人脸降维与单幅图像识别
- 基于MATLAB 的人脸识别
- 基于PCA与KPCA的SVM人脸识别程序含数据
- 模式识别PCA NMF LDA GMM算法代码
- 基于PCA与SVM的人脸识别matlab代码
- 基于CNN的人脸识别matlab版本.rar
- LDA人脸识别matlab code
- 降维与特征选择
- labview_pca
- 用LDA和PCA模式识别方法对人脸特征进
- PCA 主成分分析代码 MATLAB版
- 田纳西伊斯曼数据集及PCA主元分析的
- matlab手写卷积神经网络人脸识别
- PCA最近邻分类方法人脸识别
- PCA人脸识别matlab代码
-
人脸数据集 Extended Yale B Databa
seEYa - pca matlab代码 数据降维
- 基于MATLAB的人脸识别源码
- PCA故障诊断matlab实现200654
- 人脸识别原理与实战:以MATLAB为工具
- LDA人脸识别MATLAB含k近邻算法
- PCA主成分分析法和ICA独立成分分析法
- 基于pca特征提取的笑脸表情识别代码
评论
共有 条评论