基于奇异值分解的人脸识别
- 格式:doc
- 大小:1.39 MB
- 文档页数:12
线性代数在人脸识别中的应用研究在人脸识别技术的快速发展中,线性代数扮演了重要的角色。
线性代数是一门研究向量、矩阵、线性方程组等数学对象及其代数运算的学科,广泛应用于人脸识别的算法和模型中。
本文将探讨线性代数在人脸识别中的具体应用研究。
一、特征向量与特征值分解特征向量与特征值分解是线性代数中重要的概念,其在人脸识别中的应用被广泛探索和验证。
通过对人脸图像进行特征向量与特征值分解,可以提取出人脸图像的主要特征。
这些特征可以用于比较、匹配和识别人脸图像。
在人脸识别中,常用的特征向量与特征值分解方法是主成分分析(PCA)。
通过PCA,可以将高维的人脸图像转化为低维的特征向量表示。
具体而言,PCA将人脸图像矩阵进行奇异值分解,得到特征向量矩阵和特征值矩阵。
利用特征向量矩阵,我们可以将原始图像进行降维,提取出其中的主要特征,而特征值矩阵则表示了这些主要特征的重要程度。
二、向量空间和投影在人脸识别中,向量空间和投影也是线性代数的重要应用。
通过将人脸图像空间转化为向量空间,可以方便地进行人脸识别算法的设计与实现。
首先,我们将训练集中的人脸图像表示为向量,构建一个人脸图像向量空间。
然后,将待识别的人脸图像投影到该空间中,利用向量空间的计算方法比较待识别人脸图像与训练集中人脸的相似度。
通过计算和比较向量之间的距离或角度,可以实现人脸的快速识别。
三、线性方程组与矩阵运算在人脸识别算法中,线性方程组与矩阵运算也被广泛应用。
例如,通过解线性方程组可以计算出两个向量之间的线性关系,从而判断它们是否具有相似性。
另外,利用矩阵运算的性质,可以对人脸图像进行变换和操作。
例如,利用线性代数的矩阵乘法运算,可以对人脸图像进行旋转、缩放和平移等变换操作。
这些变换可以帮助我们更好地理解和识别人脸图像中的特征。
四、奇异值分解和压缩感知奇异值分解和压缩感知是人脸识别领域中常用的数学方法,也有着深厚的线性代数基础。
通过奇异值分解,我们可以对人脸图像进行降维和重构,获得更加紧凑和表示能力强的特征。
⼈脸识别的主要算法以及原理⼈脸识别的主要算法以及原理主流的技术基本上可以归结为三类,即:基于⼏何特征的⽅法、基于模板的⽅法和基于模型的⽅法。
1. 基于⼏何特征的⽅法是最早、最传统的⽅法,通常需要和其他结合才能有⽐较好的效果;2. 基于模板的⽅法可以分为基于相关匹配的⽅法、特征脸⽅法、线性判别分析⽅法、奇异值分解⽅法、神经⽹络⽅法、动态连接匹配⽅法等。
3. 基于模型的⽅法则有基于隐马尔柯夫模型,主动形状模型和主动外观模型的⽅法等。
1. 基于⼏何特征的⽅法⼈脸由眼睛、⿐⼦、嘴巴、下巴等部件构成,正因为这些部件的形状、⼤⼩和结构上的各种差异才使得世界上每个⼈脸千差万别,因此对这些部件的形状和结构关系的⼏何描述,可以做为⼈脸识别的重要特征。
⼏何特征最早是⽤于⼈脸侧⾯轮廓的描述与识别,⾸先根据侧⾯轮廓曲线确定若⼲显著点,并由这些显著点导出⼀组⽤于识别的特征度量如距离、⾓度等。
Jia 等由正⾯灰度图中线附近的积分投影模拟侧⾯轮廓图是⼀种很有新意的⽅法。
采⽤⼏何特征进⾏正⾯⼈脸识别⼀般是通过提取⼈眼、⼝、⿐等重要特征点的位置和眼睛等重要器官的⼏何形状作为分类特征,但Roder对⼏何特征提取的精确性进⾏了实验性的研究,结果不容乐观。
可变形模板法可以视为⼏何特征⽅法的⼀种改进,其基本思想是 :设计⼀个参数可调的器官模型 (即可变形模板),定义⼀个能量函数,通过调整模型参数使能量函数最⼩化,此时的模型参数即做为该器官的⼏何特征。
这种⽅法思想很好,但是存在两个问题,⼀是能量函数中各种代价的加权系数只能由经验确定,难以推⼴,⼆是能量函数优化过程⼗分耗时,难以实际应⽤。
基于参数的⼈脸表⽰可以实现对⼈脸显著特征的⼀个⾼效描述,但它需要⼤量的前处理和精细的参数选择。
同时,采⽤⼀般⼏何特征只描述了部件的基本形状与结构关系,忽略了局部细微特征,造成部分信息的丢失,更适合于做粗分类,⽽且⽬前已有的特征点检测技术在精确率上还远不能满⾜要求,计算量也较⼤。
奇异值分解(Singular Value Decomposition, SVD)是一种常用的矩阵分解方法,被广泛应用于图像处理、信号处理、数据降维等领域。
在图像处理中,SVD可以用来对图像进行压缩、去噪、特征提取等操作。
本文将通过实际案例分析,探讨奇异值分解在图像处理中的应用。
1. 奇异值分解的基本原理奇异值分解是将一个矩阵分解为三个矩阵的乘积,即A=UΣV^T,其中A是一个m×n的矩阵,U是一个m×m的正交矩阵,Σ是一个m×n的对角矩阵,V^T是一个n×n的正交矩阵。
在图像处理中,我们通常将图像矩阵看作一个二维数组,利用SVD可以将图像矩阵分解为三个部分,分别对应图像的亮度、颜色和空间结构。
2. 图像压缩奇异值分解可以实现对图像的压缩,通过保留最重要的奇异值,可以在减小数据量的同时尽可能地保持图像的质量。
这在图像传输和存储中有着重要的应用。
例如,当我们需要将大尺寸的图像传输到远程地点时,可以利用SVD对图像进行压缩,减小传输所需的带宽和存储空间。
3. 图像去噪在图像处理中,图像去噪是一个重要的问题。
奇异值分解可以通过滤除较小的奇异值来实现图像去噪。
实际上,奇异值表示了图像的重要信息,而较小的奇异值通常对应于图像中的噪声。
通过保留较大的奇异值,可以有效地去除图像中的噪声,从而得到更清晰的图像。
4. 图像特征提取奇异值分解还可以用于图像的特征提取。
通过保留最大的奇异值和对应的左右奇异向量,可以得到图像的主要特征。
这对于图像识别和分类等任务非常有用。
例如,在人脸识别中,可以利用奇异值分解提取人脸图像的主要特征,从而实现人脸识别的任务。
5. 实际案例分析以图像压缩为例,我们可以通过以下步骤对图像进行压缩:- 读取原始图像,并将其转换为灰度图像。
- 对灰度图像进行奇异值分解,得到对应的U、Σ和V^T三个矩阵。
- 保留部分奇异值,将其余奇异值置零,从而实现对图像的压缩。
浅析矩阵分解的原理及其在人脸识别中的应用摘要:矩阵分解方法有多种,本文首先对矩阵的分解方法做了简单的介绍,这些分解在数值代数和最优化问题的解决中都有着十分重要的角色以及在其它领域方面也起着必不可少的作用。
人脸识别是指采用机器对人脸图像进行分析,进而提取有效的识别信息从而达到身份辨认的目的。
近年来因其在安全、认证、人机交互、视频电话等方面的广泛应用前景而越来越成为计算机模式识别领域的热点。
本文在分析矩阵分解的原理后详细针对其在人脸识别中的应用做了一些初步认识的总结。
关键词:矩阵分解QR分解奇异值分解非负矩阵分解人脸识别矩阵是数学中最重要的基本概念之一,是代数学的一个主要研究对象,也是数学研究及应用的一个重要工具。
在近代数学、工程技术、信息处理、经济理论管理科学中,也大量涉及到矩阵理论的知识,矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积或者一些矩阵之和。
这些分解式的特殊形式,一是能明显地反映出原矩阵的某些特征;二是分解的方法与过程提供了某些有效的数值计算方法和理论分析依据。
人脸识别是指采用机器对人脸图像进行分析 ,进而提取有效的识别信息从而达到身份辨认的目的。
虽然人类能轻松地识别出人脸,但人脸的自动机器识别却是一个难度极大的课题,它涉及到图像处理、模式识别、计算机视觉和神经网络等学科,也和对人脑的认识程度紧密相关。
现在矩阵分解在人脸识别中应用很广泛,有不同的算法来实现,本文将对现有的算法做总结和比较。
1 矩阵的分解方法矩阵分解 (decomposition, factorization)是将矩阵拆解为数个矩阵的乘积,可分为三角分解、满秩分解、QR分解、Jordan分解和SVD(奇异值)分解等,常见的有三种:1)三角分解法 (Triangular Factorization),2)QR 分解法 (QR Factorization),3)奇异值分解法 (Singular Value Decomposition)。
人机交互大作业——人脸识别“人脸识别”系统设计文档人脸识别的意义及应用人脸识别是指对视频或图像中的人脸进行发现,追踪,进而识别出是特定个体的一种生物特征技术,也是生物特征识别中最主要的研究方向之一。
人脸识别在日常生活中有着非常广泛的应用市场。
下面列举了一些人脸识别的主要应用:1.监控系统监控系统在日常生活中非常常用,是防盗系统的主要组成部分之一。
人工智能的监控系统的一大优势就是可以将人类从每天对着监视器的枯燥工作中解脱出来。
将监视的工作交给计算机来做,有几个优势。
一是可以365天,24小时不间断的工作。
二是可以不知疲倦,不会因为时间长而分散注意力。
但是人工智能的监控系统仍面临着很多问题,比如漏识别,识别误差等等。
2.身份验证身份验证系统可以应用的范围也很广。
比如现有的银行存取款系统,当人的银行卡和密码同时丢失时,卡中的钱就可能被转走。
但是如果在取款机上安装一个人脸识别系统,在提供银行卡和密码时,同时需要进行面部认证,这样就会大大降低个人财产损失的风险。
3.考勤系统考勤系统通常用在公司里。
传统的考勤系统需要给每个员工分配一张考勤卡,每天上下班需要去打卡。
这样会给员工带来一定的不便。
如果员工忘记带卡,或者卡有损坏,就会耽误打卡。
而且专门设立打卡地点,不仅上下班打卡不方便,而且还会出现替打卡的情况。
使用人脸识别系统,可以在不被觉察的情况下,自然地实现员工的考勤。
减少了很多不必要的麻烦。
4.视频、图像检索随着人们对图像,视频等需求的不断扩展,网络上的图像和视频信息量也在以极快的速度增长。
在如此庞大的信息库中快速查找到用户需要的信息成了现在研究的一个重要方向。
而现在最主流的方式是在视频和图像上附带描述信息。
这种描述信息可以被发布人随意更改,很多时候会对用户产生误导,浪费了时间。
而用人脸识别进行图像和视频的检索,在检索某些特定人相关的资源时,会大大提高搜索结果的质量。
再配合上描述关键词,能使人更快速寻找到所需信息。
人脸识别的优势和困难人脸识别相对于传统的身份验证技术,和现有的虹膜识别,指纹识别等技术有一个显著的优势,就是可以自然地获取识别对象的身份信息,而不需要识别对象刻意的配合。
虹膜识别和指纹识别都需要识别对象的配合。
在这种情况下,识别对象可以有意识的进行伪装和欺骗。
而人脸识别是在人们不经意的时候对人们图像的采集和识别,不会引起识别对象的注意。
因此从某种意义上更容易获得真实的信息。
虽然人脸识别有着不可比拟的优势,但是在实现方面还有着很大的困难。
首先,人脸具有很高的相似性。
不同的个体之间人脸的区别不是很大。
这一点对于人脸在图像中的定位是有利的,但是要对人脸进行进一步的识别是很不利的。
所以要对人脸进行识别必须考虑更细致的面部特征来区分个体。
第二,人脸具有易变性。
人脸作为一种生物特征,并不是一成不变的。
随着年龄的增长,人的容貌会发生改变。
人的心情不同,面部表情不同,人脸也会发生不一样的变化。
人的装束,发型,脸部的装饰等等,都会给识别工作带来干扰。
如何克服这些变化,从而达到最好的识别效果,是人脸识别的难题之一。
第三,人脸识别的约束性。
根据现在的技术,人脸识别只是在光照比较稳定,用户配合度高的环境下才能取得良好的效果。
但是很多情况下,识别环境会有光线变化和拍摄角度变化。
如何处理光线的变化和人脸角度的变化是人脸识别的另一个主要困难。
只有克服了这些困难,才能实现实用的,鲁棒性强的人脸识别。
人脸识别流程人脸识别主要分为两个部分,一个部分是学习(训练)过程,另一个是识别的过程。
人脸的检测是学习和识别的先决条件。
首先要对视频或者图片中的人脸进行检测和跟踪。
第二步要将跟踪的人脸进行裁剪,灰度化等各种处理。
第三部是对处理过的样本进行特征值的提取。
在学习过程中,要将特征值全部存入一个样本库中,以便识别时调用。
在识别过程中,要将样本的特征值,通过特定的距离算法,选出与样本库中特征值最相近的样本,作为检测结果。
当然,如果检测样本与最相似的人脸距离超过一个阈值的话,则可以判定该样本库中不存在检测样本对应的人脸。
人脸识别主要方法人脸识别有很多成型的算法,从各个角度对人脸的区分进行了研究。
下面列举了一些主要的人脸识别算法。
基于几何特征的人脸识别:基于几何特征的人脸识别是利用面部器官的形状,结构等特征进行识别的方法。
人的面部器官的大小和形状会根据个体不同而有变化,而不同的人这些器官之间的距离也是不同的。
这些差异放到一起,组成了千差万别的人脸。
基于几何特征的人脸识别正是利用了这些差异对人脸进行识别的。
基于子空间的人脸识别:基于子空间的人脸识别方式是指通过对人脸图片矩阵进行线性或非线性的矩阵变换,投影到低维矩阵上,进而进行人脸识别的方法。
基于子空间的人脸识别的代表主要有主成分分析(PCA)、奇异值分解等方法。
基于神经网络的人脸识别:基于神经网络的人脸识别可以获得其他方法难以获得的人脸规则和特征的隐形表示。
但是这种方法通常需要多个样本进行学习。
基于神经网络的人脸识别中最有影响力的是动态链接结构。
基于小波变换特征的人脸识别:小波变换特征原是应用在信号处理方面的工具,近年来被用在人脸识别领域。
弹性匹配方法是小波变换特征识别的代表。
基于隐马尔科夫模型的人脸识别:此方法最先被用在声音识别上,后被引入到人脸识别领域。
隐马尔科夫模型中节点表示状态,有向边表示状态之间的转移。
隐马尔科夫模型的鲁棒性较好,受姿态等影响较小。
识别率较高。
系统基本思路本程序分为三个模块,分别是样本采集模块,训练模块和识别模块。
样本采集模块样本采集模块的主要功能是采集人脸部分的图片,并进行裁剪和灰度化处理。
首先是要检测到人脸所在的位置并进行跟踪。
这里我们使用了OpenCV提供的Haar模板匹配的方法。
将图片以方阵为单位进行顺序扫描,如果发现符合的矩阵,对其进行画框标记,以告知使用者发现人脸。
然后将画框的人脸图片从采集到的图片中裁剪出来。
样本裁剪的大小是统一的。
这里我们使用的大小是100px*110px(w*h)。
然后将裁剪好的图片进行灰度化处理。
将处理之后的图片保存起来,作为经过预处理的样本。
训练模块训练模块是整个程序的核心模块。
训练模块的主要功能是计算样本的特征值,形成样本模板库。
这个阶段需要的输入是样本采集模块形成的预处理过的样本图片。
首先将所有的样本图片进行矩阵的累加,然后除以样本总数,得到平均脸的图像。
第二步,将得到的平均脸进行奇异值分解,得到一个左奇异矩阵和一个又奇异矩阵。
然后,将所有样本图片依次向平均脸进行投影,具体投影方法参见上图。
注意要将左奇异阵和右奇异阵进行转置后再做乘法。
最后,取所得矩阵的对角线元素作为该样本的特征值进行存储。
识别模块识别模块是一个待识别图像的特征值和样本库中的特征值进行比较的过程,是实现识别功能的一个过程。
首先,要按照学习模块的方式求出样本的特征值。
然后,将待识别样本的特征值与样本库中得到的图片的特征值一一进行比对。
我们采用了最近邻近分类器(NNC),即用待识别样本的特征值与样本库中所有的特征值计算距离,取距离最近的那个特征值所在的分类作为最后的识别结果。
系统理论基础奇异值分解本系统主要的理论基础是基于奇异值分解。
下面介绍一下奇异值分解:假设A为一个阶矩阵,不失一般性假设。
A中所有元素都属于实数域或复数域。
则存在这样一个分解使得:其中,U和V为正交方阵,U称为左奇异阵,V称为右奇异阵奇异值分解有如下性质:1.稳定性2.位移不变性3.与对应图像亮度成比例变化4.旋转不变性5.转置不变性奇异值分解相对于其他特征值分解的一个显著优势是,在保留了图像物理特征的基础上,将特征值的计算从方阵扩展到了一半矩阵。
奇异值分解的稳定性、位移不变性等性质,也确保了人脸小幅度的变化情况下的识别率。
系统实现这部分是系统的常量定义。
定义了系统中通用的常量,包括图片和样本特征值的存储地址,图片和特征值的存储格式,样本图片的尺寸大小,每个人训练的样本个数,人脸分类器的名称等。
通过定义这些常量,方便了程序参数方面的改动。
这部分是人脸检测部分。
首先加载人脸分类器“cascade.xml ”。
然后对从摄像头获得的单幅图像进行Haar 特征的检测。
由于640*480的原始图像大小检测速度过慢,所以我们先将原始图像缩小的一半的大小,即320*240,然后对人脸位置进行检测。
这种方法没有降低人脸检测能力,而检测速度大为提升。
另外,为了进一步提升检测速度,对检测的范围也做了一个约束。
最后将小图像里的人脸位置按比例放大到原始图像大小,并在原始图像中标记显示出来。
这部分代码是负责计算平均脸。
“average[][]”是存储所有人脸图片累加的数组。
这里对这个数组的每个元素除以总学习样本个数,得到的就是平均脸的图像。
此部分代码对所得的平均脸进行了奇异值分解(SVD),得到左奇异阵和右奇异阵。
为了方便下一步的计算,对左奇异阵进行了转置。
此部分代码是对每一个样本向平均脸投影,将得到的结果存储起来。
其中投影用到的左右奇异阵都是上一步得出来的。
这部分代码是求两个样本特征值之间的距离。
我们使用的是欧拉距离。
也就是对应元素之差的平方累加后开平方的结果作为两个向量间的距离。
运行结果初始界面:1、获取样本图片;2、训练所有样本;3、识别;4、推出系统人脸检测过程,粉色的方框里是样本采集时人脸的部分。
可以看到方框是一个矩形,而不是正方形。
这正是奇异值分解方式相对于其他特征值分解方式的优势。
识别结果。
前面显示的是样本库中特征值和待检测样本特征值的欧拉距离。
最后显示的是距离最小的特征值所在的样本库的名称,作为检测结果。
系统缺陷1.系统对光线敏感。
如果系统在学习和识别过程中,光线强弱或者偏向有较大变化,则系统无法正确识别检测对象。
2.系统无法对大的表情变化进行矫正。
如果检测对象的表情和样本库中的表情有较大差别的话,则可能无法正确识别检测对象。
3.系统无法对头部大的转动或倾斜做出处理。
如果头部转动或倾斜过大,则会产生识别错误。
心得体会通过这次的大作业,我学到了很多的东西。
首先,对人脸识别方面有了一些初步的了解。
了解了很多人脸识别的方式方法。
也初步实现了其中的一种方法。
虽然识别时候的,在光源比较稳定,参与者配合度高的情况下,取得了良好的识别效果。
但是由于算法简单,所以系统的鲁棒性较差,在光线变化较大,人脸扭曲或转动过多的时候,识别的准确率大大下降。
第二,通过这个大作业,我对OpenCV编程有了一些了解,并使用了其中的一些函数。
虽然在使用过程中遇到了很多使用上的困难,但通过查资料,也都一一找出了解决的方法。
充分的锻炼了解决问题的能力。
第三,借助这个大作业,我阅读了很多人脸识别相关的论文。
刚开始看的时候对里面的算法很头痛。
一点都看不明白,十分苦恼。
但是经过一些研究之后,现在已经能对基本的算法有一些理解。