导航:首页 > 研究方法 > 特征脸方法第一次将主成分分析

特征脸方法第一次将主成分分析

发布时间:2023-01-29 22:26:04

1. 主成分分析法介绍 什么是主成分分析法

1、主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。

2、在实际课题中,为了全面分析问题,往往提出很多与此有关的变量(或因素),因为每个变量都在不同程度上反映这个课题的某些信息。

3、主成分分析首先是由K.皮尔森(Karl Pearson)对非随机变量引入的,尔后H.霍特林将此方法推广到随机向量的情形。信息的大小通常用离差平方和或方差来衡量。

2. eigenface 怎样进行人脸识别

整理了一下,步骤如下:

  1. 特征脸EigenFace从思想上其实挺简单。就相当于把人脸从像素空间变换到另一个空间,在另一个空间中做相似性的计算。

  2. EigenFace选择的空间变换方法是PCA,也就是大名鼎鼎的主成分分析。它广泛的被用于预处理中以消去样本特征维度之间的相关性。

  3. EigenFace方法利用PCA得到人脸分布的主要成分,具体实现是对训练集中所有人脸图像的协方差矩阵进行本征值分解,得对对应的本征向量,这些本征向量(特征向量)就是“特征脸”。每个特征向量或者特征脸相当于捕捉或者描述人脸之间的一种变化或者特性。这就意味着每个人脸都可以表示为这些特征脸的线性组合。

  4. 算法说明白了都是不明白的,所以还是得去看具体实现及具体结构代码:



3. 电脑是否可以透过口罩还原人脸

电脑当然是可以通过口罩还原人脸的。这主要就是因为现在的电脑系统当中都有了非常高端的人工智能功能,而且也具有非常高的识别功能,所以只要通过一个人的眼睛就可以怀念他整个脸部。
分子计算机体积小、耗电少、运算快、存储量大。分子计算机的运行是吸收分子晶体上以电荷形式存在的信息,并以更有效的方式进行组织排列。分子计算机的运算过程就是蛋白质分子与周围物理化学介质的相互作用过程。转换开关为酶,而程序则在酶合成系统本身和蛋白质的结构中极其明显地表示出来。生物分子组成的计算机具备能在生化环境下,甚至在生物有机体中运行,并能以其它分子形式与外部环境交换。因此它将在医疗诊治、遗传追踪和仿生工程中发挥无法替代的作用。分子芯片体积大大减小,而效率大大提高, 分子计算机完成一项运算,所需的时间仅为10微微秒,比人的思维速度快100万倍。分子计算机具有惊人的存储容量,1立方米的DNA溶液可存储1万亿亿的二进制数据。分子计算机消耗的能量非常小,只有电子计算机的十亿分之一。由于分子芯片的原材料是蛋白质分子,所以分子计算机既有自我修复的功能,又可直接与分子活体相联。

4. spss主成分分析步骤是什么

spss主成分分析法详细步骤:

1、打开SPSS软件,导入数据后,依次点击分析,降维,因子分析。如图1所示:

(4)特征脸方法第一次将主成分分析扩展阅读:

SPSS是世界上最早采用图形菜单驱动界面的统计软件,它最突出的特点就是操作界面极为友好,输出结果美观漂亮。它将几乎所有的功能都以统一、规范的界面展现出来,使用Windows的窗口方式展示各种管理和分析数据方法的功能,对话框展示出各种功能选择项。

用户只要掌握一定的Windows操作技能,精通统计分析原理,就可以使用该软件为特定的科研工作服务。SPSS采用类似EXCEL表格的方式输入与管理数据,数据接口较为通用,能方便的从其他数据库中读入数据。

其统计过程包括了常用的、较为成熟的统计过程,完全可以满足非统计专业人士的工作需要。输出结果十分美观,存储时则是专用的SPO格式,可以转存为HTML格式和文本格式。对于熟悉老版本编程运行方式的用户,SPSS还特别设计了语法生成窗口。

5. 人脸识别的发展历史是怎样的

人脸识别是一个被广泛研究着的热门问题,大量的研究论文层出不穷,在一定程度上有泛滥成“灾”之嫌。为了更好地对人脸识别研究的历史和现状进行介绍,本文将AFR的研究历史按照研究内容、技术方法等方面的特点大体划分为三个时间阶段,如表1所示。该表格概括了人脸识别研究的发展简史及其每个历史阶段代表性的研究工作及其技术特点。下面对三个阶段的研究进展情况作简单介绍:

第一阶段(1964年~1990年)

这一阶段人脸识别通常只是作为一个一般性的模式识别问题来研究,所采用的主要技术方案是基于人脸几何结构特征(Geometricfeature based)的方法。这集中体现在人们对于剪影(Profile)的研究上,人们对面部剪影曲线的结构特征提取与分析方面进行了大量研究。人工神经网络也一度曾经被研究人员用于人脸识别问题中。较早从事AFR研究的研究人员除了布莱索(Bledsoe)外还有戈登斯泰因(Goldstein)、哈蒙(Harmon)以及金出武雄(Kanade Takeo)等。金出武雄于1973年在京都大学完成了第一篇AFR方面的博士论文,直到现在,作为卡内基-梅隆大学(CMU)机器人研究院的一名教授,仍然是人脸识别领域的活跃人物之一。他所在的研究组也是人脸识别领域的一支重要力量。总体而言,这一阶段是人脸识别研究的初级阶段,非常重要的成果不是很多,也基本没有获得实际应用。

