资源简介
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个文件信息
相关资源
- 基于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特征提取的笑脸表情识别代码
- MATLAB人脸识别PCA实现
- 人脸识别MATLAB,亲测可运行
- PCA完整程序MATLAB
- 人脸识别MATLAB源程序
- 基于PCA的人脸识别代码MATLAB版
- KPCA用于TE过程的程序matlab)
- 像素级图像融合算法主成分分析-pca算
- PCA Matlab
评论
共有 条评论