基于matlab的人脸识别技术.docx
- 文档编号:23709855
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:17
- 大小:842.20KB
基于matlab的人脸识别技术.docx
《基于matlab的人脸识别技术.docx》由会员分享,可在线阅读,更多相关《基于matlab的人脸识别技术.docx(17页珍藏版)》请在冰豆网上搜索。
基于matlab的人脸识别技术
基于matlab的人脸识别技术
————————————————————————————————作者:
————————————————————————————————日期:
人脸识别
摘要:
人脸识别是一门新兴的科研项目,起始于上个世纪60年代。
经过几十年的发展,现已成为一项最有上升潜力的人体特征识别技术。
具有广泛的应用前景,它的工作原理是借由的生物特征来确认生物个体,利用MATLAB软件实现人脸信息的检测、定位与识别,在输入的整幅图像中寻找人脸区域,把图像分割成两个部分——人脸区域和非人脸区域,从而为后续的应用作准备。
PCA法实现人脸边缘检测,确定其分布范围,设定门限阀值,实现人脸区域与非人脸区域的分割。
再结合长宽比、目标面积等计算方法在图像中分割出人脸区域,经试验该方法能较为精确地定位单人脸图像,对多人脸图像定位不准确。
关键词:
matlab;人脸识别;人脸定位;边缘检测
1引言
人脸识别技术是近年来随着图像处理技术、计算机技术、模式识别技术等的快速进步而出现的一种崭新新生物特征识别技术。
相对与指纹、虹膜等其他生物特征识别技术,人脸识别具有直接、友好、方便的特点,尤其是对于个人来说,几乎无任何心理障碍,因此在商业、司法、监控和视频检索等众多领域有着广泛的应用前景。
在“9.11”事件以后,各国都投入大量物力,人力研究并发展种类识别技术,使得人脸识别技术受
到了前所未有的重视。
如同人的指纹一样,人脸也具有唯一性,也可用来鉴别一个人的身份。
人脸图像的自动识别系统较之指纹识别系统、DNA鉴定等更具方便性,然而人脸图像受很多因素的干扰,给识别带来很大难度。
国外对于人脸图像识别的研究较早,现己有实用系统面世,只是对于成像条件要求较苛刻,应用范围也就较窄,国内也有许多科研机构从事这方而的研究,并己取得许多成果。
2图像处理的Matlab实现
2.1Matlab简介
由MathWork公司开发的Matlab语言语法限制不严格,程序设计自由度大,程序的可移植性好。
Matlab还推出了功能强大的适应于图像分析和处理的工具箱,常用的有图像处理工具箱、小波分析工具箱及数字信号处理工具箱。
利用这些工具箱,我们可以很方便的从各个方面对图像的性质进行深入的研究。
Matlab图像处理工具箱支持索引图像、RGB图像、灰度图像、二进制图像并能操作.bmp、.jpg、.tif等多种图像格式文件。
2.1数字图像处理及过程
图像是人类获取信息、表达信息和传递信息的重要手段。
利用计算机对图像进行去除噪声、增强、复原、分割、提取特征等的理论、方法和技术称为数字图像处理。
数字图像处理技术已经成为信息科学、计算机科学、工程科学、地球科学等诸多方面的学者研究图像的有效工具。
数字图像处理主要包括图像变换、图像增强、图像编码、图像复原、图像重建、图像识别以及图像理解等内容。
3matlab人脸识别系统
人脸识别是图像识别的一个重要分支,其基本结构如图所示。
为了保证人脸的位置一致性,在一定程度上克服了背景、头发等冗余信息的干扰,首先要对人脸库中的图像进行一些预处理操作。
紧接着,进行特征抽取,将得到的人脸特征和训练样本进行对比,根据相似程序的高低决定最后的识别结果。
图像采集
预处理
特征提取
测试训练
特征匹配目标
图像
提取库识别结果
图1-1人脸识别系统框图
3.1图像的采集
3.1.1人脸图像的获取
图像的获取都是通过摄像头摄取,摄取的图像可以是真人也可以是人脸的图片,为了方便计算直接使用需要识别的人脸图像。
3.1.2人脸检测
人脸检测主要任务是判断所给图像是否存在人脸,若存在人脸需要给出人脸的大小(区域面积),坐标位置,是否为二值图像等信息。
3.2人脸图像的预处理
常应用于人脸图像的预处理方法有图像
类型转换、滤波去噪、灰度变换、边缘检测及二值化、尺寸归一化、作为通用人脸图像预处理模块要能够充分适应不同人脸库中图像在人脸大小、光照强度、成像系统等方面的任意性和差异性不能单独采用某种单一的滤波、灰度变换和边缘检测方法。
灰度归一化等所以在本仿真系统中对上述的每种预处理方法全部加以实现的同时还对三种最常用预处理方法滤波去噪、灰度变换、边缘检测提供了多种不同的具体算法。
3.2.1滤波去噪
由于噪声给图像带来的失真和降质在特征提取之前采用滤波的方式来去除噪声是实际人脸识别系统中所必须的步骤。
滤波的方法有很多如各种平滑滤波、各种锐化滤波等。
在人脸图像预处理中使用较多的滤波是平滑滤波方法可分为以下三类线性滤波、中值滤波、自适应滤波。
(1)线性滤波最典型的线性滤波方法如采用邻域平均法的均值滤波器、采用邻域加权平均的高斯滤波和维纳滤波。
线性滤波可以去除图像中某些特定类型的噪声如图像中的颗粒噪声高斯噪声、椒盐噪声等。
对扫描得到的人脸图像根据其噪声类型一般采用此种滤波方法。
考虑滤波模板大小对滤波效果影响较大仿真系统选择算法时对同种滤波算法提供了不同模板大小的情况。
(2)中值滤波法中值滤波法是一种非线性滤波方法它把像素及其邻域中的像素按灰度级进行排序然后选择该组的中间值作为输出像素值。
中值滤波方法的最大优点是抑制噪声效果明显且能保护边界。
对于使用基于整体的人脸识别算法的系统中由于失掉小区域的细节对特征提取影响较小所以这种滤波方法最受欢迎。
(3)自适应滤波自适应滤波能够根据图像的局部方差来调整滤波器的输出其滤波效果要优于线性滤波同时可以更好地保存图像的边缘和高频细节信息。
3.2.1灰度变换
灰度变换是图像增强技术中的一种。
通过灰度变换可对原始图像中的光照不均进行补偿使得待识别人脸图像遵循同一或相似的灰度分布。
只有这样不同图像在特征提取和识别时才具有可比性。
这一过程也被称作灰度归一化。
常用在人脸识别系统中的灰度变换方法主要有基于图像统计特征的直方图均衡化、直方图规定化和灰度均值方差标准化三种方法。
直方图均衡化和直方图规定化的灰度变换原理和实现方法可由matlab仿真来实现。
三种灰度变换方法均能在一定程度上消除由于光照条件不同而
对人脸识别带来的影响。
故在仿真系统中提供了三种灰度变换效果比较及选择界面用户可根据需要选用。
3.2.3边缘检测
对输入人脸图像进行边缘检测是很多人脸识别系统在人脸粗定位及人脸主要器官眼睛、鼻子、嘴巴定位时采用的预处理方法。
边缘检测的方法有很多主要有微分算子法、Sobel算子法、拉普拉斯算子法、canny算子法等。
每种算子对不同方向边缘的检测能力和抑制噪声的能力都不同。
所以和灰度变换及滤波去噪部分的设计思路相同在仿真系统中给出了canny、sobel、log、prewitt四种算子在不同灰度阈值下、不同方向的边缘检测算法使用者可从
检测结果中加以比较、选择合适的算法。
图像类型转换、图像二值化、尺寸归一化也是一些人脸识别系统中经常使用的预处理方法。
为了在不修改其他算法的基础上扩大系统处理图像的类型和范围将输入图像首先转换为统一的类型是多数人脸图像预处理中的第一步。
仿真系统中通过调用MATLAB中提供的各种图像类型转换函数来实现TIF、JPG转换为BMP格式及彩色到灰度图像的转换对图像二值化采用了graythresh()函数来自动选择阈值的二值化方法尺寸归一化采用的算法是对人脸图像进行剪裁和尺寸缩放实现去除大部分头发、服饰和背景的干扰并将人脸图像大小统一。
3.3特征提取
通过人脸特征点的检测与标定可以确定人脸图像中显著特征点的位置如眼睛、眉毛、鼻子、嘴巴等器官,同时还可以得到这些器官及其面部轮廓的形状信息的描述。
根据人脸特征点检测与标定的结果,通过某些运算得到人脸特征的描述。
3.3.1人脸识别的算法
通过判别图像中所有可能区域是否属于“人脸模式”的方法来实现人脸检测。
这类方法有:
特征脸法、人工神经网络法、支持向量机法;积分图像法。
本次使用的是PCA(主成分分析法)其原理是:
利用K-L变换抽取人脸的主要成分,构成特征脸空间,识别时将测试图像投影到此空间,得到一组投影系数,通过与各个人脸图像比较进行识别。
对于一幅M*N的人脸图像,将其每列相连构成一个大小为D=M*N维的列向量。
D就是人脸图像的维数,即是图像空间的维数。
设n是训练样本的数目;Xj表示第j幅人脸图像形成的人脸向量,则所需样本的协方差矩阵为:
(1)
其中U为训练样本的平均图像向量:
(2)
令A=[x1-u,x2-u,...xn-u],则有Sr=AAT,其维数为D×D。
根据K-L变换原理,需要求得的新坐标系由矩阵AAT的非零特征值所对应的特征向量组成。
直接计算的计算量比较大,所以采用奇异值分解(SVD)定理,通过求解ATA的特征值和特征向量来获得AAT的特征值和特征向量。
依据SVD定理,令li(i=1,2,…,r)为矩阵ATA的r个非零特征值,vi为ATA对应于li的特征向量,则AAT的正交归一特征向量Ui为:
(3)
则“特征脸”空间为:
w=(U1,U2,...,Un)
将训练样本投影到“特征脸”空间,得到一组投影向量Ω=wTu,构成人脸识别的数据库。
在识别时,先将每一幅待识别的人脸图像投影到“特征脸”空间,再利用最邻近分类器比较其与库中人脸的位置,从而识别出该图像是否是库中的人脸,如果是,是哪一幅人脸。
以下为运行结果图:
图1-2人脸定位图
图1-3人脸检测
不过该算法具有局限性,对于多张人脸基本上就不能准确定位如下图:
图1-4失败的人脸定位图
4结论
特征脸算法(PCA)使得压缩前后的均方误差最小,且变换后的低维空间有很好的分辨能力,但是在种方法在处理人脸图像时,要将二维图像矩阵转换成一维的列向量,使图像的维数达到上万维,计算工作量非常大,特征提取速度慢。
为了克服传统PCA的不足,研究者们相继提出了二维PCA(2DPCA)方法、PCA+2DPCA等一些方法。
这些方法的提出不仅有效地解决了图像处理的高维问题,而且大大提高了人脸的识别率。
参考文献
[1]祝磊,朱善安.人脸识别的一种新的特征提取方法[J].计算机学报,2007,34(6):
122-1251
[2]何东风,凌捷.人脸识别技术综述[J].计算机学报,2003,13(12):
75-78
[3]何国辉,甘俊英.PCA-LDA算法在性别鉴别中的应用[J].中国图像图形学2006,32(19):
208-211.
[4]孙艳丰,梁永涛,苏世前.等.基于肤色模型和重心模板的人脸检测[J].北京工业大学报,2006,5:
467-472.
[5]王伟,张佑生,等.人脸检测与识别技术综述[J].合肥工业大学学报,2006,
(2).
[6]王金庭,杨敏.人脸检测技术研究[J].计算机系统应用,2006(4):
31-33.
[7]樊振萍,人脸检测与识别技术综述[J].电脑知识与技,,2008,07(5):
1292-1295
附件:
程序
Img=imread('D:
\1.jpg');
ifndims(Img)==3
I=rgb2gray(Img);
else
I=Img;
end
BW=im2bw(I,graythresh(I));%二值化
figure;
imshow(Img)
title('原图像');
holdon;
[xt,yt]=meshgrid(round(linspace(1,size(I,1),10)),...
round(linspace(1,size(I,2),10)));
mesh(yt,xt,zeros(size(xt)),'FaceColor',...
'None','LineWidth',3,...
'EdgeColor','r');
imshow(BW)
title('二值图像');
[n1,n2]=size(BW);
r=floor(n1/10);%分成10块,行
c=floor(n2/10);%分成10块,列
x1=1;x2=r;%对应行初始化
s=r*c;%块面积
fori=1:
10
y1=1;y2=c;%对应列初始化
forj=1:
10
if(y2<=c||y2>=9*c)||(x1==1||x2==r*10)
%如果是在四周区域
loc=find(BW(x1:
x2,y1:
y2)==0);
[p,q]=size(loc);
pr=p/s*100;%黑色像素所占的比例数
ifpr<=100
BW(x1:
x2,y1:
y2)=0;
end
end
y1=y1+c;%列跳跃
y2=y2+c;%列跳跃
end
x1=x1+r;%行跳跃
x2=x2+r;%行跳跃
end
[L,num]=bwlabel(BW,8);%区域标记
stats=regionprops(L,'BoundingBox');%得到包围矩形框
Bd=cat(1,stats.BoundingBox);
[s1,s2]=size(Bd);
mx=0;
fork=1:
s1
p=Bd(k,3)*Bd(k,4);%宽*高
ifp>mx&&(Bd(k,3)/Bd(k,4))<1.8
%如果满足面积块大,而且宽/高<1.8
mx=p;
j=k;
end
end
imshow(I);holdon;
rectangle('Position',Bd(j,:
),...
'EdgeColor','r','LineWidth',3);
title('标记图像');
CreateDatabase.m
functionT=CreateDatabase(TrainDatabasePath)
%函数功能:
把二维图像变为一维列向量用于构造T
%参数TrainDatabasePath是训练集路径
%返回值T是一个二维矩阵,若有P张M*N的图像,则T为M*N行P列的矩阵
TrainFiles=dir(TrainDatabasePath);%训练集路径
Train_Number=0;%训练集中图片数量初值
fori=1:
size(TrainFiles,1)%目录中除图片本身外,还保存有(.|..|Thnmbs.db)
ifnot(strcmp(TrainFiles(i).name,'.')|strcmp(TrainFiles(i).name,'..')|strcmp(TrainFiles(i).name,'Thumbs.db'))
Train_Number=Train_Number+1;%统计训练集中的图片,
end
end
T=[];
fori=1:
Train_Number%对每一张图片
str=strcat('\',int2str(i),'.jpg');%字符串拼接,得到\i.jpg
str=strcat(TrainDatabasePath,str);%字符串拼接,得到每一张训练图片的完整路径。
img=imread(str);%读入训练图片
img=rgb2gray(img);%转为灰度
[irowicol]=size(img);%得到图片大小
temp=reshape(img,irow*icol,1);%将二维图片转为一维向量
T=[Ttemp];%每张图片的信息做为T的一列
end
EigenfaceCore.m
function[m,A,Eigenfaces]=EigenfaceCore(T)
%用PCA原理决定人脸图像的最优特征,得到一个二维矩阵,包含训练图像向量,返回三个输出
%参数:
T包含训练集中所有的图像信息集合,
%返回值:
m:
(M*Nx1)训练均值;Eigenfaces:
(M*Nx(P-1))训练集协方差矩阵的特征向量;A:
(M*NxP)每一张图像与均值图像的方差矩阵
m=mean(T,2);%平均图像/行平均(每一副图像的对应象素求平均)m=(1/P)*sum(Tj's)(j=1:
P)
Train_Number=size(T,2);%列数
%计算机每一张图片到均值图像的方差
A=[];
fori=1:
Train_Number%对每一列
temp=double(T(:
i))-m;%每一张图与均值的差异
A=[Atemp];%方差矩阵
end
%降维
L=A'*A;%L是协方差矩阵C=A*A'的转置.
[VD]=eig(L);%对角线上的元素是L|C的特征值.V:
以特征向量为列的满秩矩阵,D:
特征值对角矩阵。
即L*V=V*D.
L_eig_vec=[];%特征值向量
fori=1:
size(V,2)%对每个特征向量
if(D(i,i)>1)%特征值大于1时
L_eig_vec=[L_eig_vecV(:
i)];%集中对应的特征向量
end
end
Eigenfaces=A*L_eig_vec;%计算机协方差矩阵C的特征向量,得到降维了的特征,A为每一张图像与均值图像的方差构成的矩阵
Recognition.m
functionOutputName=Recognition(TestImage,m,A,Eigenfaces)
ProjectedImages=[];%映射图像
Train_Number=size(Eigenfaces,2);%列,降维后,
fori=1:
Train_Number%对于每一个训练特征
temp=Eigenfaces'*A(:
i);
ProjectedImages=[ProjectedImagestemp];%得到L_eig_vec;
end
InputImage=imread(TestImage);%读入测试图片
temp=rgb2gray(InputImage);%取其中的一维来处理
[irowicol]=size(temp);%测试图片大小
InImage=reshape(temp,irow*icol,1);%转置后转为一维
Difference=double(InImage)-m;%L_eig_vec'
ProjectedTestImage=Eigenfaces'*Difference;%测试图像的特征向量
Euc_dist=[];
fori=1:
Train_Number%对每列
q=ProjectedImages(:
i);%取出训练图像
temp=(norm(ProjectedTestImage-q))^2;%欧氏距离
Euc_dist=[Euc_disttemp];%
end
[Euc_dist_min,Recognized_index]=min(Euc_dist);%得到差值最小的图像的索引号
OutputName=strcat(int2str(Recognized_index),'.jpg');%得到文件名
Example.m
%Asamplescript,whichshowstheusageoffunctions,includedin
%PCA-basedfacerecognitionsystem(Eigenfacemethod)
%
%Seealso:
CREATEDATABASE,EIGENFACECORE,RECOGNITION
clearall
clc
closeall
%Youcancustomizeandfixinitialdirectorypaths
TrainDatabasePath=uigetdir('D:
\人脸库\PCA_basedFaceRecognitionSystem',...
'Selecttrainingdatabasepath');
TestDatabasePath=uigetdir('D:
\人脸库\\PCA_basedFaceRecognitionSystem',...
'Selecttestdatabasepath');
prompt={'Entertestimagename(anumberbetween1to10):
'};
dlg_title='InputofPCA-BasedFaceRecognitionSystem';
num_lines=1;
def={'1'};
TestImage=inputdlg(prompt,dlg_title,num_lines,def);
TestImage=strcat(TestDatabasePath,'\',char(TestImage),'.jpg');
im=imread(TestImage);
T=CreateDatabase(TrainDatabasePath);
[m,A,Eigenfaces]=EigenfaceCore(T);
OutputName=Recognition(TestImage,m,A,Eigenfaces);
SelectedImage=strcat(TrainDatabasePath,'\',OutputName);
SelectedImage=imread(SelectedImage);
imshow(im)
title('测试图像');
figure,imshow(SelectedImage);
title('识别图像');
str=strcat('Matchedimageis:
',OutputName);
disp(str)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 matlab 识别 技术