第二阶段(1991年~1997年)

这一阶段尽管时间相对短暂,但却是人脸识别研究的高潮期,可谓硕果累累:不但诞生了若干代表性的人脸识别算法,美国军方还组织了着名的FERET人脸识别算法测试,并出现了若干商业化运作的人脸识别系统,比如最为着名的Visionics(现为Identix)的FaceIt系统。

美国麻省理工学院(MIT)媒体实验室的特克(Turk)和潘特兰德(Pentland)提出的“特征脸”方法无疑是这一时期内最负盛名的人脸识别方法。其后的很多人脸识别技术都或多或少与特征脸有关系,现在特征脸已经与归一化的协相关量(NormalizedCorrelation)方法一道成为人脸识别的性能测试基准算法。

这一时期的另一个重要工作是麻省理工学院人工智能实验室的布鲁内里(Brunelli)和波基奥(Poggio)于1992年左右做的一个对比实验,他们对比了基于结构特征的方法与基于模板匹配的方法的识别性能,并给出了一个比较确定的结论:模板匹配的方法优于基于特征的方法。这一导向性的结论与特征脸共同作用,基本中止了纯粹的基于结构特征的人脸识别方法研究,并在很大程度上促进了基于表观(Appearance-based)的线性子空间建模和基于统计模式识别技术的人脸识别方法的发展,使其逐渐成为主流的人脸识别技术。

贝尔胡米尔(Belhumeur)等提出的Fisherface人脸识别方法是这一时期的另一重要成果。该方法首先采用主成分分析(PrincipalComponent Analysis,PCA,亦即特征脸)对图像表观特征进行降维。在此基础上,采用线性判别分析(LinearDiscriminant Analysis, LDA)的方法变换降维后的主成分以期获得“尽量大的类间散度和尽量小的类内散度”。该方法目前仍然是主流的人脸识别方法之一,产生了很多不同的变种,比如零空间法、子空间判别模型、增强判别模型、直接的LDA判别方法以及近期的一些基于核学习的改进策略。

麻省理工学院的马哈丹(Moghaddam)则在特征脸的基础上,提出了基于双子空间进行贝叶斯概率估计的人脸识别方法。该方法通过“作差法”,将两幅人脸图像对的相似度计算问题转换为一个两类(类内差和类间差)分类问题,类内差和类间差数据都要首先通过主成分分析(PCA)技术进行降维,计算两个类别的类条件概率密度,最后通过贝叶斯决策(最大似然或者最大后验概率)的方法来进行人脸识别。

人脸识别中的另一种重要方法——弹性图匹配技术(Elastic GraphMatching,EGM) 也是在这一阶段提出的。其基本思想是用一个属性图来描述人脸:属性图的顶点代表面部关键特征点,其属性为相应特征点处的多分辨率、多方向局部特征——Gabor变换[12]特征,称为Jet;边的属性则为不同特征点之间的几何关系。对任意输入人脸图像,弹性图匹配通过一种优化搜索策略来定位预先定义的若干面部关键特征点,同时提取它们的Jet特征,得到输入图像的属性图。最后通过计算其与已知人脸属性图的相似度来完成识别过程。该方法的优点是既保留了面部的全局结构特征,也对人脸的关键局部特征进行了建模。近来还出现了一些对该方法的扩展。

局部特征分析技术是由洛克菲勒大学(RockefellerUniversity)的艾提克(Atick)等人提出的。LFA在本质上是一种基于统计的低维对象描述方法,与只能提取全局特征而且不能保留局部拓扑结构的PCA相比,LFA在全局PCA描述的基础上提取的特征是局部的,并能够同时保留全局拓扑信息,从而具有更佳的描述和判别能力。LFA技术已商业化为着名的FaceIt系统,因此后期没有发表新的学术进展。

由美国国防部反毒品技术发展计划办公室资助的FERET项目无疑是该阶段内的一个至关重要的事件。FERET项目的目标是要开发能够为安全、情报和执法部门使用的AFR技术。该项目包括三部分内容:资助若干项人脸识别研究、创建FERET人脸图像数据库、组织FERET人脸识别性能评测。该项目分别于1994年,1995年和1996年组织了3次人脸识别评测,几种最知名的人脸识别算法都参加了测试,极大地促进了这些算法的改进和实用化。该测试的另一个重要贡献是给出了人脸识别的进一步发展方向:光照、姿态等非理想采集条件下的人脸识别问题逐渐成为热点的研究方向。

柔性模型(Flexible Models)——包括主动形状模型(ASM)和主动表观模型(AAM)是这一时期内在人脸建模方面的一个重要贡献。ASM/AAM将人脸描述为2D形状和纹理两个分离的部分,分别用统计的方法进行建模(PCA),然后再进一步通过PCA将二者融合起来对人脸进行统计建模。柔性模型具有良好的人脸合成能力,可以采用基于合成的图像分析技术来对人脸图像进行特征提取与建模。柔性模型目前已被广泛用于人脸特征对准(FaceAlignment)和识别中,并出现了很多的改进模型。

