【图像识别】基于PCA和SVM的人脸识别关键技术研究与实现matlab代码

【图像识别】基于PCA和SVM的人脸识别关键技术研究与实现matlab代码

2023年7月26日发(作者:)

【图像识别】基于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_th(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/');if length(t) == 0 % 没有找到参数⽂件 C = Inf; gamma = 1else load Mat/;endset(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. 电⼦科技⼤学.部分理论引⽤⽹络⽂献,若有侵权联系博主删除。5 MATLAB代码与数据下载地址见博客主页

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690330804a333736.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信