1 简介
PCA(主成分分析)与SVM(支持向量机)技术对于人脸识别而言非常重要,文章结合PCA与SVM来设计一个人脸识别系统.在MATLAB编译环境下,分别探讨PCA技术与SVM技术,总结出一种快速PCA算法以及SVM的测试与训练算法;从orl_faces人脸库中选取训练数据与测试数据进行训练与测试,对其中重要的参数进行调优,最终达到90%的识别成功率.再经真实人脸的训练与测试,达到了73%的真实人脸识别成功率.
2 部分代码
%-----人脸匹配
%-----输入:细胞结构体数据Cell_all(包括样本集合,特征值与特征向量)
% 想要识别的人脸(彩色图像)
%-----输出:匹配的结果
%-----------------------------------
function FaceFind = facefind(Cell_all,img2find)
%细胞结构体的调用
img_all = Cell_all{1};
[m1,n1] = size(img_all);
V = Cell_all{2};
D = Cell_all{3};
namud = 0.5; %图片缩小的倍数
%对需要识别的图像进行灰度等的处理
pic = rgb2gray(img2find); %灰度处理
pic = imresize(pic,namud); %变换大小
[m2,n2] = size(pic);
pic = reshape(pic,1,m2*n2); %重新排列
pic = double(pic)/255;
pic_done = pic*V*D; %处理完的数据
%% 归一化 --》避免运算出现特别大的数据
Ma = max(max(pic_done));
Mi = min(min(pic_done));
pic_done = pic_done/(Ma - Mi);
%%
for i=1:m1
% 归一化 --》避免运算出现特别大的数据
Ma1 = max(img_all(i,:));
Mi1 = min(img_all(i,:));
img_all(i,:) = img_all(i,:)/(Ma1 - Mi1);
%求范数--》把他们之间的几何距离作为评判与哪一个人脸最近的标准
error(i) = norm(img_all(i,:)-pic_done);
end
%找到其中最近的就认为是所要识别的人脸
FaceFind = find(error == min(error));
% FaceFind = error;
3 仿真结果
4 参考文献
[1]胡沐晗. "基于PCA和SVM的人脸识别系统." 计算机时代 12(2017):5.
部分理论引用网络文献,若有侵权联系博主删除。
5 MATLAB代码与数据下载地址
见博客主页