总体而言,这一阶段的人脸识别技术发展非常迅速,所提出的算法在较理想图像采集条件、对象配合、中小规模正面人脸数据库上达到了非常好的性能,也因此出现了若干知名的人脸识别商业公司。从技术方案上看, 2D人脸图像线性子空间判别分析、统计表观模型、统计模式识别方法是这一阶段内的主流技术。

第三阶段(1998年~现在)

FERET’96人脸识别算法评估表明:主流的人脸识别技术对光照、姿态等由于非理想采集条件或者对象不配合造成的变化鲁棒性比较差。因此,光照、姿态问题逐渐成为研究热点。与此同时,人脸识别的商业系统进一步发展。为此,美国军方在FERET测试的基础上分别于2000年和2002年组织了两次商业系统评测。

基奥盖蒂斯(Georghiades)等人提出的基于光照锥 (Illumination Cones) 模型的多姿态、多光照条件人脸识别方法是这一时期的重要成果之一,他们证明了一个重要结论:同一人脸在同一视角、不同光照条件下的所有图像在图像空间中形成一个凸锥——即光照锥。为了能够从少量未知光照条件的人脸图像中计算光照锥,他们还对传统的光度立体视觉方法进行了扩展,能够在朗博模型、凸表面和远点光源假设条件下,根据未知光照条件的7幅同一视点图像恢复物体的3D形状和表面点的表面反射系数(传统光度立体视觉能够根据给定的3幅已知光照条件的图像恢复物体表面的法向量方向),从而可以容易地合成该视角下任意光照条件的图像,完成光照锥的计算。识别则通过计算输入图像到每个光照锥的距离来完成。

以支持向量机为代表的统计学习理论也在这一时期内被应用到了人脸识别与确认中来。支持向量机是一个两类分类器,而人脸识别则是一个多类问题。通常有三种策略解决这个问题,即:类内差/类间差法、一对多法(one-to-rest)和一对一法(one-to-one)。

布兰兹(Blanz)和维特(Vetter)等提出的基于3D变形(3D Morphable Model)模型的多姿态、多光照条件人脸图像分析与识别方法是这一阶段内一项开创性的工作。该方法在本质上属于基于合成的分析技术,其主要贡献在于它在3D形状和纹理统计变形模型(类似于2D时候的AAM)的基础上,同时还采用图形学模拟的方法对图像采集过程的透视投影和光照模型参数进行建模,从而可以使得人脸形状和纹理等人脸内部属性与摄像机配置、光照情况等外部参数完全分开,更加有利于人脸图像的分析与识别。Blanz的实验表明,该方法在CMU-PIE(多姿态、光照和表情)人脸库和FERET多姿态人脸库上都达到了相当高的识别率,证明了该方法的有效性。

2001年的国际计算机视觉大会(ICCV)上,康柏研究院的研究员维奥拉(Viola)和琼斯(Jones)展示了他们的一个基于简单矩形特征和AdaBoost的实时人脸检测系统,在CIF格式上检测准正面人脸的速度达到了每秒15帧以上。该方法的主要贡献包括:1)用可以快速计算的简单矩形特征作为人脸图像特征;2)基于AdaBoost将大量弱分类器进行组合形成强分类器的学习方法;3)采用了级联(Cascade)技术提高检测速度。目前,基于这种人脸/非人脸学习的策略已经能够实现准实时的多姿态人脸检测与跟踪。这为后端的人脸识别提供了良好的基础。

沙苏哈(Shashua)等于2001年提出了一种基于商图像[13]的人脸图像识别与绘制技术。该技术是一种基于特定对象类图像集合学习的绘制技术,能够根据训练集合中的少量不同光照的图像,合成任意输入人脸图像在各种光照条件下的合成图像。基于此,沙苏哈等还给出了对各种光照条件不变的人脸签名(Signature)图像的定义,可以用于光照不变的人脸识别,实验表明了其有效性。

巴斯里(Basri)和雅各布(Jacobs)则利用球面谐波(Spherical Harmonics)表示光照、用卷积过程描述朗博反射的方法解析地证明了一个重要的结论:由任意远点光源获得的所有朗博反射函数的集合形成一个线性子空间。这意味着一个凸的朗博表面物体在各种光照条件下的图像集合可以用一个低维的线性子空间来近似。这不仅与先前的光照统计建模方法的经验实验结果相吻合,更进一步从理论上促进了线性子空间对象识别方法的发展。而且,这使得用凸优化方法来强制光照函数非负成为可能,为光照问题的解决提供了重要思路。

FERET项目之后,涌现了若干人脸识别商业系统。美国国防部有关部门进一步组织了针对人脸识别商业系统的评测FRVT,至今已经举办了两次:FRVT2000和FRVT2002。这两次测试一方面对知名的人脸识别系统进行了性能比较,例如FRVT2002测试就表明Cognitec, Identix和Eyematic三个商业产品遥遥领先于其他系统,而它们之间的差别不大。另一方面则全面总结了人脸识别技术发展的现状:较理想条件下(正面签证照),针对37437人121,589 幅图像的人脸识别(Identification)最高首选识别率为73%,人脸验证(Verification)的等错误率(EER[14])大约为6%。FRVT测试的另一个重要贡献是还进一步指出了目前的人脸识别算法亟待解决的若干问题。例如,FRVT2002测试就表明:目前的人脸识别商业系统的性能仍然对于室内外光照变化、姿态、时间跨度等变化条件非常敏感,大规模人脸库上的有效识别问题也很严重,这些问题都仍然需要进一步的努力。

