【图像识别】基于PCA和SVM的人脸识别关键技术研究与实现matlab代码 1 简介人脸识别是计算机视觉和图像模式识别领域的一个重要技术.主成分分析(PCA)是人脸图像特征提取的一个重要算法.而支持向量机(SVM)有适合处理小样本问题,高维数及泛化性能强等多方面的优点.文章将两者结合,先用PCA算法进行人脸图像特征提取,再用SVM进行分类识别.通过基于ORL人脸数据库的计算机仿真实验表明,该方法具有很好的可行性和实际意义.主成分分析Principal Component Analysis算法简称 PCA是一种有效的特征提取方法算法将人脸图像转换成一个列向量经过变换后可以有效降低其维数又能保留有效的识别信息这些有效信息构成了一组特征图像并且这些信息对人脸的光照、表情、姿态等具有相当的不敏感性。PCA 变换的目的是通过线性变换找到一组最优的单位正交向量基即主成分用线性组合来重构与原样本均方差的误差最小的一种变换方法。数学上PCA 通过求解投影矩阵来获得低维度的特征向量。对于某 K 维向量来说在原有的K 维坐标中它的特征向量在各个维度上的变化均不明显我们可以通过改变其所处的坐标轴来使它的特征向量在某些坐标轴上的变化更加明显。例如在X 轴、Y 轴平面上将一个椭圆倾斜放置在第一象限内X、Y 轴上的投影变化度都不是很大但在将椭圆的长轴作为 X 轴后椭圆在 X 轴的投影范围变得更大方差也更大但在 Y 轴的投影范围变得更小方差也更小。这时我们就可以消除掉 Y 轴的特征信息只保留 X 轴的特征信息这便完成了高维信息向低维的转换。通过 PCA 算法提取特征向量后需要利用分类器根据样本的特征向量进行分类处理以判别当前人脸的身份。本实验中使用了近年非常流行的SVM支持向量机分类器。分类器的工作分两步 训练和测试。先对样本进行学习将样本进行预判别将提取的特征向量进行学习和分类将类分好后再将测试对象经过分类器即可将测试对象进行分类判别对于本实验来说也就实现了人脸的识别。传统的分类器只考虑对训练样本的拟合情况以最小化训练集上的分类错误为目标通过提供充足训练样本来提高分类器在测试集上的识别率。因此在训练样本有限的情况下即在小训练样本时传统分类器并不能保证有效的分类精度。SVM 的分类思想是以结构化风险最小化为基础兼顾训练误差与测试误差的最小化具体体现在分类模型和模型参数的选择上。可以在小样本问题方面有效地保障分类精度。非线性 SVM非性线支持向量机的思路是 寻找一个从低维到高维的映射空间使得原来低维空间不易区分的特征投射到高维度空间使其可分性更高。而在高维特征空间中求解支持向量机的超平面投影回原低维空间时就呈现出一个非线性的曲面因此称之为非线性支持向量机。非线性支持向量机的关键是如何从低维度映射到高维度该映射关系被称为核函数理论上需要满足 Mercer 定理任何半正定的函数都可以作为核函数。本文使用目前主流的 RBF径向基核函数即实现的是基于 RBF 的支持向量机分类器​。2 部分代码% FR_GUI.m addpath(genpath(./)) global h_axes1; global h_axes2; h_f figure(name, 基于PCA和SVM的人脸识别系统); h_textC uicontrol(h_f, style, text, unit, normalized, string, C, position,... [0.05 0.7 0.1 0.06]); h_editC uicontrol(h_f, style, edit, unit, normalized, position, [0.05 0.6 0.1 0.06],... callback, C str2num(get(h_editC, string))); h_textGamma uicontrol(h_f, style, text, unit, normalized, string, gamma, position,... [0.05 0.5 0.1 0.06]); h_editGamma uicontrol(h_f, style, edit, unit, normalized, position, [0.05 0.4 0.1 0.06],... callback, gamma str2num(get(h_editGamma, string))); % 取得参数 C 和 gamma 的当前值即最近一次训练所使用的值 t dir(Mat/params.mat); if length(t) 0 % 没有找到参数文件 C Inf; gamma 1 else load Mat/params.mat; end set(h_editC, string, num2str(C)); set(h_editGamma, string, num2str(gamma)); h_axes1 axes(parent, h_f, position, [0.25 0.23 0.32 0.6], visible, off); h_axes2 axes(parent, h_f, position, [0.62 0.23 0.32 0.6], visible, off); h_btnOpen uicontrol(h_f, style, push, string, 打开, unit, normalized,... position, [0.32 0.1 0.18 0.1], callback, GUIOpenFaceImage); h_btnRecg uicontrol(h_f, style, push, string, 识别, unit, normalized,... position, [0.67 0.1 0.18 0.1], callback, GUIRecgFaceImage); h_btnRecg uicontrol(h_f, style, push, string, 训练, unit, normalized,... position, [0.32 0.83 0.18 0.1], callback, train(C, gamma)); h_btnRecg uicontrol(h_f, style, push, string, 测试, unit, normalized,... position, [0.67 0.83 0.18 0.1], callback, test);3 仿真结果4 参考文献[1]袁程波. 基于PCA和SVM的人脸识别关键技术研究与实现. Diss. 电子科技大学.部分理论引用网络文献若有侵权联系博主删除。