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.