总体而言,目前非理想成像条件下(尤其是光照和姿态)、对象不配合、大规模人脸数据库上的人脸识别问题逐渐成为研究的热点问题。而非线性建模方法、统计学习理论、基于Boosting[15]的学习技术、基于3D模型的人脸建模与识别方法等逐渐成为备受重视的技术发展趋势。

总而言之, 人脸识别是一项既有科学研究价值,又有广泛应用前景的研究课题。国际上大量研究人员几十年的研究取得了丰硕的研究成果,自动人脸识别技术已经在某些限定条件下得到了成功应用。这些成果更加深了我们对于自动人脸识别这个问题的理解,尤其是对其挑战性的认识。尽管在海量人脸数据比对速度甚至精度方面,现有的自动人脸识别系统可能已经超过了人类,但对于复杂变化条件下的一般人脸识别问题,自动人脸识别系统的鲁棒性和准确度还远不及人类。这种差距产生的本质原因现在还不得而知,毕竟我们对于人类自身的视觉系统的认识还十分肤浅。但从模式识别和计算机视觉等学科的角度判断,这既可能意味着我们尚未找到对面部信息进行合理采样的有效传感器(考虑单目摄像机与人类双眼系统的差别),更可能意味着我们采用了不合适的人脸建模方法(人脸的内部表示问题),还有可能意味着我们并没有认识到自动人脸识别技术所能够达到的极限精度。但无论如何,赋予计算设备与人类似的人脸识别能力是众多该领域研究人员的梦想。相信随着研究的继续深入,我们的认识应该能够更加准确地逼近这些问题的正确答案。

6. 主成分分析的基本步骤

主成分分析的基本步骤:

1、对原始数据标准化

2、计算相关系数

3、计算特征

4、确定主成分

5、合成主成分。

7. 如何进行主成分分析

主成分分析法的基本思想

主成分分析(Principal Component Analysis)是利用降维的思想,将多个变量转化为少数几个综合变量(即主成分),其中每个主成分都是原始变量的线性组合,各主成分之间互不相关,从而这些主成分能够反映始变量的绝大部分信息,且所含的信息互不重叠.采用这种方法可以克服单一的财务指标不能真实反映公司的财务情况的缺点,引进多方面的财务指标,但又将复杂因素归结为几个主成分,使得复杂问题得以简化,同时得到更为科学、准确的财务信息。

具体的实际操作我也在学习,主要是在实验室分析,用minitab

网上有很多这方面的资料,你可以自己去详细地看

希望对你有用

8. 怎样使用OpenCV进行人脸识别

1.1.介绍Introction
从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验。本文既介绍代码使用,又介绍算法原理。(他写的源代码,我们可以在OpenCV的opencv\moles\contrib\doc\facerec\src下找到,当然也可以在他的github中找到,如果你想研究源码,自然可以去看看,不复杂)

目前支持的算法有
Eigenfaces特征脸createEigenFaceRecognizer()
Fisherfaces createFisherFaceRecognizer()
LocalBinary Patterns Histograms局部二值直方图 createLBPHFaceRecognizer()
下面所有的例子中的代码在OpenCV安装目录下的samples/cpp下面都能找到,所有的代码商用或者学习都是免费的。

1.2.人脸识别Face Recognition
对人类来说,人脸识别很容易。文献[Tu06]告诉我们,仅仅是才三天的婴儿已经可以区分周围熟悉的人脸了。那么对于计算机来说,到底有多难?其实,迄今为止,我们对于人类自己为何可以区分不同的人所知甚少。是人脸内部特征(眼睛、鼻子、嘴巴)还是外部特征(头型、发际线)对于人类识别更有效?我们怎么分析一张图像,大脑是如何对它编码的?David Hubel和TorstenWiesel向我们展示,我们的大脑针对不同的场景,如线、边、角或者运动这些局部特征有专门的神经细胞作出反应。显然我们没有把世界看成零散的块块,我们的视觉皮层必须以某种方式把不同的信息来源转化成有用的模式。自动人脸识别就是如何从一幅图像中提取有意义的特征,把它们放入一种有用的表示方式,然后对他们进行一些分类。基于几何特征的人脸的人脸识别可能是最直观的方法来识别人脸。第一个自动人脸识别系统在[Kanade73]中又描述:标记点(眼睛、耳朵、鼻子等的位置)用来构造一个特征向量(点与点之间的距离、角度等)。通过计算测试和训练图像的特征向量的欧氏距离来进行识别。这样的方法对于光照变化很稳健,但也有巨大的缺点:标记点的确定是很复杂的,即使是使用最先进的算法。一些几何特征人脸识别近期工作在文献[Bru92]中有描述。一个22维的特征向量被用在一个大数据库上,单靠几何特征不能提供足够的信息用于人脸识别。

