基于K-L变换的人脸识别
- 格式:doc
- 大小:153.00 KB
- 文档页数:9
人脸识别综述摘要:首先介绍了人脸识别的发展历程及基本分类;随后对人脸识别技术方法发展过程中一些经典的流行的方法进行了比较详细的阐述。
最后介绍了人脸识别的应用及发展现状,总结了人脸识别所面临的困难。
关键词:人脸识别1引言人脸是人类最重要的生物特征之一,反映了很多重要的生物信息,如身份,性别,种族,年龄,表情等等。
随着计算机技术的飞速发展,基于人脸图像的计算机视觉和模式识别问题也成为近些年研究的热点问题。
其中包括人脸检测,人脸识别,人脸表情识别等各类识别问题。
对于人脸识别问题的研究已有几十年的时间,在理论研究和实际开发方面都取得了一定的进展,并且目前已有一些电子产品配备了人脸识别系统。
但是,对于人脸性别和种族识别的研究却比较少,但研究这个问题的意义和实际价值却是不可忽视的。
在实际公共场所的安检系统中,大多数情况下都是将多种模式识别系统结合在一起,以尽量提高检测识别的准确度,性别识别系统也是其中不可缺少的一部分。
对它的研究不仅有助于提供更多个性化的人机交互方式,还可以应用于各种监控系统、电子产品的用户身份鉴别和信息采集系统。
从理论意义上来说,也丰富了原有的人脸识别方法,使得人脸识别系统不但可以识别出被识别者是谁,还能自动给出其性别和种族,从而提高人脸识别的准确率和图像检索效率。
所谓人脸识别,就是利用计算机分析人脸视频或者图像,并从中提取出有效的识别信息,最终判别人脸对象的身份。
人脸与人体的其他生物特征(指纹、虹膜等)一样与生俱来,它们所具有的唯一性和不易被复制的良好特性为身份鉴别提供了必要的前提;同其他生物特征识别技术相比,人脸识别技术具有操作简单、结果直观、隐蔽性好的优越性。
因此,人脸识别在信息安全、刑事侦破、出入口控制等领域具有广泛的应用前景。
2人脸识别的发展历程及方法分类关于人脸识别的研究最早始于心理学家们在20世纪50年代的工作,而真正从工程应用的角度来研究它则开始于20世纪60年代。
最早的研究者是Bledsoe,他建立了一个半自动的人脸识别系统,主要是以人脸特征点的间距、比率等参数为特征。
实验二利用K-L变换法进行人脸识别
一、实验目的
主分量分析是一种有效的通过线性变换来降低特征维数的方法,也称为Karhunen-Loeve变换(K-L变换)。
此变换是一种基于目标统计特性的最佳正交变换,它的最佳性体现在变换后产生的新的分量正交或不相关。
编写利用K-L变换进行人脸识别的程序,体会K-L变换的基本思路,掌握K-L变换的性质,理解利用该方法进行人脸识别的原理。
二、实验要求
1、编写用K-L变换法进行人脸识别的程序,对标准图像库进行人脸识别实验。
ORL_faces图像库中有40组人脸图像,每组内的10幅图像取自同一个人,部分人脸图像如下图所示。
利用每组中的前5幅人脸图像(共200幅)作为训练样本,生成人脸识别的分类器,显示“平均脸”图像和“特征脸”图像。
用剩下的200幅图像作为测试样本,输出识别结果,检测识别率。
2、(选做)对自建图像库进行人脸识别实验,利用每组中的前5幅人脸图像作为训练样本,生成人脸识别的分类器,显示“平均脸”图像和“特征脸”图像。
用剩下的图像作为测试样本,输出识别结果,检测识别率。
三、实验报告要求
1、写出自己编写的程序(不用全抄下来,只写要求编写的部分即可)。
2、回答下列问题:
(1)K-L变换的特殊性体现在哪里?
(2)为什么利用K-L变换可以进行人脸识别?(3)如何理解“特征脸”?
(4)何谓“主分量”?。
K_L变换,SVD变换在图像处理中实际应用讨论一.K_L变换在人脸识别中的实际应用模式识别中一个最基本的问题就是特征抽取, 抽取有效的鉴别特征是解决识别问题的关键。
K-L 变换是特征抽取的最有效的方法之一。
基于K -L 变换的特征抽取有四种最为经典和常用的技术, 其中主分量分析( PCA, 或称以总体散布矩阵为产生矩阵的K-L 变换) 被广泛地应用在人脸等图像识别领域。
主分量分析在处理图像识别问题时, 其弱点也很明显: 首先, 将图像矩阵转化为图像向量后, 造成图像向量的维数一般较高, 比如, 图像的分辨率为100×100, 所得图像向量的维数高达10000, 在如此高维的图像向量上完成PCA 是非常耗时的。
尽管在PCA 中利用奇异值分解定理可加速总体散布矩阵的本征向量的求解速度, 但整个特征抽取过程所耗费的计算量相当可观; 其次, 主分量分析的训练是非监督的,即PCA 无法利用训练样本的类别信息。
另一种经典的K-L 变换方法, 即包含在类平均向量中判别信息的最优压缩技术, 其识别性能优于非监督的主分量分析方法。
受Hong代数特征抽取思想的启发, 本研究提出了一种直接基于图像矩阵的包含在类平均图像中判别信息的最优压缩方法——广义K-L 变换, 它克服了传统主分量分析的弱点。
在ORL 标准人脸库上的试验结果表明, 广义K-L变换方法不仅在识别性能上优于Eigenfaces 方法和Fisherfaces 方法, 且特征抽取的速度提高了近19 倍。
1. 1基本思想定义1: 设X 表示n 维列向量, 将m×n 的图像矩阵A 通过以下线性变换直接投影到X 上。
Y= A X ( 1)得到一个m 维列向量Y, X 为投影轴, Y 为图像A的投影特征向量。
设有C 个已知的模式类别, ni 表示第i 类的训练样本数, N 表示各类的训练样本总数。
第i 类的第j 个训练样本图像为m×n 的矩阵Aj ( i=1, 2, ⋯, C; j = 1, 2, ⋯, ni) 。
1.1 人脸识别的主要方法目前,国内外人脸识别的方法很多,并且不断有新的研究成果出现。
人脸识别的方法根据研究角度的不同,有不同的分类方法。
根据输入图像中人脸的角度不同,可以分为正面,侧面,倾斜的人脸图像的识别;根据图像来源的不同,可分为静态和动态的人脸识别;根据输入图像的特点,又可分为灰度图像和彩色图像的人脸识别等等。
本文重点研究基于正面的、静态的灰度图像的识别方法。
对于静态的人脸识别方法从总体上看可以分为三大类:一是基于统计的识别方法,主要包括特征脸(Eigenface)方法和隐马尔科夫模型(Hidden Markov Model 简称HMM)方法等;二是基于连接机制的识别方法,包括人工神经网路(Artifical Neural Network 简称ANN)方法和弹性图匹配(Elastic Bunch Graph Matching 简称EBGM)方法等;三是一些其他的综合方法及处理非二维灰度图像的方法。
下面分别进行介绍。
1.1.1 基于特征脸的方法特征脸方法[5],又称为主成份分析法(Principal Component Analysis 简称PCA),它是20 世纪90 年代初期由Turk 和Pentland 提出的,是一种经典的算法。
它根据图像的统计特征进行正交变换(即K-L 变换),以消除原有向量各个分量之间的相关性。
变换得到对应特征值依次递减的特征向量,即特征脸。
特征脸方法的基本思想是将图像经过K-L 变换后由高维向量转换为低维向量,并形成低维线性向量空间,利用人脸投影到这个低维空间所得到的投影系数作为识别的特征矢量。
这样,就产生了一个由“特征脸”矢量张成的子空间,称为“人脸子空间”或“特征子空间”,每一幅人脸图像向其投影都可以获得一组坐标系数,这组坐标系数表明了人脸在子空间中的位置,因此利用特征脸方法可以重建和识别人脸。
通过人脸向量向特征子空间作投影得到的向量称之为主分量或特征主分量。
人脸识别的基本方法人脸识别的基本方法人脸识别的基本方法人脸识别的方法很多,以下介绍一些主要的人脸识别方法。
(1)几何特征的人脸识别方法几何特征可以是眼、鼻、嘴等的形状和它们之间的几何关系(如相互之间的距离)。
这些算法识别速度快,需要的内存小,但识别率较低。
(2)基于特征脸(PCA)的人脸识别方法特征脸方法是基于KL变换的人脸识别方法,KL变换是图像压缩的一种最优正交变换。
高维的图像空间经过KL变换后得到一组新的正交基,保留其中重要的正交基,由这些基可以张成低维线性空间。
如果假设人脸在这些低维线性空间的投影具有可分性,就可以将这些投影用作识别的特征矢量,这就是特征脸方法的基本思想。
这些方法需要较多的训练样本,而且完全是基于图像灰度的统计特性的。
目前有一些改进型的特征脸方法。
(3)神经网络的人脸识别方法神经网络的输入可以是降低分辨率的人脸图像、局部区域的自相关函数、局部纹理的二阶矩等。
这类方法同样需要较多的样本进行训练,而在许多应用中,样本数量是很有限的。
(4)弹性图匹配的人脸识别方法弹性图匹配法在二维的空间中定义了一种对于通常的人脸变形具有一定的不变性的距离,并采用属性拓扑图来代表人脸,拓扑图的任一顶点均包含一特征向量,用来记录人脸在该顶点位置附近的信息。
该方法结合了灰度特性和几何因素,在比对时可以允许图像存在弹性形变,在克服表情变化对识别的影响方面收到了较好的效果,同时对于单个人也不再需要多个样本进行训练。
(5)线段Hausdorff 距离(LHD) 的人脸识别方法心理学的研究表明,人类在识别轮廓图(比如漫画)的速度和准确度上丝毫不比识别灰度图差。
LHD是基于从人脸灰度图像中提取出来的线段图的,它定义的是两个线段集之间的距离,与众不同的是,LHD并不建立不同线段集之间线段的一一对应关系,因此它更能适应线段图之间的微小变化。
实验结果表明,LHD在不同光照条件下和不同姿态情况下都有非常出色的表现,但是它在大表情的情况下识别效果不好。
基于K-L变换的人脸识别一、实验原理及基本要求特征脸方法是基于K-L变换的人脸识别方法,K-L变换是图像压缩的一种最优正交变换。
高维的图像空间经过K-L变换后得到一组新的正交基,保留其中重要的正交基,由这些基可以张成低维线性空间。
如果假设人脸在这些低维线性空间的投影具有可分性,就可以将这些投影用作识别的特征矢量,这就是特征脸方法用于人脸识别的基本思想。
在人脸识别中,可以用离散K-L变换对人脸图像的原始空间进行转换,即构造人脸图像数据集的协方差矩阵,对之进行正交变换,求出协方差矩阵的特征向量,再依据特征值的大小对这些特征向量进行排序,每一个向量表示人脸图像中一个不同数量的变量,这些特征向量表示特征的一个集合,它们共同表示一个人脸图像。
在人脸识别领域,人们常称这些特征向量为特征脸。
每一个体人脸图像都可以确切地表示为一组特征脸的线性组合。
这样我们首先通过有指导的训练(给定训练样本集已知分类)得到样本集在特征脸空间中的坐标。
训练完成后,输入待辨识图像,求得在特征脸空间的坐标,采用欧式距离法,就可以实现人脸识别。
我们从网上下载人脸图像,构建人脸训练数据库和测试数据库,采用K-L变换进行特征脸提取,并实现人脸识别。
通过K-L变换在人脸识别中的应用,加深对所学内容的理解和感性认识。
二、具体做法及流程图ORL人脸库是由英国剑桥Olivetti实验室从1992年4月到1994年4月期间拍摄的一系列人脸图像组成,共有40个不同年龄、不同性别和不同种族的对象。
每个对象10幅图像共计400幅灰度图像组成,图像尺寸是92×112,图像背景为黑色。
其中人脸部分表情和细节均有变化,例如笑与不笑、眼睛睁着或闭着,戴或不戴眼镜等,人脸姿态也有变化,其深度旋转和平面旋转可达20度,人脸尺寸也有最多10%的变化。
该库是目前使用最广泛的标准数据库,它含有大量的比较结果。
本次试验我们用的是ORL人脸库中的人脸样本集,每个人的人脸样本集中含有十个人脸样本。
我们从其中挑出训练样本和测试样本。
对训练样本集采用K-L变换进行特征脸提取,并对测试样本集进行人脸识别。
步骤:1、读入训练人脸库。
读入时,将每个人脸图像转化为一维的列向量。
本次实验参与训练的人脸图像有N=40个,每个图像大小为92*112. 则训练图像可以表示为一个(92×112)×40的矩阵X 。
其中,第i 个人脸可以表示为],,,[)(:,112*9221ii i i x x x i X x , )40,2,1( i2、计算平均脸和相应的距离向量。
平均脸就是所有人脸图像的平均值向量。
计算公式如下:Ni ixNx 11则每张人脸与平均脸之间的距离向量可以表示为:x x d ii3、计算特征脸。
设矩阵],,[21N d d d A ,本次试验我们选择训练样本集的类间散布矩阵作为K-L变换的产生矩阵,即: Ni Ti i Tb d d NAA N S 111计算特征脸时要计算出协方差矩阵的前Z (Z<<N )个较大特征值的特征向量。
但是由于上式是一个(92*112)×(92*112)的高维向量,计算这个矩阵的特征值和特征向量的计算量非常大,所以先计算A A T 的特征值与特征向量,设它们分别为i 和)40,,2,1( i v i 。
再将i 的值从大到小排列,选取前Z 个特征值,使其满足:Ni iZi i11这里的 表示样本集的前Z 个轴上的能量占整个能量的 以上。
本次实验我们取的 为99%。
然后,从z i 2,1 ,计算21 i i i Av u,则由Z 个i u 可以组成一个特征脸空间},,{21Z u u u W。
4、投影。
将每一幅人脸与平均脸的差值矢量i d 投影到“特征脸”空间,得到第i 个人脸的特征脸向量表示为:),,2,1(N i d W P i Ti5、对待识别的人脸进行识别( 利用欧氏距离分类) 。
先选定一个距离阈值,如果待识别的人脸图像投影到特征脸空间后与人脸集空间中点的最小距离仍然大于这个阈值,则说明待识别人脸包含的是未知人脸。
本次实验我们选取的阈值为),2,1,}({max21,N k j P P k j kj把待识别的人脸图像R 投影到特征脸空间,得到:)(x R W P TP 与每个人脸的距离定义为:),2,1(22N k P P k k人脸分类的规则如下: (1)、若,, kk 则输入图像中包含的是未知人脸。
(2)、若,}m in{ k 则输入图像为库中第k 个人的人脸。
流程图如下:三、 实验结果与分析1、首先,我们从人脸库中的二十个人脸样本集每个人脸样本集中抽取两个样本组成一个包含四十个样本的训练样本集,并将这二十个人脸样本集中每个人脸样本集剩下的8个人脸样本作为测试样本集待测试。
测试结果如下:个样本数为四十的训练样本集,用第一次实验的测试样本集继续进行测试,测试结果如下:原因有两个:一是实验一中得训练样本是由二十个人脸样本集各抽出两个人脸样本组成的;二是实验二中所用训练样本集来自四十个不同人的人脸样本集,所以出现错误的可能性会加大。
四、心得体会本次实验拿到题目之后,我们首先从书上以及其它资料上了解了K-L变换,弄懂了它的原理以及做法,然后从网上下载了人脸库,并根据设计好的实验步骤用MATLAB编写程序,最后对测试样本进行测试,得到结果并进行分析。
本次实验时在编写程序上我们已经能够很熟练了,并且出现的错误也很少了。
程序代码:1、用20个人每人两个人脸样本组成训练样本N=40;X=zeros(92*112,80);i=1;img1=imread('C:\Users\Administrator\Desktop\renlianXL\1.pgm','pgm'); for j=1:10304X(j,i)=img1(j);endi=i+1;%依次进行读入训练样本集for j=1:10304X(j,i)=img60(j);endSUM=sum(X');XP=1/N*SUM;XP=XP';A=zeros(10304,40);for i=1:40A(:,i)=X(:,i)-XP;endB=A'*A;[VV p]=eig(B);%下面需要将vi和di重新排列,保证按从大到小d=zeros(40,40);V=zeros(40,40);for i=1:40d(i,i)=p(41-i,41-i);V(:,i)=VV(:,41-i);enddd=0;for j=1:40dd=dd+d(j,j);%计算所有特征值之和endz=40;for a=1:40s=0;for j=1:as=s+d(j,j);endif s/dd>=0.99&&a<=z%求出占特征值总和的前z个特征值z=a;endendW=zeros(10304,z);for j=1:zW(:,j)=A*V(:,j)*1/sqrt(d(j,j));%此时的W是特征脸空间endP=zeros(z,40);for i=1:40P(:,i)=W'*A(:,i);%将每一幅人脸与平均脸的差值矢量投影到特征脸空间endsita1=0;for i=1:40for j=1:40ss=norm(P(:,i)-P(:,j));if ss>sita1sita1=ss;endendendsita=0.5*sita1;img01=imread('C:\Users\Administrator\Desktop\renlianCS\s4\1.pgm','pgm ');I=zeros(10304,1);for j=1:10304I(j,1)=img01(j);endP01=W'*(I-XP);P02=W*P01+XP;sigma=norm(I-P02);sigma1=zeros(z,1);for k=1:40sigma1(k,1)=norm(P01-P(:,k));end[sigma2,z0]=min(sigma1);if sigma>=sitafprintf('输入图像不是人脸图像');elseif sigma2>=sitafprintf('输入图像包含未知人脸');elsefprintf('输入图像为库中的第%d个人脸',z0)endend2、四十个人脸样本集中各出一个人脸样本组成人脸样本集N=40;X=zeros(92*112,40);i=1;img1=imread('C:\Users\Administrator\Desktop\renlianXL\1.pgm','pgm'); for j=1:10304X(j,i)=img1(j);endi=i+1;%依次进行,读入训练样本集。
for j=1:92*112X(j,i)=img40(j);endSUM=sum(X');XP=1/N*SUM;XP=XP';A=zeros(10304,40);for i=1:40A(:,i)=X(:,i)-XP;endB=A'*A;[VV p]=eig(B);%下面需要将vi和di重新排列,保证按从大到小d=zeros(40,40);V=zeros(40,40);for i=1:40d(i,i)=p(41-i,41-i);V(:,i)=VV(:,41-i);enddd=0;for j=1:40dd=dd+d(j,j);%计算所有特征值之和endz=80;for a=1:40s=0;for j=1:as=s+d(j,j);endif s/dd>=0.99&&a<=z%求出占特征值总和的前z个特征值z=a;endendW=zeros(10304,z);for j=1:zW(:,j)=A*V(:,j)*1/sqrt(d(j,j));%此时的W是特征脸空间endP=zeros(z,40);for i=1:40P(:,i)=W'*A(:,i);%将每一幅人脸与平均脸的差值矢量投影到特征脸空间endsita1=0;for i=1:40for j=1:40ss=norm(P(:,i)-P(:,j));if ss>sita1sita1=ss;endendendsita=0.5*sita1;img01=imread('C:\Users\Administrator\Desktop\renlianCS\s4\10.pgm','pg m');I=zeros(10304,1);for j=1:10304I(j,1)=img01(j);endP01=W'*(I-XP);P02=W*P01+XP;sigma=norm(I-P02);sigma1=zeros(z,1);for k=1:40sigma1(k,1)=norm(P01-P(:,k));end[sigma2,z0]=min(sigma1);if sigma>=sitafprintf('输入图像不是人脸图像');elseif sigma2>=sitafprintf('输入图像包含未知人脸');elsefprintf('输入图像为库中的第%d个人脸',z0);endend。