资源描述
20
数字图像处理论文
目录
摘要 2
1 概述 3
1.1 人脸识别技术 3
1.2 PCA方法概述 3
2 识别功能的实现 5
2.1 PCA方法基本原理 5
2.2 基于主成分分析法的人脸识别 6
2.2.1 读入人脸库 6
2.2.2 计算K-L变换的生成矩阵 6
2.2.3 利用SVD定理求解特征值和特征向量 7
2.2.4 样本投影并识别 8
2.2.5 选择分类器识别人脸 9
2.3 基于PCA算法人脸识别的matlab实现 9
2.3.1 读取人脸库 10
2.3.2 利用生成矩阵求特征值和特征向量 10
2.3.3 选取阈值提取训练样本特征 10
2.3.4 选取测试样本进行识别 11
2.5 实验结果及分析 11
3 附加功能及GUI的设计 13
4 总结 20
摘要
这次设计主要是完成了基于主成分分析(Principal Component Analysis,PCA)方法的人脸识别,为了便于操作,利用matlab GUI做了一个可视化界面,其中还附加了诸如图像平滑,锐化,灰度化,二值化,膨胀,腐蚀,二级小波分解及应用各种算子进行的边缘检测等功能,利用这些附加功能可以对待识别图像做简单的预处理,以提高识别率。PCA方法的基本原理是:利用离散K-L变换提取人脸的主要成分,构成特征脸空间,识别时把测试样本投影到该空间,构成一组投影系数,通过与特征脸的距离比较,距离最小的特征脸对应的即是识别结果。基于PCA的人脸识别分为三个阶段,第一个阶段利用训练样本集构建特征脸空间;第二个阶段是训练阶段,主要是将训练图像投影到特征脸子空间上;第三个阶段是识别阶段,将测试样本集投影到特征脸子空间,然后与投影后的训练图像相比较,距离最小的为识别结果。基于PCA的人脸识别其实一种统计性的模板比配方法,原理简单,易于实现,但也有不足,它的识别率会随着关照,人脸角度,训练样本集的数量而变换,但仍不失为一种比较好的方法。
1 概述
1.1 人脸识别技术
人脸识别技术是采用某种技术和手段对人的身份进行标识,从而依据该标识对人进行身份识别,以达到监督、管理和识别目的的一种技术。近年来由于在公安罪犯识别、安全验证、安全验证系统、信用卡验证等方面的巨大应用前景而越来越成为当前模式识别和人工智能领域的一个研究热点。
人脸识别基本上可分为两个方面:一是给定一幅待识别人脸图像,判别它是否是某人,即通常所说的身份验证(Authentication),这是个“一对一”的两分类问题;另一个是给定一幅待识别人脸图像,判断它是谁,即通常所说的身份识别(Recognition),这是一个一对多”的多类分类问题。通常所说的人脸识别是个“一对多”的多类分类问题,计算机人脸识别过程如图1.1所示。一个典型的人脸识别系统包含以下各部分:(1)从图像中提取人脸区域,检测,定位人脸;(2)用适当的特征表征人脸;(3)将人脸表征进行分类。
图1.1
基于人脸图像整体特征的人脸识别方法由于不需要提取人脸图像中器官的具体信息,而且充分利用到人脸图像本身具有的灰度信息,因此可获得更高的识别性能。基于人脸图像整体特征的人脸识别方法主要有特征脸法,最佳鉴别矢量集法,贝叶斯法,基于傅立叶变换特征法,弹性图匹配法,相关方法,线性子空间法,可变形模型法和基于人工神经网络的方法等等。其中弹性图匹配法和傅里叶不变特征法侧重于表述人脸图像;最佳鉴别矢量集法,贝叶斯法,基于人工神经网络的方法侧重于分类;特征脸法和线性子空间法等侧重于人脸图像的重构。
1.2 PCA方法概述
PCA(principal Component Analysis)是一项在计算机视觉中用于降低维数、提取特征的技术,它被认为是人脸识别的有效方法之一,Sirovish和Kirby首先提出应用Karhunen-Loeve变换表征人脸,即人脸由被称之为特征脸向量的带权特征向量的线性组合表征。PCA算法将人脸图像看作随机向量,采用K-L变换得到所有人脸空间样本的正交变换基,这些基向量具有与人脸相似的形状,表征了人脸区别于其他物体的特征,因此被称为特征脸向量。对应特征值的绝对值越大,其特征向量对构造人脸的作用越大。选择作用最大的部分特征向量作为人脸空间的基向量,如此可以降低人脸空间维数,而对人脸重构的影响很微弱。利用这些基向量的线性组合描述、表达人脸和逼近人脸,进行人脸的识别和重建。将人脸映射到由特征脸向量构成的空间中,得到区别于其他人脸的特征。识别过程就是把待识别人脸特征,与库中人脸特征进行比较。人脸的重建就是根据待识别人脸特征,还原到人脸空间中。
PCA亦称特征脸方法把人脸图像作为一个整体来编码,而不关心眼、嘴、鼻等单个特征,从而大大降低了识别的复杂度。此方法的主要缺点是目前还没有一个快速的求解特征值和特征向量的算法,每一张新脸入库,都要重新计算特征值和特征向量,费时较多。优点是:图像的原始灰度数据可直接用来学习和识别,不需要任何初级或中级处理;不需要人脸的几何和反射知识;通过低维子空间表示进行有效压缩;与其他匹配方法相比,识别简单有效。为了解决上述缺点,研究人员在此基础上发展了许多改进方法:如将特征脸与线性判别函数相结合,可以使得对光照及人脸表情不太敏感,样本集小波变换预处理减少运算量,利用奇异值分解求特征值,2DPCA等等。
2 识别功能的实现
2.1 PCA方法基本原理
设人脸图像为二维灰度图像,用维列向量表示。人脸图像训练集为,其中为训练集中图像总数。根据训练集构造总体散布矩阵:
其中为所有训练样本的平均向量
选取一组标准正交且使得准则函数式(3.3)达到极值的向量作为投影轴,其物理意义是使投影后所得特征的总体散布量(类间散布量与类内散布量之和)最大。
其等价于
上式即为矩阵的Rayleig熵,由Rayleigh熵[7]的极值性质,最优投影轴可取为的个最大的特征值所对应的标准正交的特征向量。
对于人脸图像,总体散布矩阵的大小为,对它求解特征值和特征向量是很困难的,由奇异值定理,一种取而代之的方法是解个较小的矩阵。首先计算矩阵的特征向量:
矩阵的特征向量由差值图像与线性组合得到
取的前个最大特征值的特征向量计算特征脸,由门限值确定:
2.2 基于主成分分析法的人脸识别
完整的PCA人脸识别的应用包括四个步骤:人脸图像的预处理;读入人脸库,训练形成特征脸空间;把训练样本和测试样本投影到特征脸空间中;选择一个距离函数按照某种规则进行识别。下面看一下详细的过程:
2.2.1 读入人脸库
这次设计中选用英国剑桥大学人脸库即ORL人脸库,此人脸数据库有40人,每人有10幅图像。这些图像具有以下特点:有些图像拍摄于不同的时期;人的脸部表情和脸部细节有着不同程度的变化,比如,笑或不笑,眼睛或睁或闭,戴或不戴眼镜;人脸姿态也有相当程度的变化,深度旋转和平面旋转可达20。;人脸的尺度也有多达10%的变化;图像的分辨率是 112x92。。在ORL人脸库中选出每个人的前5幅图像作为训练图像,构成一个200幅图像的训练集,剩下的200幅图像构成测试集。每幅图像按列相连构成10304维列向量,读入的训练样本集就构成10304×200的矩阵。
2.2.2 计算K-L变换的生成矩阵
以训练样本集的总体散布矩阵为生成矩阵,即
其中为第幅训练样本的图像向量,为训练样本集的均值向量,训练样本的总数为200。为了求的生成矩阵的特征值和正交归一化特征向量,由于矩阵维数过高,计算量太大,可以引进奇异值分解定理(SVD定理)。
图2.1 平均脸
2.2.3 利用SVD定理求解特征值和特征向量
SVD定理的定义:若矩阵,则存在正交矩阵,,使得,,即,则称为奇异值分解。其中,为的奇异值,是或的特征值的平方根,即。
奇异值向量具有良好的稳定性,所以它对图像噪音、图像光照条件引起的灰度变化具有不敏感的特性。
计算特征值和特征向量的基本步骤是:(1)创建协方差矩阵;(2)计算协方差矩阵的特征值和特征向量;(3)按特征值由小到大顺序排列特征值和特征向量。
这些特征向量对应的图像很像人脸,所以被称为“特征脸”。有了这样一个由“特征脸”组成的降维子空间,任何一幅图像都可以向其投影并获得一组坐标系数,这组坐标系数表明了该图像在“特征脸”子空间的位置,从而可以作为人脸识别的依据。
选择了其中30个特征脸如下图所示
图2.2 特征脸
2.2.4 样本投影并识别
得到特征脸子空间以后,就要把训练样本和测试样本都投影到特征脸子空间,每幅图像得到一组坐标系数,对应子空间中的一个点。任何一幅图像都可以有这组特征脸线性组合,加权系数就是K-L变换的系数。
图2.3 人脸重建
2.2.5 选择分类器识别人脸
比较直接也比较常用的分类方法是选择与待分类对象距离最近的样本的类别为待分类对象的类别。常用的距离测度有:欧式距离、绝对值距离、明氏距离、马氏距离、余弦距离。有了距离的测度,将待识别的人脸映射到特征空间,寻找距离最小的那一类样本。为了克服单个样本类别的偶然性,增加识别的可靠性,可以选择最近的k个样本,然后把待识别人脸判别为这k个样本中同类样本最多的那个类别,即k近邻判别。实验中使用欧式距离比较待分类特征系数与每个人的特征系数之间的距离。
2.3 基于PCA算法人脸识别的matlab实现
用matlab语言仿真PCA算法的人脸识别,分为以下几个步骤:
2.3.1 读取人脸库
allsamples=[]; % allsample用于存储读取的人脸图像矩阵
for i=1:40
for j=1:5
a=imread (strcat ('e: \ORL\s', num2str (i),'\', num2str (j),'.pgm'));
b=a (1:112*92);
b=double (b);
allsamples= [allsamples; b];
end
end
2.3.2 利用生成矩阵求特征值和特征向量
samplemean=mean (allsamples);
for i=1:200
xmean (i, :) =allsamples (i, :)-samplemean;
end
sigma=xmean*xmean';
[v d]=eig (sigma);
2.3.3 选取阈值提取训练样本特征
上面得到的200个特征向量,虽然已经比较小了,但计算量还是比较大。其实不必要保留所有的特征向量,较大特征值对应的特征向量已经能够提供足够多的用于识别的特征。一般是通过计算阈值进一步降低维数,这种方法的具体做法是把特征向量和特征值从大到小排列,选取特征值占总特征值之和的比值大于一定值所对应的特征向量。阈值一般是取0.9。计算公式是。但发现在这里取0.91更好,识别率更高一点。通过程序运行可以发现,阈值选择为0.91时特征值个数减少为75个,就是说很多特征值是很小的,数值小的特征值对应的特征向量对识别只能提供很少的信息。所以通过阈值选择,计算量减少了很多。
d1=diag (d);
dsort=flipud (d1);
vsort=fliplr (v);
dsum=sum (dsort);
dsum_extract=0;
p=0;
while (dsum_extract/dsum<0.91)
p=p+1;
dsum_extract=sum (dsort (1: p));
end
base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2));
allcoor=allsamples*base;
2.3.4 选取测试样本进行识别
测试样本识别的过程就是把测试图像投影到特征脸子空间,得到一组特征系数,然后按照欧式距离的最小近邻法与训练样本集投影得到的系数匹配,找到距离最小的样本就是识别的结果。但为了克服单个样本的偶然性,这里选择最近的3个样本,然后把待识别人脸判别为这3个样本中同类样本最多的那个类别。
a=imread (strcat ('e: \ORL\s', num2str (i),'\', num2str (j),'.pgm'));
b=a (1:10304);
b=double (b);
tcoor=b*base;
for k=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;
if class1~=class2 && class2~=class3
class=class1;
elseif class1==class2
class=class1;
elseif class2==class3
class=class2;
end;
2.5 实验结果及分析
对于ORL人脸库,选用每人前5幅图像作为训练样本,后5幅图像作为测试样本,训练样本和测试样本总数均为200,阈值选为0.91。程序运行可得识别率为0.885。选取的特征空间的维数是88。PCA算法是基于人脸图像整体特征的人脸识别方法,影响识别率的因素主要有很多,如人脸库的差异,算法的差异,参数的选择,都会产生很大的影响。但现在主要考虑两点因素:(1)阈值的选择,即特征空间的维数;(2)训练样本的数量。下面就看一下选择不同的参数时候他们各自对识别率的影响如表2.1所示。
表2.1 阈值及样本数量对识别率的影响
每人7幅
每人6幅
每人5幅
每人4幅
每人3幅
每人2幅
每人1幅
0.20
0.3583
0.3688
0.3200
0.3500
0.3607
0.3469
0.3222
0.40
0.6500
0.6312
0.6150
0.5667
0.5714
0.5375
0.4250
0.60
0.8667
0.8313
0.7650
0.7167
0.7036
0.6656
0.6083
0.80
0.9333
0.8938
0.8600
0.8083
0.7643
0.7344
0.6444
0.85
0.9417
0.8875
0.8600
0.8333
0.7857
0.7375
0.6639
0.88
0.9417
0.9063
0.8700
0.8417
0.7893
0.7500
0.6639
0.90
0.9417
0.9063
0.8800
0.8458
0.7893
0.7500
0.6778
0.92
0.9333
0.8938
0.8800
0.8333
0.7964
0.7625
0.6806
0.94
0.9333
0.9000
0.8750
0.8292
0.7964
0.7531
0.6972
0.96
0.9333
0.8938
0.8800
0.8250
0.7857
0.7469
0.6944
从上表可以看出当阈值一定时,训练样本数的增加会使识别率提高,大概每人每增加一幅图像,识别率提高4个百分点。在训练样本数一定时,阈值的改变也相应的影响识别率,阈值太小的时候识别率显然很低,大概阈值到0.8以上时,识别率变化不大,这就说明,降低特征矩阵维数不但可以减少计算量,而且基本上不会影响识别率太多。
3 附加功能及GUI的设计
MATLAB提供了专门的GUI设计工具——图形用户界面开发环境(GUIDE),为了便于操作及演示的需要,利用GUIDE设计了可视化界面。另外还增加了诸如图像平滑,图像锐化,灰度化,二值化,膨胀,腐蚀,二级小波分解及应用各种算子进行的边缘检测的功能。
“文件”菜单中有“打开”、“保存”、“退出”二级子菜单,分别用于打开,保存处理后的图像和退出界面操作。如图3.1所示
图3.1
“图像处理”菜单主要是完成一些基本的图像处理功能,其中有“图像平滑”、“图像锐化”、“灰度化”、“二值化”、“小波分解”、“膨胀”、“腐蚀”、“边缘检测”。如下图所示。灰度、二值化、腐蚀,膨胀,边缘检测都比较简单,下面来看一下图像平滑、平滑、和小波分解的实现。如图3.2所示
图3.2
图像平滑主要有两个作用:一个是消除或减少噪声,改善图像质量;另一个是模糊图像,使图像看起来柔和自然。图像平滑可以在空间域进行,也可以在频域进行。空间域常使用的方法有邻域平均法、中值滤波法、多图像平均法等;频域主要是采用理想低通、巴特沃斯低通等各种滤波器进行低通滤波,来实现平滑处理。这里采用的是邻域平均法如图3.3所示。
samplemean=mean (allsamples);
for i=1:200
xmean (i, :) =allsamples (i, :)-samplemean;
end
Sigma=xmean*xmean';
[v d]=eig (sigma);
src_image=getappdata (handles.figure_image,'src_image');
if isequal(src_image,0)
return;
else
[row, colum,z]=size (src_image);
if isequal (z, 1)
for i=2: row-1
for j=2: colum-1
pro_image(i,j)=(src_image(i-1,j)/5+src_image(i+1,j)/5+src_image(i,j-1)/5+src_image(i,j+1)/5+src_image(i,j)/5);
end
end
elseif isequal (z, 3)
for i=2: row-1
for j=2: colum-1
pro_image(i,j,1)=(src_image(i-1,j,1)/5+src_image(i+1,j,1)/5+src_image(i,j-1,1)/5+src_image(i,j+1,1)/5+src_image(i,j,1)/5);
pro_image(i,j,2)=(src_image(i-1,j,2)/5+src_image(i+1,j,2)/5+src_image(i,j-1,2)/5+src_image(i,j+1,2)/5+src_image(i,j,2)/5);
pro_image(i,j,3)=(src_image(i-1,j,3)/5+src_image(i+1,j,3)/5+src_image(i,j-1,3)/5+src_image(i,j+1,3)/5+src_image(i,j,3)/5);
end
end
end
axes (handles.axes_dst);
imshow (pro_image);
title('平滑后的图像');
end
图3.3 图像平滑
图像锐化主要是加强高频部分,或减弱低频部分。图像的低频成分主要对应于图像中的区域和背景,而高频成分主要对应于图像中的边缘和细节。图像锐化加强了细节和边缘,对图像有去模糊的作用。因为噪声主要分布在高频部分,如果图像中存在噪声,锐化会放大噪声。此处是在空域采用sobel算子进行处理的。如图3.4所示。
image_ruihua=getappdata (handles.figure_image,'src_image');
if isequal (image_ruihua,0)
return;
elseif isrgb (image_ruihua)
errordlg('此处彩色图像能锐化处理','警告','replace');
else
H=fspecial ('sobel');
I=filter2 (H,image_ruihua);
axes (handles.axes_dst);
Imshow (I);
title('锐化图像');
setappdata (handles.figure_image,'src_image',I);
end
图3.4 图像锐化
小波分解可以将图像分解为具有具有不同分辨率的图像,尺度展开信号分量反映图像的粗略轮廓,而小波展开各信号分量反映图像的细节,并且小波函数的尺度越高,对应信号中越精细的细节。在人脸识别中,人脸库先经过小波变换得到分辨率更低的粗略图像,其特征不会减少,但却可以极大的减少运算量。如图3.5所示。
samplemean=mean (allsamples);
for i=1:200
xmean (i, :) =allsamples (i, :)-samplemean;
end
sigma=xmean*xmean';
[v d]=eig (sigma);
B=getappdata (handles.figure_image,'src_image');
if isequal (B, 0)
return;
else
if isrgb(B)
x=rgb2gray(B);
else
x=B;
end
N=1
wname='db1';
[Lo_D, Hi_D] = wfilters (wname,'d');
[r, c]=size(x);
xd=double(x);
coef= [];
for i=1: N
[row, col]=size (xd);
for j=1: row
tmp1=xd (j, :);
cD_mydwt= [];
for i=1:1
cvl=conv (tmp1, Lo_D);
N=length (cvl);
M=floor (N/2);
i=1: M;
dnl (i) =cvl (2*i);
cvh=conv (tmp1, Hi_D);
N=length (cvh);
M=floor (N/2);
i=1: M;
dnh (i) =cvh(2*i);
ca1=dnl;
cd1= [cD_mydwt, dnh];
end
x1(j, :) =[ca1,cd1];
end
[row1,col1]=size(x1);
for k=1:col1
tmp2=x1(:, k);
cD_dwt2= [];
for i=1:1
cvl2=conv (tmp2, Lo_D);
N=length (cvl2);
M=floor (N/2);
i=1: M;
dnl2 (i) =cvl2 (2*i);
cvh2=conv (tmp2, Hi_D);
N=length (cvh2);
M=floor (N/2);
i=1: M;
dnh2 (i) =cvh2 (2*i);
ca2=dnl2;
cd2= [cD_dwt2, dnh2];
end
x2(:, k) = [ca2, cd2]' ;
end
[row2, col2]=size(x2);
cA=x2(1:row2/2, 1:col2/2);
cV=x2(1:row2/2, col2/2+1:col2);
cH=x2(row2/2+1:row2, 1:col2/2);
cD=x2(row2/2+1:row2, col2/2+1:col2);
xd=cA;
outmp= {cV; cH;cD};
coef= [outmp; coef];
end
coef= [cA; coef];
yt=uint8 (coef {1});
axes (handles.axes_dst);
imshow (yt);
title ('Approximation');
end
src_image=yt;
setappdata(handles.figure_image,'src_image',src_image);
图3.5 二级小波分解
“人脸识别”菜单中包括“训练”、“识别”两项。训练和识别的过程在第二章中已经过了比较详细的论述,这里不再赘述。如图3.6和3.7所示
图3.6 训练
图3.7 识别
在GUIDE中,各对象的操作都是通过句柄来执行的。“图像处理”菜单中的处理功能都是应用于当前文件的,所谓当前文件就是刚被处理过的文件,每次处理完之后图像都会全局更新,所以无法恢复。
4 总结
人脸识别是一个跨学科富挑战性的前沿课题,但目前人脸识别还处在研究阶段,还未达到实用化.人脸识别难度较大,主要是在光线、表情、姿态变化以及附加物的影响时,很难找到一种算法能适应所有的情况。本文采用的特征提取提和识别的方法是基于奇异值分解的特征提取法,在判断输入图像与训练图像之间的类似度时,用了较常用的欧式距离。
有待研究的问题还有:一是如何利用各种图像的特点,对静态人脸图像做相应的预处理,从而克服光照,表情变换对识别的影响,提高人脸识别的鲁棒性;二是在人脸识别的特征提取过程中,如何能利用图像的各种信息,比如灰度统计信息和结构信息,将各种可能的信息集合起来,找到能最大限度利用各种信息的识别方法。
人脸识别的方法是很多,各种方法都有各自的优缺点。如果能把各种方法融合起来,将会是一个很好的方向。
有需要源程序与gui界面与人脸训练测试库的可以加qq 372797035
附录是识别的结果
展开阅读全文