特征脸方法在文献[TP91]中有描述,他描述了一个全面的方法来识别人脸:面部图像是一个点,这个点是从高维图像空间找到它在低维空间的表示,这样分类变得很简单。低维子空间低维是使用主元分析(Principal Component Analysis,PCA)找到的,它可以找拥有最大方差的那个轴。虽然这样的转换是从最佳重建角度考虑的,但是他没有把标签问题考虑进去。[gm:读懂这段需要一些机器学习知识]。想象一个情况,如果变化是基于外部来源,比如光照。轴的最大方差不一定包含任何有鉴别性的信息,因此此时的分类是不可能的。因此,一个使用线性鉴别(Linear Discriminant Analysis,LDA)的特定类投影方法被提出来解决人脸识别问题[BHK97]。其中一个基本的想法就是,使类内方差最小的同时,使类外方差最大。
近年来,各种局部特征提取方法出现。为了避免输入的图像的高维数据,仅仅使用的局部特征描述图像的方法被提出,提取的特征(很有希望的)对于局部遮挡、光照变化、小样本等情况更强健。有关局部特征提取的方法有盖伯小波(Gabor Waelets)([Wiskott97]),离散傅立叶变换(DiscreteCosinus Transform,DCT)([Messer06]),局部二值模式(LocalBinary Patterns,LBP)([AHP04])。使用什么方法来提取时域空间的局部特征依旧是一个开放性的研究问题,因为空间信息是潜在有用的信息。
1.3.人脸库Face Database
我们先获取一些数据来进行实验吧。我不想在这里做一个幼稚的例子。我们在研究人脸识别,所以我们需要一个真的人脸图像!你可以自己创建自己的数据集,也可以从这里(http://face-rec.org/databases/)下载一个。
AT&TFacedatabase又称ORL人脸数据库,40个人,每人10张照片。照片在不同时间、不同光照、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集。所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有有轻微旋转)。

YaleFacedatabase A ORL数据库对于初始化测试比较适合,但它是一个简单的数据库,特征脸已经可以达到97%的识别率,所以你使用其他方法很难得到更好的提升。Yale人脸数据库是一个对于初始实验更好的数据库,因为识别问题更复杂。这个数据库包括15个人(14个男人,1个女人),每一个都有11个灰度图像,大小是320*243像素。数据库中有光照变化(中心光照、左侧光照、右侧光照)、表情变化(开心、正常、悲伤、瞌睡、惊讶、眨眼)、眼镜(戴眼镜或者没戴)。
坏消息是它不可以公开下载,可能因为原来的服务器坏了。但我们可以找到一些镜像(比如 theMIT)但我不能保证它的完整性。如果你需要自己剪裁和校准图像,可以阅读我的笔记(bytefish.de/blog/fisherfaces)。

ExtendedYale Facedatabase B 此数据库包含38个人的2414张图片,并且是剪裁好的。这个数据库重点是测试特征提取是否对光照变化强健,因为图像的表情、遮挡等都没变化。我认为这个数据库太大,不适合这篇文章的实验,我建议使用ORL数据库。
1.3.1. 准备数据
我们从网上下了数据,下了我们需要在程序中读取它,我决定使用CSV文件读取它。一个CSV文件包含文件名,紧跟一个标签。
/path/to/image.ext;0
假设/path/to/image.ext是图像,就像你在windows下的c:/faces/person0/image0.jpg。最后我们给它一个标签0。这个标签类似代表这个人的名字,所以同一个人的照片的标签都一样。我们对下载的ORL数据库进行标识,可以获取到如下结果:
./at/s1/1.pgm;0
./at/s1/2.pgm;0
...
./at/s2/1.pgm;1
./at/s2/2.pgm;1
...
./at/s40/1.pgm;39
./at/s40/2.pgm;39

想象我已经把图像解压缩在D:/data/at下面,而CSV文件在D:/data/at.txt。下面你根据自己的情况修改替换即可。一旦你成功建立CSV文件,就可以像这样运行示例程序:
facerec_demo.exe D:/data/at.txt

