PCA人脸识别理论基础附源码.docx

上传人:b****3 文档编号:27169240 上传时间:2023-06-27 格式:DOCX 页数:22 大小:208.30KB
下载 相关 举报
PCA人脸识别理论基础附源码.docx_第1页
第1页 / 共22页
PCA人脸识别理论基础附源码.docx_第2页
第2页 / 共22页
PCA人脸识别理论基础附源码.docx_第3页
第3页 / 共22页
PCA人脸识别理论基础附源码.docx_第4页
第4页 / 共22页
PCA人脸识别理论基础附源码.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

PCA人脸识别理论基础附源码.docx

《PCA人脸识别理论基础附源码.docx》由会员分享,可在线阅读,更多相关《PCA人脸识别理论基础附源码.docx(22页珍藏版)》请在冰豆网上搜索。

PCA人脸识别理论基础附源码.docx

PCA人脸识别理论基础附源码

1PCA与人脸识别及其理论基础

 

1.1问题描述[1]

 

对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量,如一幅N*N象素的图像可以视为长度为N2的矢量,这样就认为这幅图像是位于N2维空间中的一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。

不管子空间的具体形式如何,这种方法用于图像识别的基本思想都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。

1.1.1K-L变换[1]

 

PCA方法是由Turk和Pentlad提出来的,它的基础就是Karhunen-Loeve变换(简称KL

变换),是一种常用的正交变换。

下面我们首先对K-L变换作一个简单介绍:

假设X为n维的随机变量,X可以用n个基向量的加权和来表示:

n

X=∑αiφi

i=1

式中:

αi是加权系数,φi是基向量,此式还可以用矩阵的形式表示:

 

12n12n

X=(φ,φ,",φ)(α,α,",α)T

=Φα

 

取基向量为正交向量,即

T⎧1

i=jT

 

则系数向量为:

ΦΦj=⎨

0

i≠j

⇒ΦΦj=I

α=ΦTX

综上所述,K-L展开式的系数可用下列步骤求出:

步骤一求随即向量X的自相关矩阵R=E⎡⎣XTX⎤⎦,由于没有类别信息的样本集的µ均值向

 

量,常常没有意义,所以也可以把数据的协方差矩阵∑

K_L坐标系的产生矩阵,这里µ是总体均值向量。

=E⎡⎣(x−µ)(x−µ)T⎤⎦作为

