当前位置:文档之家› 基于KL变换的人脸识别

基于KL变换的人脸识别

基于KL变换的人脸识别
基于KL变换的人脸识别

基于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*9221i

i i i x x x i X x ==, )40,2,1( =i

2、计算平均脸和相应的距离向量。平均脸就是所有人脸图像的平均值向量。计算公式如下:

∑==

N

i i x

N

x 11

则每张人脸与平均脸之间的距离向量可以表示为:

x x d i

i -=

3、计算特征脸。

设矩阵],,[21N d d d A =,本次试验我们选择训练样本集的类间散布矩阵作为K-L

变换的产生矩阵,即: ∑===N

i T

i i T

b d d N

AA N S 1

11

计算特征脸时要计算出协方差矩阵的前Z (Z<

是由于上式是一个(92*112)×(92*112)的高维向量,计算这个矩阵的特征值和特征向量的计算量非常大,所以先计算A A T 的特征值与特征向量,设它们分别为i λ和)40,,2,1( =i v i 。再将

i λ的值从大到小排列,选取前Z 个特征值,使其满足:

αλ

λ

≥∑∑==N

i i

Z

i i

1

1

这里的α表示样本集的前Z 个轴上的能量占整个能量的α以上。本次实验我们取

的α为99%。然后,从z i 2,1=,计算2

1-=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 T

i

== 5、对待识别的人脸进行识别( 利用欧氏距离分类) 。先选定一个距离阈值,

如果待识别的人脸图像投影到特征脸空间后与人脸集空间中点的最小距离仍然大于这个阈值,则说明待识别人脸包含的是未知人脸。本次实验我们选取的阈值为

),2,1,}({max 2

1,N k j P P k j k

j ===θ

把待识别的人脸图像R 投影到特征脸空间,得到:

)(x R W P T

-= P 与每个人脸的距离定义为:),2,1(2

2

N k P P k k =-=ε

人脸分类的规则如下: (1)、若,,θε≥?k

k 则输入图像中包含的是未知人脸。

(2)、若,}m in{θε

三、 实验结果与分析

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:10304

X(j,i)=img1(j);

end

i=i+1;

%依次进行读入训练样本集

for j=1:10304

X(j,i)=img60(j);

end

SUM=sum(X');

XP=1/N*SUM;

XP=XP';

A=zeros(10304,40);

for i=1:40

A(:,i)=X(:,i)-XP;

end

B=A'*A;

[VV p]=eig(B);%下面需要将vi和di重新排列,保证按从大到小

d=zeros(40,40);

V=zeros(40,40);

for i=1:40

d(i,i)=p(41-i,41-i);

V(:,i)=VV(:,41-i);

end

dd=0;

for j=1:40

dd=dd+d(j,j);%计算所有特征值之和

end

z=40;

for a=1:40

s=0;

for j=1:a

s=s+d(j,j);

end

if s/dd>=0.99&&a<=z%求出占特征值总和的前z个特征值

z=a;

end

end

W=zeros(10304,z);

for j=1:z

W(:,j)=A*V(:,j)*1/sqrt(d(j,j));%此时的W是特征脸空间

end

P=zeros(z,40);

for i=1:40

P(:,i)=W'*A(:,i);%将每一幅人脸与平均脸的差值矢量投影到特征脸空间end

sita1=0;

for i=1:40

for j=1:40

ss=norm(P(:,i)-P(:,j));

if ss>sita1

sita1=ss;

end

end

end

sita=0.5*sita1;

img01=imread('C:\Users\Administrator\Desktop\renlianCS\s4\1.pgm','pgm ');

I=zeros(10304,1);

for j=1:10304

I(j,1)=img01(j);

end

P01=W'*(I-XP);

P02=W*P01+XP;

sigma=norm(I-P02);

sigma1=zeros(z,1);

for k=1:40

sigma1(k,1)=norm(P01-P(:,k));

end

[sigma2,z0]=min(sigma1);

if sigma>=sita

fprintf('输入图像不是人脸图像');

else

if sigma2>=sita

fprintf('输入图像包含未知人脸');

else

fprintf('输入图像为库中的第%d个人脸',z0)

end

end

2、四十个人脸样本集中各出一个人脸样本组成人脸样本集

N=40;

X=zeros(92*112,40);

i=1;

img1=imread('C:\Users\Administrator\Desktop\renlianXL\1.pgm','pgm'); for j=1:10304

X(j,i)=img1(j);

end

i=i+1;

%依次进行,读入训练样本集。

for j=1:92*112

X(j,i)=img40(j);

end

SUM=sum(X');

XP=1/N*SUM;

XP=XP';

A=zeros(10304,40);

for i=1:40

A(:,i)=X(:,i)-XP;

end

B=A'*A;

[VV p]=eig(B);%下面需要将vi和di重新排列,保证按从大到小

d=zeros(40,40);

V=zeros(40,40);

for i=1:40

d(i,i)=p(41-i,41-i);

V(:,i)=VV(:,41-i);

end

dd=0;

for j=1:40

dd=dd+d(j,j);%计算所有特征值之和

end

z=80;

for a=1:40

s=0;

for j=1:a

s=s+d(j,j);

end

if s/dd>=0.99&&a<=z%求出占特征值总和的前z个特征值

z=a;

end

end

W=zeros(10304,z);

for j=1:z

W(:,j)=A*V(:,j)*1/sqrt(d(j,j));%此时的W是特征脸空间

end

P=zeros(z,40);

for i=1:40

P(:,i)=W'*A(:,i);%将每一幅人脸与平均脸的差值矢量投影到特征脸空间end

sita1=0;

for i=1:40

for j=1:40

ss=norm(P(:,i)-P(:,j));

if ss>sita1

sita1=ss;

end

end

end

sita=0.5*sita1;

img01=imread('C:\Users\Administrator\Desktop\renlianCS\s4\10.pgm','pg m');

I=zeros(10304,1);

for j=1:10304

I(j,1)=img01(j);

end

P01=W'*(I-XP);

P02=W*P01+XP;

sigma=norm(I-P02);

sigma1=zeros(z,1);

for k=1:40

sigma1(k,1)=norm(P01-P(:,k));

end

[sigma2,z0]=min(sigma1);

if sigma>=sita

fprintf('输入图像不是人脸图像');

else

if sigma2>=sita

fprintf('输入图像包含未知人脸');

else

fprintf('输入图像为库中的第%d个人脸',z0);

end

end

仿射变换

仿射变换

————————————————————————————————作者:————————————————————————————————日期:

第四章保距变换和仿射变换 本章教学目的:通过本章的学习,使学生掌握保距变换和仿射变换这两类重要的几何变换,从而深化几何学的研究,并掌握解决几何问题的一个有效方法。 本章教学重点:(1)保距变换和仿射变换的定义和性质; (2)仿射变换的基本定理; (3)保距变换和仿射变换的变换公式; (4)图形的仿射分类与仿射性质。 本章教学难点:仿射变换的性质和基本定理;仿射变换的变换公式的求法。 本章教学内容: §1 平面的仿射变换与保距变换 1.1――对应与可逆变换 集合X到集合Y的一个映射f:X→Y是把X中的点对应到Y中的点的一个法则,即?x∈X,都决定Y中的一个元素f(x),称为点x在f下的像。对X的一个子集A,记 f(A)={f(a)|a∈A}, 它是Y的一个子集,称为A在f下的像。对Y的一个子集B,记 f-1(B)={x∈X|f(x)∈B}, 称为B在F下的完全原像,它是X的子集。 如果f是X到Y的映射,g上Y到Z的映射,则它们的复合上X到Z的映射,记作 gf: X→Z,规定为 g f(x)=g(f(x)),?x∈X. 对A?X, gf(A)=g(f(A)); 对C?Z, (g f)-1(C)=f-1(g-1(C)). 映射的复合无交换律,但有结合律。 映射f: X→X称为X上的一个变换,idX: X→X,?x∈X,id X(x)=x,称为X的恒同变换。 对映射f: X→Y,如果有映射g:Y→X,使得 g f= idX:X→X,fg=idY:Y→Y, 则说f是可逆映射,称g是f的逆映射。 如果在映射f: X→Y下X的不同点的像一定不同,则称f是单射。如果f(X)=Y,则称f是满射。 如果映射f: X→Y既是单射,又是是满射,则称f为——对应。此时?f-1f=id X,, ff-1= idY,于是f是可逆映射,并且f的逆映射是f-1。 一个集合X到自身的可逆映射称为X上的可逆变换。 1.2平面上的变换群 平移取定平行于平面的一个向量u,规定π的变换P u:π→π为:?A∈π,令P u AP(A)=u的点。称P u为π上的一个平移,称向量u是P u的平移量。(A)是使得 u

浅谈仿射变换在解决椭圆问题中的应用(精选.)

浅谈仿射变换在解决椭圆问题中的应用 文[1]介绍了在解决椭圆的某些综合问题时,可以利用仿射变换的办法,把椭圆变换为圆来进行研究,会使得问题的解决过程变得简化.笔者也结合自身的教学与解题实践,通过几道例题,浅谈一下仿射变换在解决椭圆综合问题中的一些用法. 例1 已知椭圆22221(0)x y a b a b +=>>,O 为坐标原点,A 为椭圆右顶点,若椭圆上存在点P (异于点A ),使得PO PA ⊥,则椭圆离心率的取值范围为________. 分析 此题中的点P 满足PO PA ⊥,即点P 在以AO 为直径的圆上,也即椭圆22221(0)x y a b a b +=>>与以AO 为直径的圆有不同于点A 的公共点.利用仿射变换将椭圆变换为圆,点P 变换为点'P ,则点P 与点'P 的纵坐标之比即为椭圆短半轴与长半轴之比. 解 作仿射变换,令','a x x y y b ==,可得仿射坐标系'''x O y ,在此坐标系中,上述椭圆变换为圆222''x y a +=,原坐标系中以AO 为直径的 圆的方程为220x ax y -+=,则0'b y a y ?=== ??,不难 求得椭圆离心率,12e ??∈ ? ??? . 说明 此题解法较多,用别的方法也不难求得本题的结果,但由上述过程我们看到,仿射变换也为我们提供了一种方便简洁的求解思路.

例2 已知椭圆22221(0)x y a b a b +=>>,12F F 、分别为椭圆左右焦点,过12F F 、作两条互相平行的弦,分别与椭圆交于M N P Q 、、、四点,若当两条弦垂直于x 轴时,点M N P Q 、、、所形成的平行四边形面积最大,则椭圆离心率的取值范围为________. 分析 利用仿射变换将椭圆变换为圆,此时M N P Q 、、、四点分别变换为''''M N P Q 、、、四点,由仿射变换时变换前后对应图形的面积比不变这个性质,故将上述题目中的椭圆变换为圆时,''''M N P Q 、、、四点所形成的平行四边形面积最大值仍在两条弦与x 轴垂直时取到,故只需研究在圆的一条直径上,取关于圆心对称的两点12F F 、,当1OF 为多少时,能使得过12F F 、的两条互相平行的弦与此直径垂直时刻, 与圆的四个交点所形成的面积最大. 解 作仿射变换,令','a x x y y b ==,可得仿射坐标系'''x O y ,在此坐标系中,上述椭圆变换为圆222''x y a +=,点12F F 、坐标分别为 (,0)(,0)c c -、,过12F F 、作两条平行的弦分别与圆交于''''M N P Q 、、、四点.由平行四边形性质易知,三角形'''O P Q 的面积为''''M N P Q 、、、四点所形成的平行四边形面积的14 ,故只需令三角形'''O P Q 面积的最大值在弦''P Q 与x 轴垂直时取到即可.由文[2]中的结论,易得当 0,2c ??∈ ? ?? 时,三角形'''O P Q 面积的最大值在弦''P Q 与x 轴垂直时取到.故此题离心率的取值范围为02? ??,. 说明 此题的一般解法也较多,但按照常规解法则较为繁琐.而上述解法利用仿射变换把椭圆变换为圆后,由于圆中三角形面积的计算

仿射变换用于从图像中提取目标块

无论是在人脸识别或跟踪领域,还是在图像处理领域,在我们做训练或者分析局部数据之前,都需要把对应的图像数据提取出来,如果必要还应该做相应的Scale处理,下面介绍了一个应用仿射变换提取图像中目标块的例子。 采用仿射变化的优点是易于处理目标块旋转,尺度的变换。 应用背景: 如何提取目标块中的数据,并且对其进行resize处理? 尤其是当目标块存在旋转的时候,我们如何把它正过来? 其它优点:仿射变换还可以处理像斜变这种线性形变。 2008-12-1 王栋

例子affine_exp.m 注:目前程序只支持灰度图像数据 image = imread('lena.bmp'); figure(1); hold on; imshow(image); block_size = [ 320 320 ]; %%缩放后的目标大小 sz = [ 70 70 ]; %%原图中的目标大小 p = [ 146 156 70 70 0 0 ]; %%参数:依次为:X方向中心坐标,Y方向中心坐标,宽,高,旋转角度(弧度),斜变角度(一般取0) w = block_size(1); param = [p(1), p(2), p(3)/sz(1), p(5), p(4)/p(3), 0]; param = affparam2mat(param); drawbox(sz, param, 'Color','r', 'LineWidth',2.5); hold off; param = [p(1), p(2), p(3)/w, p(5), p(4)/p(3), 0]; param = affparam2mat(param); wimg = warpimg(double(image), param, block_size); figure(2); imshow(uint8(wimg)); 实验结果解释:实验中参数p = [ 146 156 70 70 0 0 ]说明了提取框的位置,大小,旋转信息。sz = [ 70 70 ]表明待提取图像的大小为70x70。block_size = [ 320 320 ]表明提取目标再进行resize后图像的大小 2008-12-1 王栋

实验二、图像的几何变换 (2) 袁子鹏 网络11-2班 3110757219

《数字图像处理》实验指导书 信息科学与工程学院 袁子鹏 网络11-2班 3110757219 实验二、图像的几何变换 一、 实验目的 1掌握图像几何变换的原理; 2 利用MATLAB 实现图像的平移、比例缩放和旋转变换。 二、 实验原理 图像的几何变换包括:图像的空间平移、比例缩放、旋转、仿射变换和图像插值。 图像几何变换的实质:改变像素的空间位置,估算新空间位置上的像素值。 图像几何变换的一般表达式:[,][(,),(,)]u v X x y Y x y = ,其中,[,]u v 为变换后图像像素的笛卡尔坐标, [,]x y 为原始图像中像素的笛卡尔坐标。这样就得到了原始图像与变换后图像的像素的对应关系。 平移变换:若图像像素点 (,)x y 平移到 00(,)x x y y ++,则变换函数为 0(,)u X x y x x ==+, 0(,)v Y x y y y ==+,写成矩阵表达式为: 00x u x y v y ??????=+???????????? 其中,x 0和y 0分别为x 和y 的坐标平移量。 比例缩放:若图像坐标 (,)x y 缩放到( ,x y s s )倍,则变换函数为: 00x y s u x s v y ??????=?????????? ?? 其中, ,x y s s 分别为x 和y 坐标的缩放因子,其大于1表示放大,小于1表示缩小。 旋转变换:将输入图像绕笛卡尔坐标系的原点逆时针旋转θ角度,则变换后图像坐标为: cos sin sin cos u x v y θ-θ??????=??????θθ?????? 三、 实验步骤 1打开Matlab ,程序组中“work ”文件夹中应有待处理的图像文件; 2编写函数,对图像进行平移变换,使图像平移横坐标偏移量x 和纵坐标偏移量y ; 3编写函数,对图像进行比例缩放,使图像缩放横坐标偏移量x 和纵坐标偏移量y ; 4 编写函数,对图像进行旋转变换,使图像旋转某个角度angle ; 5 利用上面的函数,对一幅图像完成以下几何变换:先对x 方向缩小0.5倍,y 方向缩小0.25倍,然后平移[20,20],最后旋转90度。 6记录和整理实验报告。 函数定义: function J=translate(I, x, y) %平移量x 和y 图象变换 imtransform

二维图形的几何变换 空间平移、比例缩放、旋转、仿射变换和图像插值

实验五二维图形的几何变换 一.算法名称:几何变换 二.算法分析: 图像的几何变换包括图像的空间平移、比例缩放、旋转、仿射变换和图像插值。图像几何变换的实质改变像素的空间位置,估算新空间位置上的像素值。 三.代码实现: int changge(int x, int y) { int i; for(i = 0; i < 3; i++) { ee((att[i].x+x),(att[i].y+y),(att[(i+1)%3].x+x),(att[(i+1)%3]. y+y)); } getch(); setcolor(0); for(i = 0; i < 3; i++) {

ee((att[i].x+x),(att[i].y+y),(att[(i+1)%3].x+x),(att[(i+1)%3]. y+y)); } return 0; } int change1(int x,int y) { int hh1[3]; int hh2[3]; int i; for(i = 0; i < 3; i++) { Hh1[i]=(att[i].x-att[0].x)*sx+att[0].x; Hh2[i]=(att[i].y-att0].y)*sy+att[0].y; } for(i = 0; i < 3; i++) { ee(hh1[i]+120,hh2[i],h1[(i+1)%3]+120,hh2[(i+1)%3]); } getch(); setcolor(0); for(i = 0; i < 3; i++)

{ ee(hh1[i]+120,hh2[i],arr_one[(i+1)%3]+120,hh2[(i+1)%3 ]); } return 0; } int change2(int x, int y, int a) { int i; int hh[3]; int hh1[3]; for(i = 0; i < 3; i++) { hh[i]=(att[i].x-x)*cos(a)-(att[i].y-y)*sin(a)+x; Hh1[i]=(att[i].x-x)*sin(a)+(att[i].y-y)*cos(a)+y; } for(i = 0; i < 3; i++) { ee(hh[i],arr_two[i],hh[(i+1)%3],hh[(i+1)%3]); } getch(); setcolor(0);

数字图像处理与分析实验作业

数字图像处理与分析实验作业 作业说明:作业题目分为基本题和综合应用题。基本题主要是考察大家对教材涉及的一些基本图像处理技术的理解和实现。而综合应用题主要是考察大家综合利用图像处理的若干技术来解决实际问题的能力。 注:所有实验用图像均可从网上下载,文档中的图片只是示例。 作业要求: 编程工具:Matlab或者VC(可以使用OpenCV:https://www.doczj.com/doc/4114203136.html,/)。因为很多基本的图象处理算法已经集成在很多的编程工具中,而编程训练中基本题的目的是让同学们加深对这些算法的理解,所以基本题要求同学们只能使用图像读取和显示相关的函数(例如Matlab的imread imshow,imwrite,OpenCV的cvCreateImage,cvLoadImage,cvShowImage),而不要直接调用相关的API(例如二维DFT,图象均衡等等),但在综合应用题中则无此限制。 上交的作业包括:实验报告和程序。其中实验报告要求写出算法分析(必要时请附上流程图),函数说明(给出主要函数的接口和参数说明),实验结果(附图)及讨论分析。提交的程序,一定要确保可以运行,最好能写个程序说明。 基本题一共有10道,可以从中任选2道题来完成。综合应用题有2道,可以从中任选1道来完成。 请各位同学务必独立完成,切忌抄袭! 基本题 一、直方图变换 要求对原始Lena 图像实现以下三种取整函数的直方图均衡化: 线性函数: t k= int[(L -1) t k+ 0.5]; 对数函数: t k= int[( L-1)log(1+9t k) + 0.5] ; 指数函数: t k= int[(L -1)exp( t k-1) + 0.5] ; 要求给出: 1、原始图像和分别采用上述三种方式均衡化后的图像; 2、原始图像的直方图和上述三种方式对应均衡化后的直方图。

相关主题
文本预览
相关文档 最新文档