这篇文章是撸主要介绍人脸识别经典方法的第一篇,后续会有其他方法更新。特征脸方法基本是将人脸识别推向真正可用的第一种方法,了解一下还是很有必要的。特征脸用到的理论基础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

转载 http://blog.csdn.net/smartempire/article/details/21406005

人脸识别经典算法一:特征脸方法(Eigenface)的更多相关文章

  1. 人脸识别经典算法二:LBP方法

    与第一篇博文特征脸方法不同,LBP(Local Binary Patterns,局部二值模式)是提取局部特征作为判别依据的.LBP方法显著的优点是对光照不敏感,但是依然没有解决姿态和表情的问题.不过相 ...

  2. 机器学习:PCA(人脸识别中的应用——特征脸)

    一.思维理解 X:原始数据集: Wk:原始数据集 X 的前 K 个主成分: Xk:n 维的原始数据降维到 k 维后的数据集: 将原始数据集降维,就是将数据集中的每一个样本降维:X(i) . WkT = ...

  3. 人脸识别经典算法三:Fisherface(LDA)

    Fisherface是由Ronald Fisher发明的,想必这就是Fisherface名字由来.Fisherface所基于的LDA(Linear Discriminant Analysis,线性判别 ...

  4. 吴裕雄--天生自然python学习笔记:人脸识别用到的特征文件haarcascade_frontalface_default.xml下载

    下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades 1.找到haarcascade_frontalface_defa ...

  5. 特征脸(Eigenface)理论基础-PCA(主成分分析法)

    在之前的博客  人脸识别经典算法一:特征脸方法(Eigenface)  里面介绍了特征脸方法的原理,但是并没有对它用到的理论基础PCA做介绍,现在做补充.请将这两篇博文结合起来阅读.以下内容大部分参考 ...

  6. Eigenface与PCA人脸识别算法实验

    简单的特征脸识别实验 实现特征脸的过程其实就是主成分分析(Principal Component Analysis,PCA)的一个过程.关于PCA的原理问题,它是一种数学降维的方法.是为了简化问题.在 ...

  7. OpenCV+python 人脸识别

    首先给大家推荐一本书:机器学习算法原理与编程实践 本文内容全部转载于书中,相当于一个读书笔记了吧 绪论 1992年麻省理工学院通过实验对比了基于结构特征的方法与基于模版匹配的方法,发现模版匹配的方法要 ...

  8. OpenCV 和 Dlib 人脸识别基础

    00 环境配置 Anaconda 安装 1 下载 https://repo.anaconda.com/archive/ 考虑到兼容性问题,推荐下载Anaconda3-5.2.0版本. 2 安装 3 测 ...

  9. 【笔记】特征脸(PCA在人脸识别领域的应用)

    人脸识别与特征脸(简单介绍) 什么是特征脸 特征脸(Eigenface)是指用于机器视觉领域中的人脸识别问题的一组特征向量,该方法被认为是第一种有效的人脸识别方法. PCA的具体实现思想见 [笔记]主 ...

随机推荐

  1. JAVA 多线程和并发学习笔记(一)

    一.进程与线程 1. 进程 当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中的程序.进程是操作系统进行资源分配和调度的一个独立单位.进程的三个特征: 独立性 独立存在的实体,每个进程都有 ...

  2. C#(Winform) Http 发送数据

    Get方式 private string HttpGet(string url, string postData) { HttpWebRequest request = (HttpWebRequest ...

  3. 在python中处理XML

    XML是实现不同语言或程序之间进行数据交换的协议,XML文件格式如下: <data> <country name="Liechtenstein"> < ...

  4. numpy.linalg.eig

    1.转置对于二维数组有用,对一位数组无效 2.理解特征值和特征向量的对应关系 a=np.array([[1 ,2, 3],[4, 5, 6],[7, 8, 9]]) a Out[27]: array( ...

  5. ComponentCount 与 ControlCount 区别

       ShowMessage(panel.ComponentCount.ToString);  ShowMessage(panel.ControlCount.ToString);componetcou ...

  6. .gitignore配置

    .gitignore文件可以配置不希望加入git的文件,例如idea的.idea 工程文件 1.配置语法 以斜杠“/”开头表示目录: 以星号“*”通配多个字符: 以问号“?”通配单个字符 以方括号“[ ...

  7. Android DDMS检测内存泄露

    Android DDMS检测内存泄露 DDMS是Android开发包中自带工具,可以测试app性能,用于发现内存问题. 1.环境搭建 参考之前发的Android测试环境搭建相关文章,这里不再复述: 2 ...

  8. 【转载】理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式

    GL_TRIANGLE_STRIP绘制三角形方式很多时候令人疑惑,在这里对其运作机理进行解释. 一般情况下有三种绘制一系列三角形的方式,分别是GL_TRIANGLES.GL_TRIANGLE_STRI ...

  9. 多线程之 Final变量 详解

    原文: http://www.tuicool.com/articles/2Yjmqy 并发编程网:http://ifeve.com/java-memory-model/ 总结: Final 变量在并发 ...

  10. ArcGIS API for Flex实现GraphicsLayer上画点、线、面。

    目的: ArcGIS API for Flex实现GraphicsLayer上画点.线.面. 准备工作: 1.这次地图数据就用Esri提供的http://server.arcgisonline.com ...