数字图像处理技术基于Matlab的人脸检测.docx
- 文档编号:21059551
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:19
- 大小:421.72KB
数字图像处理技术基于Matlab的人脸检测.docx
《数字图像处理技术基于Matlab的人脸检测.docx》由会员分享,可在线阅读,更多相关《数字图像处理技术基于Matlab的人脸检测.docx(19页珍藏版)》请在冰豆网上搜索。
数字图像处理技术基于Matlab的人脸检测
2013-2014第
(2)学期理学院实践教学
成绩评定表
实践教学项目
数字图像处理
专业
……
学生姓名
……
班级学号
……
评
语
组长签字:
成绩
日期
2013-2014第
(2)学期理学院实践教学
任务书
学院
……
专业
……
学生姓名
……
班级学号
……
实践教学项目
数字图像处理
实践题目
基于Matlab的人脸检测
实践教学要求与任务:
1.能对选题做理论分析,讨论理论可行性。
2.能设计一套切实可行的实验方案,能够验证预期达到的效果。
4.能利用计算机获取数字图像数据。
5、能编程实现对数字图像数据进行处理、并能够对数据处理结果进行分析。
6、如果数据处理结果不够理想,能够找到问题所在,并提出改进意见。
7、能按要求格式撰写课程设计报告。
报告要求格式、正确思路清晰、结构完整、实验数据真实、分析结论正确。
对课程设计总体方案要进行详细地说明
8、独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容。
9、在设计过程中,要严格要求自己,树立严肃、严密、严谨的科学态度,必须按时、按质、按量完成课程设计。
工作计划与进度安排:
12周周五—14周周一:
选题、收集资料
14周周一—15周周五:
撰写开题报告
15周周五—16周周五:
设计、实验、数据分析
16周周五—17周周四:
撰写报告
17周周五提交报告。
指导教师:
年月日
专业负责人:
年月日
学院院长:
年月日
摘要
人脸识别是一门新兴的科研项目,起始于上个世纪60年代。
经过几十年的发展,现已成为一项最有上升潜力的人体特征识别技术。
具有广泛的应用前景,它的工作原理是借由的生物特征来确认生物个体,报告利用MATLAB软件实现人脸信息的检测与识别,在输入的整幅图像中寻找人脸区域,把图像分割成两个部分——人脸区域和非人脸区域,从而为后续的应用做准备。
报告利用YCbCr空间以及二值图像实现人脸边缘分割,将真彩图像转换为YCbCr图像,根据面部肌肤在YCbCr色度空间的分布范围,设定门限阀值,实现人脸区域与非人脸区域的分割,通过膨胀腐蚀等一系列运算剔除干扰因素,再结合长宽比、目标面积等计算方法在图像中分割出人脸区域,经试验,该方法能够排除面部表情、发型、衣着背景等干扰而确定人脸区域。
关键词:
Matlab程序;YCbCr色度空间;灰度图像;人脸检测
目录
摘要3
一、绪论5
1.1本文研究的问题5
1.2Matlab基本功能介绍6
二、人脸识别的设计方案与理论分析7
2.1YCbCr色彩空间变换7
2.2灰度图像转换7
2.3灰度图像噪声消除9
2.4灰度图像填孔10
2.5灰度图像重构10
2.6灰度图像边缘检测11
2.7人脸区域确定12
三、人脸识别的Matlab实现14
四、结论17
参考文献18
一、绪论
早在20世纪六十年代,人脸识别的研究就以经开始起步,到了今天,这项研究已经越发的成熟。
根据计算机的发展规模可将其分为三个阶段:
在1963年至1991年期间,人脸识别只是作为一种针对事物外形,现象进行识别描述的技术来研究,所针对的人脸图像具有较强的约束条件,比如不提供图像背景或图像背景不会对识别产生干扰,再其次用于研究的图片中人脸部位总是处于任意获得的位置,因此在这一时期人脸识别技术还未受到人们的重视。
之后的1991年到1997年期间,借助计算机技术的革新以及各类工程软件的出现,人脸识别技术得到了喷发式的发展。
在商业领域上的应用被人们不断的发掘出来,由此诞生了若干具有代表性的人脸识别算法,其中最为著名的便是美国军方的FaceIt系统。
1998年至今,电子商务领域,安全领域等方面对人脸识别技术的创新需求越发迫切。
人脸识别研究的重点也逐渐倾向于人脸形体,图像亮度等问题。
与此同时,人脸识别的商业应用进一步提高,进入21世纪,人脸识别技术的研发硕果越发丰盛,活动图像专家组(MPEG)已将人脸检测算法征集进了人脸识别草案小组的范围之内。
清华大学,北京工业大学,中国科学院计算计研究所和自动化研究所等,人脸识别技术已经成为一项世界性的课题受到世人的高度关注,其技术上的创新将会给人们的生活带来方方面面的便利。
1.1本文研究的问题
本文介绍了人脸图像识别中所应用MATLAB对图像进行预处理,对图像进行处理,通过实例来应用Matlab图像处理功能,对某一特定的人脸图像处理,进而应用到人脸识别系统。
本文在总结分析人脸识别系统中几种常用的图像预处理方法基础上,利用MATLAB实现了一个集多种预处理方法于一体的基于肤色的人脸图像预处理仿真系统。
1.2Matlab基本功能介绍
图像是人类获取信息、表达信息和传递信息的重要手段。
利用计算机对图像进行去除噪声、增强、复原、分割、提取特征等的理论、方法和技术称为数字图像处理。
数字图像处理技术已经成为信息科学、计算机科学、工程科学、地球科学等诸多方面的学者研究图像的有效工具。
数字图像处理主要包括图像变换、图像增强、图像编码、图像复原、图像重建、图像识别以及图像理解等内容。
1、图像处理的基本操作
读取和显示图像可以通过imread()和imshow()来实现;图像的输出用imwrite()函数就可以很方便的把图像输出到硬盘上;另外还可以用imcrop()、imrisize()、imrotate()等来实现图像的裁剪、缩放和旋转等功能。
2、图像类型的转换
Matlab支持多种图像类型,但在某些图像操作中,对图像的类型有要求,所以要涉及到对图像类型进行转换。
Matlab7.0图像处理工具箱为我们提供了不同图像类型相互转换的大量函数,如mat2gray()函数可以将矩阵转换为灰度图像,rgb2gray()转换RGB图像或颜色映像表为灰度图像。
在类型转换的时候,我们还经常遇到数据类型不匹配的情况,针对这种情况,Matlab7.0工具箱中,也给我们提供了各种数据类型之间的转换函数,如double()就是把数据转换为双精度类型的函数。
3、边缘检测
数字图像的边缘检测是图像分割、目标区域识别、区域形状提取等图像分析领域十分重要的基础,也是图像识别中提取图像特征的一个重要属性。
边缘检测算子可以检查每个像素的邻域并对灰度变化率进行量化,也包括对方向的确定,其中大多数是基于方向导数掩模求卷积的方法。
常用的有Sobel算子,Prewitt算子,Roberts算子,Log算子等。
Matlab7.0工具箱中提供的edge()函数可以进行边缘检测,在其参数里面,可以根据需要选择合适的算子及其参数。
二、人脸识别的设计方案与理论分析
2.1YCbCr色彩空间变换
光照强度的不同、人脸肤色的不同、图片背景的不同往往导致每张图片都具有自身的特色,将人脸区域从背景、衣着、发型等非人类区域中分割出来。
一般使用的RGB图片不适合于建立人脸皮肤模型,因为在RGB空间中,使用三基色(红绿蓝)表示图片的亮度以及颜色。
在不同的环境下光照条件的改变,很难将肤色点从非肤色点中分离出来,如果在RGB图像上进行处理,将产生离散的肤色点,图片中间嵌有很多的非肤色点,提高了人脸检测的难度,容易产生不可靠的肤色分割。
解决方法是隔离颜色表达式中的亮度信息与色度信息,充分利用色度空间中肤色所表示出来的聚类性。
为此需要创造这样一个色彩空间,这个空间能把R、G、B所代表的色度信息与亮度信息分开表示。
色彩空间常用的转换颜色模型主要有:
YIQ、YCbCr、HSV等。
这里,采用YCbCr色彩空间作为报告的设计空间。
YCbCr色彩空间一般是在数字视频领域内应用于高品质的视频播放。
在这种色彩空间中,用单个分量Y来表示亮度信息,用两个色差分量Cb和Cr来存储彩色信息。
其中分量Cb表示蓝色分量和一个参考值的差,分量Cr表示红色分量和一个参考值的差。
RGB转换为YCbCr所用的变换公式是:
Matlab的转换函数是:
YCBCR=rgb2ycbcr(RGB)。
2.2灰度图像转换
灰度图像就是一个数组描述,通常由一个uint8、uint16或双精度类型表示,是使用一个特殊的图像来表示图片中的所有像素。
这个特殊图像就是灰度,一般表示为图像的最黑暗色到图像的最白亮色。
灰度图像不同于黑白图像,黑白图像只有0、1两种取值颜色,而灰度图像的实质是一个数据矩阵,该矩阵中使用了一定范围内的灰度级来代表图片中的数据,每一个元素对应着图像中的一个像素点,灰度级的取值范围[0,255]。
(0代表黑色,255代表白色)。
在数字图像中,不同的肤色在YCbCr彩色空间内呈现不同的聚类分布,分布在很小的范围,其色度上的区别远大于在亮度上的区别,同样的肤色在YCbCr彩色空间中,在不同的光照条件下只有亮度值Y会随之改变。
不同的肤色可以具有相同的2D模型G(m,V^2)。
为此借助设定门限值实现肤色的区分。
本文,我们用图2.1为例进行试验:
图2.1实验原图图图2.2经YCbCr二值化后的图像
由于人体肤色在YCbCr色度空间的灰度范围为:
进行如下处理:
Sum=0;
iptsetpref('ImshowBorder,'tight')
f=imread('d:
/jiuge.jpg');
Ori_Face=f;
Copy=f;
img=f;
f=rgb2ycbcr(f);
f_cb=f(:
:
2);
f_cr=f(:
:
3);
f=(f_cb>=100)&(f_cb<=127)&(f_cr>=138)&(f_cr<=170);
figure
(1);imshow(f);imwrite(f,’d:
/jiuge2.jpg’,‘jpg’)
运行结果如图2.2。
2.3灰度图像噪声消除
在转换后图片出现了噪声,这里采用开闭运算的方法消除噪声。
这里涉及到了形态学描述。
腐蚀是二值图像的形态操作,具体作用是将图像变得细小,腐蚀的大小与程度取决于事先所设定的结构元素。
程序与结果如下:
i=imread('d:
/jiuge2.jpg');%载入图片
imshow(i);%显示图片
se=strel('line',5,3);%生成线形结构元素
i2=imerode(i,se);%用线形结构元素来进行腐蚀操作
imshow(i2)%显示腐蚀结果
运行结果如图2.3。
图2.3经腐蚀处理后的图像
开启运算就是将膨胀与腐蚀通过各种方式进行整合的运算,其间使用相同的结构元素。
在数字图像处理中的作用通常是起到平滑图像轮廓,消除图像边缘毛刺,截断狭窄的山谷。
举例程序与结果如下:
i=imread('d:
/jiuge2.jpg');
imshow(i)%显示原图
se=strel('square',3);%定义方形结构元素
i2=imopen(i,se);%进行开运算
imshow(i2)
运行结果如图2.4。
图2.4经开启运算后的图像图2.5经闭合运算后的图像
闭合运算同样能平滑图像边缘,与开启运算相反,它一般能融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。
程序如下:
i=imread('d:
/jiuge2.jpg');
imshow(i)%显示原图
se=strel('square',9);%定义方形结构元素
i2=imclose(i,se);%进行闭运算
imshow(i2)
运行结果如图2.5。
2.4灰度图像填孔
图像的填孔处理是将一些不必要的小孔填充掉,使得图像更加简单,易于处理。
其小孔是指较亮像素包围的暗像素区。
标记一副图像为m,该图像的边缘部分的值为fm,其余部分的值为0:
调用程序为:
g=imfill(f,'holes')
2.5灰度图像重构
在形态学中,腐蚀通常会除去小的对象,而随后的膨胀往往会还原所保留对象的形状,然而,这种还原的精度取决于形状和结构元素之间的相似性。
在这里,采用重构做开运算,用于恢复图片之后的对象形状。
图像重构是数字图像处理的重要组成部分,其工作原理是以选定图像的图像特征对标记图像进行一系列的膨胀运算,通过运算对选定图像中的重要部分起到强调作用。
标记图像的峰值作为膨胀运算的起始点,结果重复的膨胀过程,以图像的像素值稳定作为终止。
程序与结果如下:
i=imread('d:
/jiuge2.jpg');%载入图片,作为掩模图片
imshow(i)
fe=imerode(i,ones(5,1));%用线形结构元素进行腐蚀操作
fo=imopen(i,ones(5,1));%用线形元素做开运算
fobr=imreconstruct(fe,i);%使用线形元素由重构做开运算
imshow(fobr)
se=strel('square',8);
f=imerode(f,se);
f=imdilate(f,se);
imshow(f);
运行结果如图2.6
图2.6图像重构图2.7对二值化后图像的边缘检测
2.6灰度图像边缘检测
对于一副图像,人们所需要提取图片与背景的分界线就是边缘。
不断变化的灰度值产了边缘,边缘存在两个不相同的灰度区域之间。
边缘检测是一种提取边缘点集的算法,使用Matlab自带的边缘增强算子,将图像的边缘部分加以突出,通过定义图像边缘以及设定阀值最终提取阀值。
使用函数bwperim提取包含在图像f中的对象的边界,其语法格式为:
bw=bwperim(A,conn)
其中A为输入的二值图像;conn为二位图像的领域类别,取值4或8(决定于希望的是4连接还是8连接,一般默认为8)。
程序如下:
i=imread('d:
/jiuge2.jpg');%装入图片,
bw=im2bw(i);%变换为二值图像
f=bwperim(bw);%提取周长
imshow(f)%显示结果
运行的结果如图2.7。
2.7人脸区域确定
在录入的真彩图片中,人脸的最大长度(指在图片中的距离)为2.00厘米,宽度在1.3厘米左右浮动。
如果只是简单的对人脸的长度,宽度进行限定,通过阈值进行排除,所得到的程序是不能适用到图片上的所有部位。
对此,可使用长宽比,借由比值来第一步限定人脸区域。
在长宽比限定的基础上,可以对剩余的物体进行第二步骤,在录入的RGB图片中,人脸的大小是有一定限制的,在得到的灰度图像上,人脸的灰度维数通过多次的设定修改,最终限定在1400一下,凡大于这个数值的问题均归类到非人脸区域。
如果图片中的物体,它的长宽比符合条件,维数符合条件,但是它的边缘轮廓有内陷外凸,拉长变形等奇怪的形状,一样是不属于人脸的范畴。
对此,笔者对物体矩形面积与实际面积的比例设定一个阈值,借由这个阈值进行最终的人脸区域确定。
人脸区域的确定方法如下:
(1)在输入的真彩照片中,人脸的长宽比例应在0.75到1.75之间,凡不在此范围内的均认为是非人脸区域,删除之。
(2)在符合上述条件下,若目标区域面积过大,则认定为非人脸区域,删除。
经测算,在二值图像中,人脸维数应小于1400.
(3)人脸部位的矩形面积设定area_sq=人脸区域长度*宽度,人脸实际面积设定area,当area/area_sq值小于0.65,则认定该部位不是人脸区域。
条件1排除了图片中与人脸肤色相近但长宽不符合要求的区域。
条件2剔除了比例相同但面积不符合的区域,第二次对图片进行划分,赛选。
条件3借助最大和实际面积的比值,将色调相近的四肢等部位去除。
具体程序如下:
[L,num]=bwlabeln(f,4);
fori=1:
num;
[r,c]=find(L==i);%返回矩阵X中非零元素的行和列的索引
r_temp=max(r)-min(r);%计算长度
c_temp=max(c)-min(c);%计算宽度
temp=size(r);%计算数组r的每一维大小赋值给temp文件
sum=sum+temp
(1);
area_sq=r_temp*c_temp;%计算矩形面积
area=size(find(L==i),1);%目标区面积
ratio=area/area_sq;%将结果赋值于ratio
if(r_temp/c_temp<0.75)|(r_temp/c_temp>1.75)|temp
(1)<1400|ratio<0.65
forj=1:
temp
(1);
L(r(j),c(j))=0;
end
else
continue;
end
end
三、人脸识别的Matlab实现
以上已经介绍了人脸识别的基本思路和方法,在上面介绍的处理方法中,各步的处理都是在对图像二值化后的图像的基础上进行的,以直观的看出各种处理所带来的处理效果,只要将以上各种处理的方法一步一步地链接起来,每一步都是在上一步的基础上进行处理,这样就能得到我们想要的图像。
这里,我们还是以图2.1为例,进行Matlab仿真,其程序为:
sum=0;
f=imread('d:
/jiuge.jpg');
I=rgb2gray(f);
iptsetpref('ImshowBorder','tight')
Ori_Face=f;
copy=f;
img=f;
f=rgb2ycbcr(f);
f_cb=f(:
:
2);
f_cr=f(:
:
3);
f=(f_cb>=100)&(f_cb<=127)&(f_cr>=138)&(f_cr<=170);
figure
(1);imshow(f);
se=strel('square',3);
f=imopen(f,se);
f=imclose(f,se);
figure
(2),imshow(f);
f=imfill(f,'holes');
figure(3),imshow(f);
se1=strel('square',8);
f=imerode(f,se1);
f=imdilate(f,se1);
figure(4),imshow(f);
[L,num]=bwlabeln(f,4);
fori=1:
num;
[r,c]=find(L==i);
r_temp=max(r)-min(r);
c_temp=max(c)-min(c);
temp=size(r);
sum=sum+temp
(1);
area_sq=r_temp*c_temp;
area=size(find(L==i),1);
ratio=area/area_sq;
if(r_temp/c_temp<0.75)|(r_temp/c_temp>1.4)|temp
(1)<1400|ratio<0.55
forj=1:
temp
(1);
L(r(j),c(j))=0;
end
else
continue;
end
end
L=bwperim(L,8);
L=uint8(L);
z=find(L(:
)>0);L(z)=255;
figure(5),imshow(L);
BW=im2bw(L);
M=bwlabel(BW,8);
BB=regionprops(M,'BoundingBox');
BB1=struct2cell(BB);
BB2=cell2mat(BB1);
[s1s2]=size(BB2);
mx=0;
fork=3:
4:
s2-1
p=BB2(1,k)*BB2(1,k+1);
ifp>mx&(BB2(1,k)/BB2(1,k+1))<1.8
mx=p;
j=k;
end
end
figure(6),imshow(L);
rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','g')
figure(7),imshow(img);
holdon;
rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','g')
这些程序的每次处理都是在上一个处理步骤的基础上,连成一个完整的程序,检测出头像后就会显示出头像的边缘,然后通过计算,在人脸的周围绘制出一个矩形框,并显示在原图上。
以下是经过仿真得到的结果:
figure(7)为人脸识别结果,可见,该方案的识别效果良好,可以识别出人脸的位置。
figure
(1)figure
(2)
figure(3)figure(4)
figure(5)figure(6)
figure(7)(人脸识别结果)
四、结论
人脸识别容易受光照条件、面部表情、背景等影响,为此,在第一步就将RGB空间转换为YCbCr空间,剔除光照因素,转换灰度图像剔除背景因素,之后的填孔重构等一系列动作则把面部表情等影响排除,只留下符合要求的脸型。
再之后通过测量、计算一步步的限定长宽比、目标面积的范围限定来剔除干扰区域,从而确定脸部区域。
最后利用边缘检测给予识别出来的脸部加框,实验结束。
从结果上看,本文使用的方法是有一定的局限性。
首先,图片所拍摄下的人脸必须是正对着摄像机镜头,对于俯视,侧视的拍摄并识别人脸,在目前看来仍然是一个世界性的研究课题。
其次,如结果图左起第一位所示,笔者所使用的方法不能有效的将人脸锁骨部分在图片中剔除,因为当真彩图片转换为YCbCr空间时人脸的下颚和脖颈,锁骨部分是默认为不具有层次感的,直接作为一张灰度图片存储到计算机中进行后续处理,这是还需改进的地方,所以最好用于识别穿高领的人脸,就像本文所选的图片。
对基于Matlab人脸识别技术从理论和实践上分别给予了浅层次的探讨和一定的研究。
在对国内外文献大量阅读的基础上,对基于Matlab的人脸初识别做了详细的综述。
深入研究了对人脸识别的一系列流程。
得到以下结果:
(1)在Windows8.1系统下用Matlab数学软件实现了人脸图像识别。
(2)对图像的预处理上,使用了转换YCbCr空间、灰度空间、填孔重构。
(3)采用剔除法将不符合条件的面积剔除掉,效果很好。
这里实现的是一种基于肤色分割和匹配的人脸识别,实验中采用的图片取自空间相册,从结果看被拍者的脸型、发型、面部表情、着装背景等都不能对人脸造成影响。
基于Matlab数字图像处理与识别系统其实是一个范围很大的应用系统,作者在此只是有针对性、有选择地进行了一些开发和实现。
参考文献
[1]祝磊,朱善安.人脸识别的一种新的特征提取方法[J].计算机学报,2007,34(6):
122-1251
[2]何东风,凌捷.人脸识别技术综述[J].计算机学报,2003,13(12)75-78
[3]YounusFazl-e-BasitJaved和UsmanQayyum”,采用直方图的人脸识别和处理”,第三阶段仅相关新兴技术研报告。
[4]何国辉,甘俊英.PCA-LDA算法在性别鉴别中的应用[J].中国图像图形学报,2006,32(19):
208-211.
[5]王聃,贾云伟,林福严.人脸识别系统中的特征提取[J].自动化学报,2005,21(7-3).
[6]张俭鸽,王世卿,盛光磊.基于小波和DFB-PCA的人脸识别算法研究[J].自动化学报,2007,23(2-1).
[7]曹林,王东峰,刘小军,邹谋炎.基于二维Gabor小波的人脸识别算法[J].电子学报,2006,28(3)490-494
[8]焦峰,山世光,崔国勤,高文,李锦涛.基于局部特征分析的人脸识别方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 技术 基于 Matlab 检测