1.3.2 Creating the CSV File
你不需要手工来创建一个CSV文件,我已经写了一个Python程序来做这事。
[gm:说一个我实现的方法
如果你会cmd命令,或者称DOS命令,那么你打开命令控制台。假设我们的图片放在J:下的Faces文件夹下,可以输入如下语句:
J:\Faces\ORL>dir /b/s *.bmp > at.txt

然后你打开at.txt文件可能看到如下内容(后面的0,1..标签是自己加的):
。。。。
J:\Faces\ORL\s1\1.bmp;0
J:\Faces\ORL\s1\10.bmp;0
J:\Faces\ORL\s1\2.bmp;0
J:\Faces\ORL\s1\3.bmp;0
J:\Faces\ORL\s1\4.bmp;0
J:\Faces\ORL\s1\5.bmp;0
J:\Faces\ORL\s1\6.bmp;0
J:\Faces\ORL\s1\7.bmp;0
J:\Faces\ORL\s1\8.bmp;0
J:\Faces\ORL\s1\9.bmp;0
J:\Faces\ORL\s10\1.bmp;1
J:\Faces\ORL\s10\10.bmp;1
J:\Faces\ORL\s10\2.bmp;1
J:\Faces\ORL\s10\3.bmp;1
J:\Faces\ORL\s10\4.bmp;1
J:\Faces\ORL\s10\5.bmp;1
J:\Faces\ORL\s10\6.bmp;1
。。。。

自然还有c++编程等方法可以做得更好,看这篇文章反响,如果很多人需要,我就把这部分的代码写出来。(遍历多个文件夹,标上标签)
]
特征脸Eigenfaces
我们讲过,图像表示的问题是他的高维问题。二维灰度图像p*q大小,是一个m=qp维的向量空间,所以一个100*100像素大小的图像就是10,000维的图像空间。问题是,是不是所有的维数空间对我们来说都有用?我们可以做一个决定,如果数据有任何差异,我们可以通过寻找主元来知道主要信息。主成分分析(Principal Component Analysis,PCA)是KarlPearson (1901)独立发表的,而 Harold Hotelling (1933)把一些可能相关的变量转换成一个更小的不相关的子集。想法是,一个高维数据集经常被相关变量表示,因此只有一些的维上数据才是有意义的,包含最多的信息。PCA方法寻找数据中拥有最大方差的方向,被称为主成分。
算法描述Algorithmic Description
令 表示一个随机特征,其中 .
计算均值向量

计算协方差矩阵 S

计算 的特征值 和对应的特征向量

对特征值进行递减排序,特征向量和它顺序一致. K个主成分也就是k个最大的特征值对应的特征向量。
x的K个主成份:

其中 .
PCA基的重构:

其中 .
然后特征脸通过下面的方式进行人脸识别:
A. 把所有的训练数据投影到PCA子空间
B. 把待识别图像投影到PCA子空间
C. 找到训练数据投影后的向量和待识别图像投影后的向量最近的那个。
还有一个问题有待解决。比如我们有400张图片,每张100*100像素大小,那么PCA需要解决协方差矩阵 的求解,而X的大小是10000*400,那么我们会得到10000*10000大小的矩阵,这需要大概0.8GB的内存。解决这个问题不容易,所以我们需要另一个计策。就是转置一下再求,特征向量不变化。文献 [Duda01]中有描述。
[gm:这个PCA还是自己搜着看吧,这里的讲的不清楚,不适合初学者看]

OpenCV中使用特征脸Eigenfaces in OpenCV
给出示例程序源代码
#include "opencv2/core/core.hpp"
#include "opencv2/contrib/contrib.hpp"
#include "opencv2/highgui/highgui.hpp"

#include <iostream>
#include <fstream>
#include <sstream>

usingnamespace cv;
usingnamespace std;

static Mat norm_0_255(InputArray _src) {
Mat src = _src.getMat();
// 创建和返回一个归一化后的图像矩阵:
Mat dst;
switch(src.channels()) {
case1:
cv::normalize(_src, dst, 0,255, NORM_MINMAX, CV_8UC1);
break;
case3:
cv::normalize(_src, dst, 0,255, NORM_MINMAX, CV_8UC3);
break;
default:
src.To(dst);
break;
}
return dst;
}
//使用CSV文件去读图像和标签,主要使用stringstream和getline方法
staticvoid read_csv(const string& filename, vector<Mat>& images, vector<int>& labels, char separator =';') {
std::ifstream file(filename.c_str(), ifstream::in);
if (!file) {
string error_message ="No valid input file was given, please check the given filename.";
CV_Error(CV_StsBadArg, error_message);
}
string line, path, classlabel;
while (getline(file, line)) {
stringstream liness(line);
getline(liness, path, separator);
getline(liness, classlabel);
if(!path.empty()&&!classlabel.empty()) {
images.push_back(imread(path, 0));
labels.push_back(atoi(classlabel.c_str()));
}
}
}

