资源描述
摘要
人脸识别技术就是利用计算机分析人脸图像,提取有效的识别信息来辨认身份或者判别待定状态的一门技术。它涉及模式识别、图像处理、计算机视觉等诸多学科的知识,是当前研究的热点之一。然而影响计算机人脸识别的因素非常之多,主要是人脸表情丰富,人脸随年龄增长而变化,人脸所成图像受光照、成像角度及成像距离等影响,极大地影响了人脸识别走向实用化。
基于PCA算法的人脸识别过程大致分为训练、测试、识别这三个阶段完成,在训练阶段,通过寻找协方差矩阵的特征向量,求出样本在该特征向量上的投影系数;在测试阶段,通过将测试样本投影到特征向量上,得到测试样本在该特征向量上的投影系数。
最后,采用最小欧氏距离,找到了与测试样本最相近的训练样本图像。
关键词 Eigenfaces、PCA算法、人脸识别算法、matlab、SVD。
Abstract
Face recognition technology is the use of computer analysis of facial images to extract valid identification information to identify or determine the identity of a technology Pending state. It involves knowledge of pattern recognition, image processing, computer vision, and many other disciplines, is one of the hotspots of current research. However, factors affecting the computer face recognition very much, mainly rich facial expression, face changes with age, face a picture of the affected light, imaging and imaging distance, angle, greatly influenced the Face to practical use.
PCA algorithm based recognition process is roughly divided into training and testing, the identification of these three stages, in the training phase, to find the eigenvectors of the covariance matrix is obtained on the sample feature vector projection coefficient; in the test phase by the test feature vector is projected onto the sample to obtain a test sample on the projection of the feature vector of coefficients.
Finally, the minimum Euclidean distance, the test sample to find the closest sample images.
Keywords Eigenfaces PCA Algorithm、Face Recognition Algorithm、matlab、SVD.
目录
1 绪论 1
1.1计算机人脸识别技术及应用 1
1.2常用的人脸识别方法简介 1
1.3本论文内容安排 1
2 PCA 3
2.1 PCA简介 3
2.2 PCA的实质 3
2.3 PCA理论基础 3
2.3.1投影 3
2.3.2最小平方误差理论 4
2.3.3 PCA几何解释 8
2.4 PCA降维计算 8
3 PCA在人脸识别中的应用 11
3.1 人脸识别技术简介 11
3.2 图片归一化 11
3.3 基于PCA的人脸识别 11
3.3.1 人脸数据特征提取 11
3.3.2计算均值 12
3.3.3计算协方差矩阵C 12
3.3.4求出协方差C的特征值和特征向量 12
3.4奇异值分解定理 12
3.5 基于PCA的人脸识别的训练 13
3.5.1 训练集的主成分计算 13
3.5.2 训练集图片重建 13
3.6 识别 14
4 实验 15
4.1 实验环境 15
4.2 PCA人脸识别实验过程 15
4.2.1 训练阶段 15
4.2.2 测试阶段 21
4.2.3 采用欧氏最小距离识别 23
4.3实验结果 23
5 总结 26
5.1.1内容总结: 26
5.1.2工作总结: 26
6致谢 27
参考文献 28
1 绪论
1.1计算机人脸识别技术及应用
计算机人脸识别技术就是利用计算机分析人脸图像,进而从中提取出有效的识别信息,用来“辨认”身份的一门技术,它涉及图像处理、模式识别、计算机视觉、神经网络、生理学、心理学等诸多学科领域的知识。这诸多因素使得人脸识别成为一项极富挑战性的课题,这也是研究的热点之一。
人脸识别已成为计算机视觉及相关领域中的关键技术,而且人脸识别技术应用背景比较广泛,在身份验证、刑侦破案、罪犯身份识别、视频监视、驾驶执照及护照、银行及海关的监控系统以及自动门卫系统、机器人智能化和医学等诸多方面具有广阔的应用前景和商业价值。
然而影响计算机人脸识别的因素非常之多,主要是人脸表情丰富;人脸随年龄增长而变化;人脸所成图像受光照、图像角度及图像距离等影响;所以使得人脸识别技术的普遍使用具有挑战性。
1.2常用的人脸识别方法简介
目前国内外研究人脸识别的方法层出不穷,所采用的研究角度也各不相同,从不同的研究角度,可以对人脸识别方法进行分类,比如,根据输入图像中人脸的角度的不同,可以分为基于侧面、正面、倾斜人脸图像的人脸识别;根据图像来源的不同,可以分为静态和动态的人脸识别;根据图像的特点,可以分为灰度图像和彩色图像的人脸识别。本文的主要是采用正面,静态的灰度图像[4]。
根据对灰度图像的特征提取方式的不同,人脸识别方法大致可以分成三种:基于局部特征的人脸识别方法,基于整体的人脸识别方法和基于将局部和整体结合起来的人脸识别方法。而基于局部特征的人脸识别方法主要有:结构匹配的方法、隐马尔可夫模型(Hidden Markov Model,简称H瑚)的方法、弹性图匹配(E1astic Bunch Graph Matching简称髓GM)的方法;基于整体的人脸识别方法主要有:基于主成分分析(Principal component Analysis简称PCA)的方法、线性鉴别分析法(LDA)、基于三维可变性模板(3D M0rphable Model)的方法、基于人工神经网络(Artificial Neural Networks简称ANN)的方法、支持向量机(support Vector Machine简称sⅧ)的方法、小波变换(Wavelet Translation)的方法等,另外,第三种方法结合了前两种方法的优点,比如多分多分类器等[4]。
本论文主要采取基于主成分分析的方法,虽然这种方法比较的简单,但技术却非常的古老、是人脸识别中比较经典的一种方法。
1.3本论文内容安排
第一章简单介绍了计算机人脸识别技术的主要方法及其应用,和本论文的主要论证与实现的典型的人脸识别方法。
第二章讲述了PCA的理论基础以及通过例子说明PCA的降维、重建过程。
第三章讲述了PCA在人脸识别中的具体应用,采用简单的图片的归一化方法对人脸图像进行归一化出来,通过介绍SVD原理计算出协方差矩阵,计算人脸主成分,最后重建图片,再采用欧氏最小距离进行人脸识别。
第四章仔细地讲解了基于PCA算法在matlab中的实现过程。
第五章总结本编论文的成果。
2 PCA
2.1 PCA简介
Principal Component Analysis简称PCA,它是多分量分析中最老的技术之一,来源于通信理论中的K-L变换。1901年由Pearson 第一次提出主要成分分析方法,主要经过Karhuman和Loeve归纳修改[1]。
2.2 PCA的实质
PCA的实质是在尽可能好地表达原始数据的前提下,通过线性变换将高维空间中的原始样本数据投影到底维空间中[1],即利用低维空间来表示高维空间的样本数据,也就是降维。其本质是转换坐标表示。
2.3 PCA理论基础
2.3.1投影
设d维样本,,···,以及一个d维的基,那么标量H为:
H相当于在基上的坐标值。如果为单位向量,那么H就是把向方向为的直线进行投影的结果。如图2-1
图2-1 投影
x
w
H
θ
以上是一维的情况,我们推广到m维,这样就有一组基(m个)组成的空间,若样本投影到基上,可以得到:
其中可以写成:
为均值,是单位向量,且直线经过。
2.3.2最小平方误差理论
图2-3 最佳拟合样本点的直线
L
e
X;k
Xk
d;
d
x
y
问题1:
图2-2 二维样本表示
y
x
如上图2-2,假设在二维坐标上有N个样本点,如何能找出一点(红色)能够很好的代表这N个样本点呢?
问题2:
如上图2-3,假设有这样的二维样本点,如何能求出一个线性函数使得直线能够最佳拟合样本点呢?
问题3:
若存在n个b维的样本,如何能用一个m(m≤b)维空间来代表这n个样本呢?以上问题归纳为:对于d维空间中的样本,,···,如何能把d维空间的n个样本投影到(≤d)维空间中来呢?
(1)=0
此时和问题1相似,即对于d维空间中的n个样本,,···,将样本点在d维向量(d维空间中的一点)上投影记为,则相当于要最小化
这个公式称作最小平方误差,即当
取值为最小时,向量能够代表这n个样本,,···。假设表示样本,,···均值,均值公式为
则有:
由于第二项式与无关,显然,在=时取得最小值。这表明在最小平方误差意义下能够最好的代表这n个样本,,···的d维向量就是这n个样本的均值。换句话说,样本均值是这n个样本,,···在零维下的表达,所有的样本都在零维空间下被投影到同一个点上。
(2)=1
如把所有的样本都投影到同一个点上,这将无法反映出各个样本之间的差异,也无法对样本进行分类,所以进一步考虑一维的情况。
当=1时,和问题2一样,通过用一直线表示样本。同样是在最小平方误差意义下,把样本点投影到直线上,因此这条直线通过点,并确定直线的方向为,是这条通过均值的直线的单位方向向量,所以样本,,···可以用直线可以表示为:
如下图2-4,其中k是一个实数,表示直线上的点到的距离。是点在直线上的垂直投影。
图 2-4 样本的一维表达
我们把作为的在直线的一维表示,记作 上标(1)表示一维。因此样本,,··· 在一维空间上的表达式为:
把看做是在一维空间中的近似值。那么接下来怎么确定直线呢?我们知道确定一条直线,一般只需要确定一个点,再确定直线的方向即可,现在我们已经确定了点,所以只要确定的方向就行了。同样要在最小平方误差意义下使得最小。就是最小平方误差函数。所以我们求的是的最小值,如下:
其中a1,a2···an和是未知变量,将式(2.3-10)展开得:
其中,对进行求导得:
这个结果意思是说,如果知道了,那么将与e做内积,就可以知道了在上的投影离的长度距离。
我们的目标是在最小平方误差意义下,寻找的方向,因此消去,把(2.3-12)式带入(2.3-10)式得:
其中S为:
S称为散布矩阵,是协方差矩阵C的n-1倍。
在式(2.3-13)中,第二项跟无关,所以,要使最小,必须要让最大,在这我们采用了拉格朗日数乘法来求解,这里有一约束条件是。
令,其中为拉格朗日乘数,对求偏导得:
令偏导为0得。在式中,S为一个d阶方阵,是一个d维向量,为一个实数,显然这是线性代数中的特征方程的典型形式,是特征值,是散布矩阵的特征向量。而对式(2.3-16)
两边同时乘以得:
为此得出结论,要使最大化,应当选取散布矩阵S的最大特征值所对应的特征向量作为投影直线的方向。也就是说,通过将全部n个样本,,···向以散布矩阵最大的特征值对应的特征向量为方向的投影,可以得到最小平方误差意义下这n个样本的一维表示。回到之前的三问题上,发现我们都在把n个样本进行投影变换,那么投影变换的本质是什么呢?从本质上来说,我们所做的投影变换实际上就是基的转换。
在原来的d维空间中,d个基分别是每个坐标轴方向上的单位矢量,因此在原空间中样本由这组基表示为:
投影到直线之后,在新的一维空间中,单位矢量成为了唯一的1个基,这样n个样本在一维空间中通过基可以表示为:
因此就是原始样本经过投影变换降维后的一维空间下的描述。
(3)当接近d维时,即≤d
同样可以把n个样本点投影到二维(=2)及其高维(2≤≤d)空间,所以样本,,···可以表示为:
新的最小平方误差函数为:
不难证明在散布矩阵S的前个(从大到小)特征值所对应的特征向量时取得最小值。这些特征向量构成了在低维空间中的一组基向量,因此在低维()空间下n个样本,,···表示为:
我们把上式称为重构式,其中
称为分解式。对应于基的系数被称为主成分。而是原来d维空间的n个样本在基为所张长的维空间中的低维表示。是原来样本的一种近似。
2.3.3 PCA几何解释
经以上计算,我们找到了一组基来表示样本数据,参见如下图2-5:
图2-5 二维空间中样本及其两个主轴
如图2-5,PCA实际上是寻找样本散布最大的那些主轴方向,通过向这些方向向量所张长的空间投影达到了对原样本降维的目的。从上图不难看出,PCA投影转换坐标的过程实际上就是去除数据的线性相关的过程[1]。
2.4 PCA降维计算
本章的上一节的已经介绍了PCA降维的理论,下面我们以一个实例来帮助我们更好的了解上节的理论知识。
【例2.4-1】主成分的计算
计算下面的二维数据集合的主成分分量,并利用PCA方法降维至1维和2维。然后尝试用1个和2个主成分实现对第一个样本进行重构。
T1=(1,2)、T2=(3,3)、T3=(3,5)、T4=(5,4)、
T5=(5,6)、T6=(6,5)、T7=(8,7)、T8=(9,8)。
解:我们使用matlab软件帮助计算
录入数据,算出了样本数据集T,如T=[T1;T2; T3; T4; T5; T6; T7; T8],结果T为:
(1) 计算样本均值
根据公式:
Matlab计算结果为:
(2) 计算协方差均值C(散布矩阵S和协方差均值的关系是C=S/样本数)
根据以上(2.3-14)式求得散布矩阵S为:
首先令求出A,A=[T1-m;T2-m;T3-m;T4-m;T5-m;T6-m;T7-m;T8-m] ,令,则。再由散布矩阵和协方差矩阵的关系可知,协方差矩阵C为:。
(3) 计算S的特征值和特征向量
解式(2.3-16)中的特征方程,,其中I为2*2的单位矩阵
解以上行列式得:
,
再将分别代入式(2.3-16)中,解得:
,
而且是相互正交的单位向量。、是S矩阵的特征值,、对应特征值、的S的特征向量。
(4) 将样本降至一维
通过将8个样本向其主轴投影,可以得到8个样本点的一维表示,如下:根据公式(2.3-23)有:
得:
从而一维表示为:
(5) 降至二维
通过将8个样本向其主轴、投影,根据式:,得:
因此二维表示为:
(6) 重构
根据重构式(2.3-22)有:
算出样本的一维和二维重构:
一维重构:
二维重构:
近似度可以由重构值与原样本的欧氏距离来衡量:
这是用1个主分量重构的欧氏距离,接下来用2个主分量重构的欧氏距离为:
我们注意到了,,显然,近似度随着主成分的数目的增加而增加。
3 PCA在人脸识别中的应用
3.1 人脸识别技术简介
人脸识别技术是基于人的脸部特征,利用计算机对人脸图像进行特征提取,并通过对提取的人脸特征信息进行分析,最终确定人的身份的一门计算机技术。它涉及模式识别、图像处理、计算机视觉等诸多学科的知识,是当前研究的热点之一。
然而,由于识别结果往往容易受到表情,姿态和光照变化的影响,同时还要保证识别系统的实时性,极大地影响了人脸识别走向实用化。
我们所说的人脸识别主要包括三个环节:图像预处理、特征提取、识别。
3.2 图片归一化
对图片归一化属于图像预处理的工作,而图像预处理包括了图像的几何归一化、图像的灰度图归一化、图像的边缘检测及锐化等处理,而我们的实验所使用的人脸数据库是ORL,这个人脸数据库比较规范,而且光照变化不大,所以减去了好多图片预处理的工作,而在这我们只是简单的介绍一种归一化的方法。
图片归一化就是对图片进行统一的标准,也就是标准化的意思,这个概念通常是一个整体的概念,主要的原理就是把图片归一到均值为0,方差为1的情况下,类似于一般正态分布向标准正态分布的转化[3]:
如式:
所以要对一组图片集中的一张图片进行归一化(标准化),只需减去均值,除以方差就可以了。均值为
方差为:
3.3 基于PCA的人脸识别
在这一节当中,以结合上一章的PCA理论知识,讲解PCA算法在人脸识别中的应用。
3.3.1 人脸数据特征提取
这一小节代表着人脸识别的开始,属于人脸采集阶段,也是重要的一步。我们把人脸数据库
中的图片分为两部分,一部分称为训练集,另一部分称为测试集。训练集是人脸数据库的重要组成部分,主要担任着人脸数据库的多张人脸的库存信息,而测试集是要与训练集进行比较相似度的相片信息,在识别的过程中,人脸识别系统只提取其中的一张相片作为测试用。
假设现在训练集用M张人脸图片,那么我们采集到的人脸数据特征为:
为人脸训练集图像矩阵,共存有M张人脸。
3.3.2计算均值
计算出训练集中的均值,根据均值公式:
我们把称为平均人脸。
3.3.3计算协方差矩阵C
由第二章中的(2.3-14)式可知,协方差矩阵C为:
令,有
(其实分母M对识别没有多大的影响)。
3.3.4求出协方差C的特征值和特征向量
这一步是PCA计算中的主要工作,计算协方差均值C的特征值和特征向量由第一章的(2.3-16)式:
可以求得。假设样本矩阵的大小为n*d(n个d维的特征向量),则协方差矩阵C将是一个大小为d*d的方阵,如果当d比较大的时候,比如d=10000,那么C的大小将是10000*10000的矩阵,如果直接计算C的特征值和特征向量的话,那非常的困难,那么怎么办?由此引入奇异值分解定理来解决维数过高的问题。避免了直接计算高维矩阵的问题。
3.4奇异值分解定理
奇异值分解定理(Singular Value Decomposition简称 SVD定理)原理如下:
设A(和上式的A相同)是一个秩为P的d*M维矩阵,则存在两个正交矩阵和一个对角矩阵满足下式:
其中、为:
其中为矩阵(协方差矩阵C)和的非零特征值。与分别为 和对应于的正交归一特征向量。而由(3.4-1)式推论得:
令,称L为构造矩阵。而构造矩阵L的大小为M*M,很容易求得特征值和特征向量,因此,只要计算出构造矩阵L的特征向量,再通过(3.4-5)式就能算出协方差矩阵的特征向量来。如下式:
为的特征向量,特征值为。这样就避免直接计算协方差矩阵特征的特征向量了[5]。
3.5 基于PCA的人脸识别的训练
经以上的准备之后,我们已经计算出了协方差矩阵的特征值和特征向量(不需要单位化)。也就是找到了能很好的表示训练集图像的一组基。下面我们把样本投影到这组基上,得到了在新的基下的坐标表示形式。
3.5.1 训练集的主成分计算
根据式(2.3-23),我们可以计算出训练集样本在方向向量为下的投影,如下式:
其中i为所降的维数,这里的i=m=M,维数和之前的维数相等,k是图片数。称为主成分,是M张训练集图片降至m(m=M)维的在基下的系数。
3.5.2 训练集图片重建
在新的基下对训练集图片进行表示,根据重构式(2.3-24)得:
是训练集的近似表示。
3.6 识别
基于特征脸的人脸识别过程由训练阶段和识别阶段两个阶段组成。在训练阶段:计算训练集图片的所有主成分:
在识别阶段:把待识别的图像R映射到特征脸空间,得到主成分向量:
把待识别的主成分分别和训练集的所有主成分取欧氏距离,如下:
取的最小值,最小值的索引号对应的训练集中的图片就是和测试图片最相似的。其主要的缺点是,当测试的图像不在训练集里,那么得到的欧氏距离最小结果并不是我们要的结果,基于这点,所以我们使用基重建测试图像,看看显示结果是不是我们要找的人,当测试图片不在训练集里,那么重建的结果将显示面目模糊,看不清的现象,识别是我们可以控制的,虽然最小欧氏距离识别不是那么理想。
4 实验
这一章我们主要根据上二章的理论作为基础,主要实现了基于PCA算法的人脸识别。
4.1 实验环境
操作系统:win7,实验所使用的软件是:matlab。版本为:7.0 。
4.2 PCA人脸识别实验过程
在matlab当前路径:‘C:\MATLAB7\work’下准备了训练图片集TrainDatabase和测试图片集TestDatabase,TrainDatabase和TestDatabase作为我们的人脸库,如图4-1。
图4-1 matlab当前路径下的人脸库
本实验所采用的人脸图片来自著名的人脸数据库ORL。其中训练集TrainDatabase中的人脸原图像如下图4-2,实验主要分为训练阶段和测试阶段。
4.2.1 训练阶段
图4-2 训练集原始图像
(1)获得训练集图片
设S为存储训练集人脸图片的矩阵,则获取训练集图片信息的源代码如下:
clear all
close all
clc
M=20; %训练集图片数
um=100;
ustd=80;
%这一步读取与显示训练集中的图片
S=[]; %训练集矩阵
figure(1);
addpath('C:\MATLAB7\work\TrainDatabase');%设计raindatabase路径
for i=1:M
str=strcat(int2str(i),'.jpg');%连接两字符串形成图片的文件名
eval('img=imread(str);'); %读取图片存储在img中在matlab中执行
subplot(ceil(sqrt(M)),ceil(sqrt(M)),i)%把窗口分成 4 X 5 显示
imshow(img); %显示读取到的图片
if i==3
title('Training set','fontsize',18) %设计窗口标题及大少
end
drawnow; %刷新
[irow icol]=size(img); %提取一种图片的行与列的大少
temp=reshape(img,irow*icol,1); %创建一个 (N1*N2)x1 的列向量
S=[S temp]; %创建N1*N2xM 的列向量
end
在matlab中执行以上代码后,得到的结果为:
S是36000*20的矩阵,可以看出S存储20张人脸图片。其中T为36000*1的列向量。代码的执行还显示了我们采集到的图片如图4-3,之所以要加显示功能,是为了能够很好的跟踪代码实现的步骤。当我们采集到了训练集的图片数据,并已经保存在了变量S中。
图4-3 采集到的训练集图像
(2)对训练集图像进行规格化
对训练集图像S进行规格化,matlab源代码为:
%这部分改变所有的图像的均值和标准值,对图像进行规格化
for i=1:size(S,2)
temp=double(S(:,i)); %获取S矩阵的第i个列矩阵并双精度化
m=mean(temp); %求列向量的均值
st=std(temp); %求temp的标准偏差 (是样本标准差)
S(:,i)=(temp-m)*ustd/st+um %由此公式对S进行均值化
end
(3)显示规格化的图像
figure(2);
for i=1:M
%把S集合中的第i列向量转为大少为irow*icol的矩阵
img=reshape(S(:,i),irow,icol);
subplot(ceil(sqrt(M)),ceil(sqrt(M)),i) %按4X5的行列显示
imshow(img) %显示规格化后的图像
drawnow; %刷新
if i==3
title('Normalized Training Set','fontsize',18) %窗口标题
end
end
执行这段代码后,训练集S的图片规格化后显示如图4-4:
图4-4规格化后的训练集图像
(4)计算训练集S的平均脸并显示
根据式3.3-2,计算出训练集图像的平均值,使用mean函数计算,代码如下:
%这一步显示平均脸
m=mean(S,2); %获得行的均值 (平均人脸)
tmimg=uint8(m);
img=reshape(tmimg,irow,icol); %转换成图片显示格式
figure(3);
imshow(img); %显示平均脸
title('Mean Image','fontsize',18) %设计平均脸窗口的标题
为平均图片,称为平均人脸,如下图4-5:
图4-5 平均人脸
(5)计算构造矩阵L
计算构造矩阵L的目的是通过它的特征值和特征向量来求出协方差矩阵C的特征向量和特征值,根据式,matlab代码为:
%这一步求出A矩阵
tmimg=reshape(img,irow*icol,1); %把平均脸转成向量的形式
A=[];
for i=1:M
A(:,i)=(S(:,i))-tmimg;
end
L=A'*A; %得到构造矩阵L
构造矩阵L为:
我们发现L矩阵的维数比较小,这样我们就很容易计算L的特征值和特征向量了。
(6)计算出构造矩阵L的特征值和特征向量并对其进行规格化
求出矩阵L的特征值dd与特征向量vv,代码为:
[vv dd]=eig(L); %vv是L的特征向量构成的列向量,dd是L特征值构成的对角阵
为构造矩阵L的特征向量,大少为20*20。
为构造矩阵L的特征值,是对角阵,我们可以看看dd的具体内容,如下图4-6:
图4-6 训练集的特征值dd
是个对角阵,以上面的理论一致。
消去为零的特征值对应的特征向量并对特征值进行从小到大的排序,代码为:
%消去特征值为零的特征向量和特征值
v=[];
d=[];
for i=1:size(vv,2)
if(dd(i,i)>1e-4) %1e-4=0.0001 1e-4科学计数法
v=[v vv(:,i)];
d=[d dd(i,i)];
end
end %结果这循环后,吧dd变换为d d=1xM d为L的特征值
[B index]=sort(d); % 对d进行从小到大排序,排序结果存在B中,index是B在d中的索引号
执行后,消去为零的特征值,vv、dd变量保存在v、d里,如下:
v为构造矩阵L的特征向量。
d为构造矩阵L的特征值。同样我们也可以看看d到底是什么样了,如下图4-7:
图4-7 去除零值后的特征值d
把L的特征值和特征向量进行适应处理,如下代码:
ind=zeros(size(index));
dtemp=zeros(size(index));
vtemp=zeros(size(v));
len=length(index);
%此循环的目的是把特征值d和特征向量v 按左右翻转了 从大到小
for i=1:len %循环20次
dtemp(i)=B(len+1-i); % 将B(len+1-i)的值给dtemp(i) 倒序了,比如 B(20)=dtemp(1)
目的是:把B(也就是L的来的特征值)临时存储在变量dtemp中
ind(i)=len+1-index(i); %也是把index索引倒序了,为了和dtemp变量一样
vtemp(:,ind(i))=v(:,i); %Vtemp存储特征向量V,按左右翻转存储
end
d=dtemp; %左右翻转后把值保持好 d为L特征值按左右翻转的结果
v=vtemp; %左右翻转后把值保持好 v为L特征向量按左右翻转的结果
对构造矩阵L的特征向量进行规格化,代码如下:
%把矩阵L特征向量规格化
for i=1:size(v,2) %循环数和矩阵v的列数相等 20次
kk=v(:,i);
temp=sqrt(sum(kk.^2));
v(:,i)=v(:,i)./temp;
end
(7)求出协方差矩阵C的特征向量
完成对构造矩阵的特征值和特征向量的规格化后,接下来将通过L的特征值和特征向量求出协方差矩阵C的特征向量,计算式为:
代码为:
u=[]; %协方差矩阵C的特征向量
for i=1:size(v,2) %循环次数和矩阵v的列数相等 20次
temp=sqrt(d(i));
u=[u (A*v(:,i))./temp];
end
结果为:
U是我们要找的协方差矩阵C的特征向量,是新的一组基,也就是我们所说的主成分脸,也称特征脸。接下来对U进行规格化并显示特征脸,如下代码:
% 特征向量的规格化
for i=1:size(u,2) %循环次数为U向量个数,为20次
kk=u(:,i); %将U的一个向量给予kk 大少为36000X1
%取一个临时变量,命名为temp,将kk每一项元素进行平方运算.然后求和,再取平方根 赋给temp
temp=sqrt(sum(kk.^2));
u(:,i)=u(:,i)./temp;
End
% 显示特征脸
figure(4);
for i=1:size(u,2) %循环次数为U向量个数,为20次
img=reshape(u(:,i),irow,icol); %从向量的显示转为图片大少
img=histeq(img,255);
subplot(ceil(sqrt(M)),ceil(sqrt(M)),i) %分行列显示
imshow(img) %显示图片
drawnow; %刷新
if i==3
title('Eigenfaces','fontsize',18) %设计标题
end
end
特征脸如图4-8:
图4-8 训练集图像的
展开阅读全文