人脸识别经典方法

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

svm参数说明

svm参数说明---------------------- 如果你要输出类的概率&#xff0c;一定要有-b参数 svm-train training_set_file model_file svm-predict test_file model_fileoutput_file 自动脚本&#xff1a;Python easy.py train_data test_data 自动选择最优参数&#xff0c;自动进行…

poj-3667(线段树区间合并)

题目链接&#xff1a;传送门 参考文章&#xff1a;传送门 思路&#xff1a;线段树区间合并问题&#xff0c;每次查询到满足线段树的区间最左值&#xff0c;然后更新线段树。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; co…

车牌识别之颜色选取

车牌定位是车牌识别中第一步&#xff0c;也是最重要的一步。 由于中国车牌种类多样&#xff0c;颜色不一&#xff0c; 再加上车牌经常有污损&#xff0c;以及车牌周围干扰因素太多&#xff0c;都成为了车牌定位的难点。 这里首先使用最简单算法来描述车牌定位&#xff0c;以及他…

Python - 排序( 插入, 冒泡, 快速, 二分 )

插入排序 算法分析 两次循环, 大循环对队列中的每一个元素拿出来作为小循环的裁定对象 小循环对堆当前循环对象在有序队列中寻找插入的位置 性能参数 空间复杂度  O(1) 时间复杂度  O(n^2) 详细代码解读 import randomdef func(l):# 外层循环: 对应遍历所有的无序数据for i…

[EmguCV|C#]使用CvInvoke自己繪製色彩直方圖-直方圖(Hitsogram)系列(4)

2014-02-0610325 0C# 檢舉文章 過年結束了&#xff0c;雖然還是學生所以其實還有兩個禮拜的假期&#xff0c;不過為了不讓自己發慌&#xff0c;趁著假期多利用充實自己&#xff0c;所以提早回到開工狀態&#xff0c;而這次總算要把一直說的自己動手繪製猜色直方圖文章寫出。 …

轮廓的查找、表达、绘制、特性及匹配(How to Use Contour? Find, Component, Construct, Features Match)

前言 轮廓是构成任何一个形状的边界或外形线。前面讲了如何根据色彩及色彩的分布&#xff08;直方图对比和模板匹配&#xff09;来进行匹配&#xff0c;现在我们来看看如何利用物体的轮廓。包括以下内容&#xff1a;轮廓的查找、表达方式、组织方式、绘制、特性、匹配。 查…

itcast-ssh-crm实践

分析 BaseDao 文件上传 转载于:https://www.cnblogs.com/hellowq/p/10209761.html

分类器大牛们

David Lowe&#xff1a;Sift算法的发明者&#xff0c;天才。 Rob Hess&#xff1a;sift的源码OpenSift的作者&#xff0c;个人主页上有openSift的下载链接&#xff0c;Opencv中sift的实现&#xff0c;也是参考这个。 Koen van de Sande&#xff1a;作者给出了sift,densesift,co…

利用python脚本程序监控文件被修改

需求&#xff1a;利用python编写监控程序&#xff0c;监控一个文件目录&#xff0c;当目录下的文件发生改变时&#xff0c;实现有修改就发报警邮件 邮件使用QQ邮箱&#xff0c;需要开启smtp&#xff0c;使用手机发生短信&#xff0c;腾讯会给你发邮箱密码。如下所示&#xff1a…

Oracle RAC

环境如下&#xff1a; Linux操作系统&#xff1a;Centos 6.5 64bit &#xff08;这个版本的redhat 6内核等OS在安装grid最后执行root.sh时会出现crs-4124&#xff0c;是oracle11.2.0.1的bug&#xff09; VMware version&#xff1a;Workstation 8.0.3 build-703057 Oracle…

Activiti多人会签例子

Activiti中提供了多实例任务&#xff08;for-each&#xff09;将多实例应到到UserTask中可以实现会签功能。 Multi-instance (for each) Description A multi-instance activity is a way of defining repetition for a certain step in a business process. In programming …

MySQL-ProxySQL中间件(一)| ProxySQL基本概念

目录 MySQL-ProxySQL中间件&#xff08;一&#xff09;| ProxySQL基本概念&#xff1a; https://www.cnblogs.com/SQLServer2012/p/10972593.htmlMySQL-ProxySQL中间件&#xff08;二&#xff09;| Admin Schemas介绍&#xff1a;https://www.cnblogs.com/SQLServer2012/p/109…

标签td设置隐藏(hidden)

这样设置这个td就不会被其他的td给挤掉了! 还有一种方法就是把tr标签的solid设置为0px 这个方法把td标签的left,right,bottom,top的边框的solid全部设置为0px;转载于:https://www.cnblogs.com/tranquilityMan/p/10972811.html

Windows Server 2008 NFS

打开Windows Server 2008的Dos运行窗口&#xff08;不是powershell&#xff09;&#xff0c;然后键入&#xff1a; servermanagercmd.exe -install FS-NFS-Services 安装完毕之后&#xff0c;就要把NFS的存贮映射到Windows Server 2008上某个盘符以供使用&#xff0c;但为了…

金融反欺诈模型----项目实战--机器学习

机器学习&#xff1a;从源数据清洗到特征工程建立谈金融反欺诈模型训练 本文旨在通过一个完整的实战例子&#xff0c;演示从源数据清洗到特征工程建立&#xff0c;再到模型训练&#xff0c;以及模型验证和评估的一个机器学习的完整流程。由于初识机器学习&#xff0c;会比较多的…

Win7下如何挂载NFS共享目录

NFS是Unix中广泛使用的文件共享协议&#xff0c;在Linux下得到了传承&#xff0c;使用简单&#xff0c;读写性能强大。过去Windows与Linux共享文件夹需要使用Samba&#xff08;CIFS&#xff09;协议&#xff0c;虽然定制性更高&#xff0c;但设置和使用都比较繁琐。Windows 7加…

ECharts 点击非图表区域的点击事件不触发问题

1. 通过 myChart.getZr().on(click, fn) 监听整个图表的点击事件&#xff0c;注册回调 myChart.getZr().on(click, () > {//拿到index即可取出被点击数据的所有信息console.log(clickIndex) }) 2. 在 tooltip 的 formatter 函数中&#xff0c;每次调用都记录下需要的参数&am…

强大的django-debug-toolbar,django项目性能分析工具

强大的django-debug-toolbar,django项目性能分析工具 给大家介绍一个用于django中debug模式下查看网站性能等其他信息的插件django-debug-toolbar 首先安装 pip install django-debug-toolbar 接下来在自己django项目中的settings中添加配置 INSTALLED_APPS [debug_toolbar,]M…

个人作业——软件工程实践总结

一、请回望暑假时的第一次作业&#xff0c;你对于软件工程课程的想象 1&#xff09;对比开篇博客你对课程目标和期待&#xff0c;“希望通过实践锻炼&#xff0c;增强计算机专业的能力和就业竞争力”&#xff0c;对比目前的所学所练所得&#xff0c;在哪些方面达到了你的期待和…

利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 Jtop

利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 原文链接 一、JConsole是什么 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器&#xff0c;可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole&#xff08;或者&#xff0c;它更高端…