int main(int argc, constchar*argv[]) {
// 检测合法的命令,显示用法
// 如果没有参数输入则退出!.
if (argc <2) {
cout <<"usage: "<< argv[0]<<" <csv.ext> <output_folder> "<< endl;
exit(1);
}
string output_folder;
if (argc ==3) {
output_folder = string(argv[2]);
}
//读取你的CSV文件路径.
string fn_csv = string(argv[1]);
// 2个容器来存放图像数据和对应的标签
vector<Mat> images;
vector<int> labels;
// 读取数据. 如果文件不合法就会出错
// 输入的文件名已经有了.
try {
read_csv(fn_csv, images, labels);
} catch (cv::Exception& e) {
cerr <<"Error opening file \""<< fn_csv <<"\". Reason: "<< e.msg << endl;
// 文件有问题,我们啥也做不了了,退出了
exit(1);
}
// 如果没有读取到足够图片,我们也得退出.
if(images.size()<=1) {
string error_message ="This demo needs at least 2 images to work. Please add more images to your data set!";
CV_Error(CV_StsError, error_message);
}
// 得到第一张照片的高度. 在下面对图像
// 变形到他们原始大小时需要
int height = images[0].rows;
// 下面的几行代码仅仅是从你的数据集中移除最后一张图片
//[gm:自然这里需要根据自己的需要修改,他这里简化了很多问题]
Mat testSample = images[images.size() -1];
int testLabel = labels[labels.size() -1];
images.pop_back();
labels.pop_back();
// 下面几行创建了一个特征脸模型用于人脸识别,
// 通过CSV文件读取的图像和标签训练它。
// T这里是一个完整的PCA变换
//如果你只想保留10个主成分,使用如下代码
// cv::createEigenFaceRecognizer(10);
//
// 如果你还希望使用置信度阈值来初始化,使用以下语句:
// cv::createEigenFaceRecognizer(10, 123.0);
//
// 如果你使用所有特征并且使用一个阈值,使用以下语句:
// cv::createEigenFaceRecognizer(0, 123.0);
//
Ptr<FaceRecognizer> model = createEigenFaceRecognizer();
model->train(images, labels);
// 下面对测试图像进行预测,predictedLabel是预测标签结果
int predictedLabel = model->predict(testSample);
//
// 还有一种调用方式,可以获取结果同时得到阈值:
// int predictedLabel = -1;
// double confidence = 0.0;
// model->predict(testSample, predictedLabel, confidence);
//
string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel);
cout << result_message << endl;
// 这里是如何获取特征脸模型的特征值的例子,使用了getMat方法:
Mat eigenvalues = model->getMat("eigenvalues");
// 同样可以获取特征向量:
Mat W = model->getMat("eigenvectors");
// 得到训练图像的均值向量
Mat mean = model->getMat("mean");
// 现实还是保存:
if(argc==2) {
imshow("mean", norm_0_255(mean.reshape(1, images[0].rows)));
} else {
imwrite(format("%s/mean.png", output_folder.c_str()), norm_0_255(mean.reshape(1, images[0].rows)));
}
// 现实还是保存特征脸:
for (int i =0; i < min(10, W.cols); i++) {
string msg = format("Eigenvalue #%d = %.5f", i, eigenvalues.at<double>(i));
cout << msg << endl;
// 得到第 #i个特征
Mat ev = W.col(i).clone();
//把它变成原始大小,为了把数据显示归一化到0~255.
Mat grayscale = norm_0_255(ev.reshape(1, height));
// 使用伪彩色来显示结果,为了更好的感受.
Mat cgrayscale;
applyColorMap(grayscale, cgrayscale, COLORMAP_JET);
// 显示或者保存:
if(argc==2) {
imshow(format("eigenface_%d", i), cgrayscale);
} else {
imwrite(format("%s/eigenface_%d.png", output_folder.c_str(), i), norm_0_255(cgrayscale));
}
}
// 在一些预测过程中,显示还是保存重建后的图像:
for(int num_components =10; num_components <300; num_components+=15) {
// 从模型中的特征向量截取一部分
Mat evs = Mat(W, Range::all(), Range(0, num_components));
Mat projection = subspaceProject(evs, mean, images[0].reshape(1,1));
Mat reconstruction = subspaceReconstruct(evs, mean, projection);
// 归一化结果,为了显示:
reconstruction = norm_0_255(reconstruction.reshape(1, images[0].rows));
// 显示或者保存:
if(argc==2) {
imshow(format("eigenface_reconstruction_%d", num_components), reconstruction);
} else {
imwrite(format("%s/eigenface_reconstruction_%d.png", output_folder.c_str(), num_components), reconstruction);
}
}
// 如果我们不是存放到文件中,就显示他,这里使用了暂定等待键盘输入:
if(argc==2) {
waitKey(0);
}
return0;
}

我使用了伪彩色图像,所以你可以看到在特征脸中灰度值是如何分布的。你可以看到特征脸不但对人脸特征进行编码,还对这些图像中的光照进行编码。(看第四张图像是左侧的光照,而第五张是右侧的光照)[gm:PCA对光照变化图像识别效果很差,自然有一些改进方法,有后再谈]

9. 主成分分析的主要步骤包括

主成分分析是指通过将一组可能存在相关性的变量转换城一组线性不相关的变量,转换后的这组变量叫主成分。
主成分分析步骤:1、对原始数据标准化,2、计算相关系数,3、计算特征,4、确定主成分,5、合成主成分。
主成分分析的原理是设法将原来变量重新组合成一组新的相互无关的几个综合变量,同时根据实际需要从中可以取出几个较少的总和变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上处理降维的一种方法。

主成分分析的主要作用
1.主成分分析能降低所研究的数据空间的维数。
2.有时可通过因子负荷aij的结论,弄清X变量间的某些关系。
3.多维数据的一种图形表示方法。
4.由主成分分析法构造回归模型。即把各主成分作为新自变量代替原来自变量x做回归分析。
5.用主成分分析筛选回归变量。
最经典的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的方差来表达,即Va(rF1)越大,表示F1包含的信息越多。因此在所有的线性组合中选取的F1应该是方差最大的,故称F1为第一主成分。

10. 人脸识别方向就业怎么样啊

人脸识别技术在公安工作中的应用