步骤二求出自相关矩阵或协方差矩阵R的本征值λi和本征向量φi,Φ=(φ1,φi,",φn)

步骤三展开式系数即为α=ΦTX

 

K_L变换的实质是建立了一个新的坐标系,将一个物体主轴沿特征矢量对齐的旋转

变换,这个变换解除了原有数据向量的各个分量之间相关性,从而有可能去掉那些带有较少信息的坐标系以达到降低特征空间维数的目的。

1.1.2利用PCA进行人脸识别

 

完整的PCA人脸识别的应用包括几个步骤:

人脸图像预处理;读入人脸库,训练形成特征子空间;把训练图像和测试图像投影到上一步骤中得到的子空间上;选择一定的距离函数进行识别。

下面详细描述整个过程(源码见’faceRec.m’)。

1.读入人脸库归一化人脸库后,将库中的每人选择一定数量的图像构成训练集,其余构成测试集。

归一化后的图像是n*m,按列相连就构成N=n*m维矢量,可视为N维空间中的一个点,可以通过K-L变换用一个低维子空间描述这个图像。

2.计算K-L变换的生成矩阵所有训练样本的协方差矩阵为(以下三个等价):

 

⎪1.

TT

CA=(

M

k=1

xkixk)/M−mximx

⎪2.C

=(AiAT)/M

(1)

⎪⎡M⎤

⎪3.C

⎪⎩A

=⎢∑

⎣i=1

(x−m)(x−m)T⎥⎦

 

A={φ1,φ2,...,φM},

φi=xi−mx,mx是平均人脸,M训练人脸数,协方差矩阵CA是

一个N*N的矩阵,N是xi的维数。

A

为了方便计算特征值和特征向量,一般选用第2个公式。

根据K-L变换原理,我们所求的新坐标系即由矩阵AiAT的非零特征值所对应的特征向量组成。

直接求N*N大小矩阵C的特征值和正交归一特征向量是很困难的,根据奇异值分解原理(见段落1.2.5和1.2.6),可以

通过求解ATiA的特征值和特征向量来获得ATiA的特征值和特征向量,。

N*r

在计算得到CA的所有非零特征值[λ0,λ1,",λr−1](从大到小排序,1≤r

计算一张图片X在特征空间上的投影系数(也可以理解为X在空间U中的坐标):

3.识别

Y=UT*X∈ℜr*1

(2)

利用公式

(2),首先把所有训练图片进行投影,然后对于测试图片也进行同样的投影,采用判别函数对投影系数进行识别。

1.2PCA的理论基础

 

1.2.1投影[2]

设d维样本x1,x2,",xn,以及一个d维基w,那么标量:

ii

y=wTx

 

是相当于xi在基上的坐标值。

如果w

=1,yi就是把xi向方向为w的直线进行投影的结果,

可以从图1看到。

推广之,如果有一组基(m个)组成的空间W=[w1,w2,",wm],那么可

 

Tm*1

以得到xi在空间W上的坐标为:

Y=Wx∈ℜ。

 

x证明:

wTx=

w

又∵

θy

w⋅x⋅cosθ

 

x⋅cosθ=y,w=1

i

⇒wTx=y

图1投影图

进一步,表达式w=m+ae表示w是一条通过点m,方向为e的直线。

1.2.2PCA的作用及其统计特性[3]

 

采用PCA对原始数据的处理,通常有三个方面的作用—降维、相关性去除、概率估计。

下面分别进行介绍:

ƒ去除原始数据相关性

从统计学上讲,E{[X−E(X)][Y−E(Y)]}称为随机变量X与Y协方差,记为

 

Cov(X,Y)。

令ρXY=

Cov(X,Y)

,称为随机变量X与Y的相关系数。

ρXY=1则X与

D(X)

D(Y)

Y是相关的,ρXY=0,则X与Y是不相关的。

AAT

命题1对于矩阵A来说,如果

是一个对角阵,那么A中的向量是非相关的。

由PCA处理的人脸库数据的非相关性可以从两点进行说明。

(1)基底的非相关性

T

特征空间基U=[u0,u1,",ur−1]是非相关的,即UU

=I。

 

(2)投影系数的非相关性

T

由SVD可知A={φ1,φ2,...,φM}=UΛV

其中φi=xi−mx,mx是平均人脸。

 

据公式

(2)可以把A映射到特征空间上,得到:

关的,可由下面得到证明:

B=UT*A,其中B是非相

Y的协方差矩阵为:

C

=1BBT=

1UTAATU=

1Λ2

(3)

BMMM

由命题1可知,B是非相关的。

ƒ统计参数(均值及方差)

均值即mx--平均人脸。

命题2随机变量方差越大,包含的信息越多,当一个变量方差为0时,该变量为常数,不含任何信息。

用PCA计算主分量,就是寻找一组向量,使得原始数据A={φ1,φ2,...,φM}在这组向量上的投影值的方差尽可能大。

最大方差对应的向量就是第一主成份,以后递推就是

第二主成份,第三主成份……。

用PCA计算主分量就是求原始数据A={φ1,φ2,...,φM}(其中φi=xi−mx)协方差

 

T

矩阵的特征向量U=[u0,u1,",ur−1],由公式(3)可知,P=ui

A=(p1,p2,",pm)是A在ui

上的投影值,其中P的方差就是ui对应的特征值λi,可以理解为:

命题3所有原始数据在主分量ui上的投影值方差为λi。

ƒ降维

如果在原始空间表示一幅n*m大小的图片X,那么需要一个N=n*m维矢量,但是当用公式

(2)把它映射到特征空间后,只需要一个r*1维的向量就可。

另外,由命题2可知,可以根据方差的大小来判断特征向量的重要性。

由ORL图片库的200个人脸计算得到的特征值呈图2分布,可知特征向量重要性呈指数下降,据此可以只选用前面几个重要的特征向量来构建特征空间。

通过计算,前71个特征值占了90.17%,因此r可以取71而非200,从而达到进一步降维的作用。

 

图2特征值的分布

1.2.3特征脸

 

U=[u0,u1,",ur−1]中的每一个单位向量都构成一个特征脸,如图3所示。

由这些特征脸

所张成的空间称为特征脸子空间,需要注意对于正交基的选择的不同考虑,对应较大特征值的特征向量(正交基)也称主分量,用于表示人脸的大体形状,而对应于较小特征值的特征向量则用于描述人脸的具体细节,或者从频域来看,

主分量表示了人脸的低频部分,而此分量则描述了人脸的高频部分(源码见’EigenFace.m’)。

12105070average

图3特征脸,分别是第1,2,10,50,70分量,最后一张是平均脸。

1.2.4图片重建

 

X

要进行图片X的重建,首先对X投影到特征空间上,得到系数Y=UT(X−m

),然后选用一

部分系数与特征向量进行原始图片的重建:

X'=mX+U(1:

t)*Y(1:

t),其中1:

t表示取前t个

元素。

(见’reconstruct.m’)

在图4中,其中前两张图片来自训练样本,第3张来自测试样本,可以看到对于训练样本,

PCA系数可以对图片实现很好重建,而对于训练样本以外的图片重建效果很差。

 

Original

1550100150199

图4人脸图像重建。

第列张图片是输入原始图,其它列图片是重建结果,数字表示t的数目。

1.2.5奇异值分解(SVD)[1]

 

设A是秩为r的m*n(m>>n)维矩阵,则存在两个正交矩阵和一个对角阵:

T

A=[a1,a2,",ar]=UΛV

 

T

其中U=[u0,u1,",ur−1],V=[v0,v1,",vr−1],Λ=diag(λ0,λ1,",λr−1),且UU

=I,VVT

=I,

2Tm*mT

n*nTT

λi呈降序排列。

其中λi

为AA

∈ℜ和AA∈ℜ的非零特征值,ui和vi分别是AA和AA

 

i

对应于λ2的特征向量。

可得一个推论:

U=AVΛ−1

可以计算ATA的特征值λ2及相应的正交归一特征向量v后,可由推论知AAT的正交归一特

ii

 

征向量

u=1

i

i

Avi

 

注意,协方差矩阵CA

=(AiAT)/M的特征值为:

λ2/M。

 

1.2.6利用小矩阵计算大矩阵特征向量

 

高阶矩阵的特征向量可以转化为求低阶矩阵的特征向量:

 

设:

A是秩为r的m*n(m>>n)维矩阵,CX

=AAT∈ℜm*m,是一个矩阵,现在要求C的

 

X

特征值及特征向量,可通过先求小矩阵ATA∈ℜn*n的特征向量[v,v,",v

]和特征值

01r−1

[λ0,λ1,",λr−1],两者之间有以下关系:

 

iii

ATA⋅v=λ⋅v

 

iii

⎯左⎯乘⎯A→AAT(A⋅v)=λ(A⋅v)

 

显然,C

=AAT的特征向量是A⋅v(注意没有单位化),[λ,λ,",λ

]亦为其特征值。

Xi01

r−1

 

结论:

1.2.5与1.2.6的方法计算协方差矩阵的特征向量,特征值的结果是一致的,只是要

注意1.2.5中的特征值要除以M,1.2.6中的特征向量要单位化。

 

1.2.7图片归一化

 

图片标准化通常是一个整体概念,要求把图片归一到均值为0,方差为1下情况下。

这个概念类似于一般正态分布向标准正态分布的转化:

命题4若X∼N(µ,σ2),则Z=X−µ∼N(0,1)

σ

所以要对一组图片中的一张Xi进行归一化(标准化),只需要减去均值,除以方差就可以了。

M

均值mX=∑Xi

i

M,方差为D=E⎡⎣(X−m

X)(X−mX)⎤⎦

1.3参考文献

 

[1]邓楠,基于主成份分析的人脸识别,西北大学硕士学位论文,2006.06

[2]R.O.Duda,P.E.Hart,andD.G.Stork,PatternClassification,seconded.JohnWiley&Sons,

2001.

[3]SamiRomdhani.FaceImageAnalysisusingaMultipleFeatureFittingStrategy.PhDThesis,UniversityofBasel,Switzerland,January2005.

[4]SamiRomdhani.FACERECOGNITIONUSINGPRINCIPALCOMPONENTSANALYSIS.

1.4附录—matlab源码

 

1.4.1人脸识别

 

%FaceRec.m

%PCA人脸识别修订版,识别率88%

 

%calcxmean,sigmaanditseigendecompositionallsamples=[];%所有训练图像

fori=1:

40

forj=1:

5a=imread(strcat('e:

\ORL\s',num2str(i),'\',num2str(j),'.jpg'));

%imshow(a);

b=a(1:

112*92);%b是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右

b=double(b);

allsamples=[allsamples;b];%allsamples是一个M*N矩阵,allsamples中每一行数据代表一张图片,其中M=200

endend

samplemean=mean(allsamples);%平均图片,1×N

fori=1:

200xmean(i,:

)=allsamples(i,:

)-samplemean;%xmean是一个M×N矩阵,xmean

每一行保存的数据是“每个图片数据-平均图片”

end;

 

%获取特征值及特征向量sigma=xmean*xmean';%M*M阶矩阵[vd]=eig(sigma);

d1=diag(d);

%按特征值大小以降序排列

dsort=flipud(d1);

vsort=fliplr(v);

%以下选择90%的能量

dsum=sum(dsort);dsum_extract=0;p=0;

while(dsum_extract/dsum<0.9)

p=p+1;

dsum_extract=sum(dsort(1:

p));

 

i=1;

end

 

%(训练阶段)计算特征脸形成的坐标系

base=xmean'*vsort(:

1:

p)*diag(dsort(1:

p).^(-1/2));

%base是N×p阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1)

%详见《基于PCA的人脸识别算法研究》p31

%xmean'*vsort(:

i)是小矩阵的特征向量向大矩阵特征向量转换的过程

%while(i<=p&&dsort(i)>0)

%base(:

i)=dsort(i)^(-1/2)*xmean'*vsort(:

i);%base是N×p阶矩阵,除以dsort(i)^(1/2)

是对人脸图像的标准化(使其方差为1)

%详见《基于PCA的人脸识别算法研究》p31

%i=i+1;%xmean'*vsort(:

i)是小矩阵的特征向量向大矩阵特征向量转换的过程

%end

 

%以下两行addbygongxun将训练样本对坐标系上进行投影,得到一个M*p阶矩阵allcoorallcoor=allsamples*base;%allcoor里面是每张训练人脸图片在M*p子空间中的一个点,即在子空间中的组合系数,

accu=0;%下面的人脸识别过程中就是利用这些组合系数来进行识别

%测试过程

fori=1:

40

forj=6:

10%读入40x5副测试图像a=imread(strcat('e:

\ORL\s',num2str(i),'\',num2str(j),'.jpg'));b=a(1:

10304);

b=double(b);

tcoor=b*base;%计算坐标,是1×p阶矩阵

fork=1:

200

mdist(k)=norm(tcoor-allcoor(k,:

));

end;

%三阶近邻

[dist,index2]=sort(mdist);

class1=floor((index2

(1)-1)/5)+1;class2=floor((index2

(2)-1)/5)+1;class3=floor((index2(3)-1)/5)+1;

ifclass1~=class2&&class2~=class3class=class1;

elseifclass1==class2class=class1;

elseifclass2==class3

class=class2;

end;

ifclass==iaccu=accu+1;

 

end;

end;

end;

accuracy=accu/200%输出识别率

1.4.2特征人脸

 

%eigface.m

function[]=eigface()

 

%calcxmean,sigmaanditseigendecompositionallsamples=[];%所有训练图像

fori=1:

40

forj=1:

5a=imread(strcat('e:

\ORL\s',num2str(i),'\',num2str(j),'.jpg'));

%imshow(a);

b=a(1:

112*92);%b是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右

b=double(b);

allsamples=[allsamples;b];%allsamples是一个M*N矩阵,allsamples中每一行数据代表一张图片,其中M=200

endend

samplemean=mean(allsamples);%平均图片,1×N

fori=1:

200xmean(i,:

)=allsamples(i,:

)-samplemean;%xmean是一个M×N矩阵,xmean

每一行保存的数据是“每个图片数据-平均图片”

end;

 

%获取特征值及特征向量sigma=xmean*xmean';%M*M阶矩阵[vd]=eig(sigma);

d1=diag(d);

dsort=flipud(d1);

vsort=fliplr(v);

 

%以下选择90%的能量

dsum=sum(dsort);dsum_extract=0;p=0;

while(dsum_extract/dsum<0.9)

p=p+1;

dsum_extract=sum(dsort(1:

p));

endp=199;

%(训练阶段)计算特征脸形成的坐标系

%while(i<=p&&dsort(i)>0)

%base(:

i)=dsort(i)^(-1/2)*xmean'*vsort(:

i);%base是N×p阶矩阵,除以

dsort(i)^(1/2)是对人脸图像的标准化,详见《基于PCA的人脸识别算法研究》p31

%i=i+1;%xmean'*vsort(:

i)是小矩阵的特征向量向大矩阵特征向量转换的过程

%end

base=xmean'*vsort(:

1:

p)*diag(dsort(1:

p).^(-1/2));

%生成特征脸

for(k=1:

p),

temp=reshape(base(:

k),112,92);newpath=['d:

\test\'int2str(k)'.jpg'];imwrite(mat2gray(temp),newpath);

end

 

avg=reshape(samplemean,112,92);

imwrite(mat2gray(avg),'d:

\test\average.jpg');

%将模型保存

save('e:

\ORL\model.mat','base','samplemean');

1.4.3人脸重建

 

%Reconstruct.m

function[]=reconstruct()

%计算新图片在特征子空间中的系数

img='D:

\test2\10.jpg'a=imread(img);

 

b=a(1:

112*92);%b是行矢量1×N,其中N=10304,提取顺序是先列后行,即从上到下,从左到右

b=double(b);

b=b-samplemean;

c=b*base;%c是图片a在子空

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1