这篇文章是撸主要介绍人脸识别经典方法的第一篇,后续会有其他方法更新。特征脸方法基本是将人脸识别推向真正可用的第一种方法,了解一下还是很有必要的。特征脸用到的理论基础PCA在另一篇博客里:特征脸(Eigenface)理论基础-PCA(主成分分析法)。本文的参考资料附在最后了^_^
步骤一:获取包含M张人脸图像的集合S。在我们的例子里有25张人脸图像(虽然是25个不同人的人脸的图像,但是看着怎么不像呢,难道我有脸盲症么),如下图所示哦。每张图像可以转换成一个N维的向量(是的,没错,一个像素一个像素的排成一行就好了,至于是横着还是竖着获取原图像的像素,随你自己,只要前后统一就可以),然后把这M个向量放到一个集合S里,如下式所示。
步骤二:在获取到人脸向量集合S后,计算得到平均图像Ψ,至于怎么计算平均图像,公式在下面。就是把集合S里面的向量遍历一遍进行累加,然后取平均值。得到的这个Ψ其实还挺有意思的,Ψ其实也是一个N维向量,如果再把它还原回图像的形式的话,可以得到如下的“平均脸”,是的没错,还他妈的挺帅啊。那如果你想看一下某计算机学院男生平均下来都长得什么样子,用上面的方法就可以了。
步骤三:计算每张图像和平均图像的差值Φ,就是用S集合里的每个元素减去步骤二中的平均值。
步骤四:找到M个正交的单位向量un,这些单位向量其实是用来描述Φ(步骤三中的差值)分布的。un里面的第k(k=1,2,3...M)个向量uk是通过下式计算的,
当这个λk(原文里取了个名字叫特征值)取最小的值时,uk基本就确定了。补充一下,刚才也说了,这M个向量是相互正交而且是单位长度的,所以啦,uk还要满足下式:
上面的等式使得uk为单位正交向量。计算上面的uk其实就是计算如下协方差矩阵的特征向量:
其中
对于一个NxN(比如100x100)维的图像来说,上述直接计算其特征向量计算量实在是太大了(协方差矩阵可以达到10000x10000),所以有了如下的简单计算。
步骤四另解:如果训练图像的数量小于图像的维数比如(M<N^2),那么起作用的特征向量只有M-1个而不是N^2个(因为其他的特征向量对应的特征值为0),所以求解特征向量我们只需要求解一个NxN的矩阵。这个矩阵就是步骤四中的AAT,我们可以设该矩阵为L,那么L的第m行n列的元素可以表示为:
一旦我们找到了L矩阵的M个特征向量vl,那么协方差矩阵的特征向量ul就可以表示为:
这些特征向量如果还原成像素排列的话,其实还蛮像人脸的,所以称之为特征脸(如下图)。图里有二十五个特征脸,数量上和训练图像相等只是巧合。有论文表明一般的应用40个特征脸已经足够了。论文Eigenface
for recognition里只用了7个特征脸来表明实验。
步骤五:识别人脸。OK,终于到这步了,别绕晕啦,上面几步是为了对人脸进行降维找到表征人脸的合适向量的。首先考虑一张新的人脸,我们可以用特征脸对其进行标示:
其中k=1,2...M,对于第k个特征脸uk,上式可以计算其对应的权重,M个权重可以构成一个向量:
perfect,这就是求得的特征脸对人脸的表示了!
那如何对人脸进行识别呢,看下式:
其中Ω代表要判别的人脸,Ωk代表训练集内的某个人脸,两者都是通过特征脸的权重来表示的。式子是对两者求欧式距离,当距离小于阈值时说明要判别的脸和训练集内的第k个脸是同一个人的。当遍历所有训练集都大于阈值时,根据距离值的大小又可分为是新的人脸或者不是人脸的两种情况。根据训练集的不同,阈值设定并不是固定的。
后续会有对PCA理论的补充^_^.已补充理论:特征脸(Eigenface)理论基础-PCA(主成分分析法)
参考资料:
1、Eigenface for Recognition:http://www.cs.ucsb.edu/~mturk/Papers/jcn.pdf
2、特征脸维基百科:http://zh.wikipedia.org/wiki/%E7%89%B9%E5%BE%81%E8%84%B8
3、Eigenface_tutorial:http://www.pages.drexel.edu/~sis26/Eigenface%20Tutorial.htm
分享到:
相关推荐
65. 人脸识别经典算法一:特征脸方法(Eigenface) - 笔记 - CSDN博客1
主要为大家详细介绍了人脸识别经典算法一,特征脸方法Eigenface,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
人脸识别经典算法一 特征脸方法(Eigenface)
在之前的博客 人脸识别经典算法一:特征脸方法(Eigenface)里面介绍了特征脸方法的原理,但是并没有对它用到的理论基础PCA做介绍,现在做补充。请将这两篇博文结合起来阅读。以下内容大部分参考自斯坦福机器学习...
0607-人脸识别算法之EigenFace(PCA方法) facerecog_04.cpp 三种算法时间比较LBP最快.cpp 生成标签数据at.ipynb 0808-人脸识别算法之FisherFace 0909-人脸识别算法之LBPH 案例-实时人脸识别应用开发(读取录入) ...
LDA算法,MATLAB源码实现,内附3个demo: 第1个demo:模拟二维高斯数据,降至1维,可视化 ...第3个demo:针对olivetti数据集,选取5个ID-50张人脸,降至3维,计算特征脸,并可用于后续人脸识别
EigenFace是基于PCA降维的人脸识别算法,PCA是使整体数据降维后的方差最大,没有考虑降维后类间的变化。 它是将图像每一个像素当作一维特征,然后用SVM或其它机器学习算法进行训练。但这样维数太多,根本无法计算。...
一个简单的人脸识别程序,利用opencv,通过PCA算法实现的。识别率不是很高。测试后发现是opencv里的一个函数的问题。
基于PCA的人脸检测Matlab源代码(不包含人脸样本数据库,该代码使用的是ORL库,请自行下载)。
FPGA上运行人脸识别源代码,This project attempts to realize a face detector using Voila-Jones algorithm. The reference C model is borrowed from [5kk73 GPU Assignment 2012]...
人脸数据采集与处理->人脸数据训练与测试->实时人脸检测->人脸识别->显示结果/继续读取下一帧->选择终止->结束 Tips: 训练与检测的图像必须大小一致,类型为灰度 VideoCatpture类使用 HAAR人脸检测 数据采集通过眼睛...
该项目实现了特征脸分析(PCA 变体)和支持向量机 (SVM) 来对从训练集中挑选出来的人脸进行分类。 分类本身的代码是用 Matlab 编写的,它需要用户安装LIBSVM。面部图像数据库包含在各种姿势和照明条件下的对象中。...
人脸识别算法 目前OpenCV支持特征脸EigenFace、线性判别分析脸FisherFace和直方图脸LBPHFace三种人 脸识别方法。 OpenCV的扩展包opencv- contrib-python提供了相应的函数 以方便构建上述三种人脸识别方 法的模型,...
与一般的人脸识别方法不同,本模型无需任何人工的几何特征提取工作.在部分FERET人脸数据库上的随机加噪和部分遮挡的识别实验表明,提出的MVAM-LF算法获得了比标准的eigenface和改进的(PC)2A算法更高的识别率,表现出了...
使用PCA的方法对人脸图像进行识别,MATLAB程序,算法使用的是本征脸(eigenface)方法
做人脸识别常用到的基本算法,提取特征脸的较好算法,用matlab实现
基于PCA的人脸识别算法 从matlab代码修改过来 图片:图片大小 384*256 使用opencv读取图片 f-CreateDatabase.py 对训练数据进行创建矩阵存储 f-Eigenface.py 使用PCA算法计算脸部矩阵 f-Recognize.py 使用TestImage...