人脸识别技术在公安工作中的应用
■郝新华
人脸识别技术的研究方法目前主要有基于整体的人脸识别和基于特征分析的人脸识别两个研究方向;并且人脸识别技术已经进入实际应用阶段。公安工作中运用人脸识别技术在布控排查、犯罪嫌疑人识别、人像鉴定以及重点场所门禁等领域获得了良好的应用效果。
人体生物特征识别是通过计算机、各种传感器和
生物统计学原理等高科技手段密切结合,利用人体固有的生物特征来进行个人身份识别。包括人脸识别技术在内的人体生物特征识别技术是近年来在全球范围内迅速发展起来的计算机安全技术。与虹膜识别、指纹识别、掌纹识别、签名识别、声音识别等人体生物特征识别技术相比,人脸识别具有方便友好、易于接受、不易伪造等优点,目前可用于身份认证、视频监测及视频资料检索分析等方面,是当前计算机视觉、模式识别和人工智能领域的一个研究热点。在9·11恐怖袭击事件发生后,美国连续签署了三个法案,要求必须采用生物识别技术。我国在第二代身份证上也嵌入了可机读的人像信息。据报道,2008年北京奥运会期间也将人脸识别系统应用于安保。
一、人脸识别技术概述
人脸自动识别系统的研究开始于20世纪60年代末期,20世纪90年代后期人脸识别技术逐渐从实验室走向了商用。如1998年德国西门
子公司的Nixdorf高技术公司开发成功Face VACS;2001年日本东芝旗下的E-Solution公司推出Face Pass;美国开发的Face It等专业的商业人脸识别系统开始进入市场。我国从1994年开始研究人脸识别问题;2000年5月银晨网讯科技有限公司与中国科学院计算机所合作
组建了面像识别联合实验室。经过研发,课题组实现跨越式发展,
攻克了数十项技术难关,开发出具有完全自主知识产权的产品和系统;2005年1月18日,由清华大学电子系苏光大教授担任人脸识别课题组负责人主持承担的国家“十五”攻关项目《人脸识别系统》通过了由公安部主持的专家鉴定,达到了国内领先水平和国际先进水平。人脸识别技术作为最容易隐蔽使用的识别技术成为当今国际反恐、安全防范以及刑事侦查等最重要的手段。目前我国人脸识别技术也开
始进入实际应用阶段。作为国家863计划成果产业化基地的银晨网讯科技有限公司已经开发出人像识别布控机等系列产品。
二、人脸识别的技术方法
人脸作为具有复杂细节变化的自然结构目标,其特征的可靠性往往受到表情、角度、光照、背景等细微变化的影响,消除这些影响成为人脸识别问题的关键。为此,研究人员设计了许多特征提取算法,希望在降低面像维数的同时提取稳健可靠的特征。目前的研究主要有两个方向:第一是基于整体的人脸识别研究方法,即将人脸图像看作是一个二维的灰度分布,然后利用不同的降维和特征提取方法获得每个人的人脸表征进行识别;第二是基于特征分析的人脸识别方法,利用每个人的面部特征如眼睛、鼻子、眉毛、嘴巴和面部轮廓等的具体位置、大小、形状及其相对位置的不同来进行特征提取以达到识别的目的,即将人脸基准点的相对比率和其它描述人脸脸部特征的形状参数或类别参数等一起构成识别特征向量。这种基于整体脸的识别不仅保留了人脸局部之问的拓扑关系,而且也保留了各局部本身
的信息,而基于局部的识别则是通过提取出局部轮廓信息及灰度信息来设计具体识别算法。
1.特征脸算法
1987年Sirovich 和 Kirby提出了主成分分析方法(Principal Component Analysis),Matthew Turk和Alex Pentland于1991年首次将PCA应用于人脸识别,将原始图像投影到特征空间中,得到一系列降维图像,取其主元表示人脸,由于主元具有脸的形状故称为“特征脸”。特征脸方法中一个基本的方法是基于K-L变换的特征脸方法,该方法是根据K-L变换得到人脸图像的特征,并根据人脸特征空间进行识别的方法。基于K-L变换的特征脸技术实质上依赖于图像灰度在空间分布上的相关性来得到一系列的特征向量和特征值来表示。K-L变换主要是对模式样本矢量的相关矩阵进行特征值分解,选择其中的主特征矢量构成特征空间。基于主成分分析方法,算法简单有效,研
究者在其基础上进行了大量的改进和扩展,目前仍然是人脸识别领域流行的算法之一,同时也是对比测试时的基准识别算法。

阅读全文

与特征脸方法第一次将主成分分析相关的资料

热点内容
窗帘幔子怎么安装方法 浏览:847
简述利润表阅读与分析的方法 浏览:979
猪群最佳引种方法 浏览:57
电脑组装方法步骤图片 浏览:471
花生多效唑的使用方法及注意事项 浏览:444
如何学会吹笛子的方法 浏览:561
环己酮的检测方法 浏览:478
四米八锻炼身体的方法 浏览:784
第八代五粮液酒鉴别真伪的方法2021年 浏览:545
玉石的鉴别方法用手电照 浏览:618
常见的案例研究方法有哪些 浏览:452
100个计算方法视频 浏览:341
膨胀挂钩安装方法 浏览:684
老式全站仪坐标计算方法 浏览:605
支原体的治疗方法 浏览:436
标枪训练方法的应用 浏览:287
快速消耗儿童体力的方法 浏览:667
纸质退单正确书写方法 浏览:94
马云手机创业方法 浏览:567
仔猪的脚疼怎么治疗方法 浏览:974