基于肤色人脸检测可上传Word格式.docx
《基于肤色人脸检测可上传Word格式.docx》由会员分享,可在线阅读,更多相关《基于肤色人脸检测可上传Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
四是对特殊图像分割的研究越来越得到重视。
目前有很多针对立体图像、彩色图像、多光谱图像以及多视场图像分割的研究,也有对运动图像及视频图像中目标分割的研究,还有对深度图像、纹理(Texture)图像、计算机断层扫描(CT)、磁共振图像、共聚焦激光扫描显微镜图像、合成孔雷达图像等特殊图像的分割技术的研究。
五是对图像分割评价的研究和对评价系数的研究越来越得到关注.相信随着研究的不断深入,存在的问题会很快得到圆满的解决。
三.设计内容
1.实验流程图
2.设计原理
3.2.1RGB模型
这是最常用的颜色模型。
国际照明委员会(CIE)选择红色(波长
=700.0nm),绿(波长
=546.1nm),蓝色(波长
=435.8nm)三种单色光作为表色系统的三基色。
这个模型基于笛卡尔坐标系统,三个轴分别是R,G,B。
我们感兴趣的部分是个正方体。
原点对应黑色,离原点最远的顶点对应白色。
为方便我们将立方体归一化为单位立方体,这样所有R,G,B值都在区间[0,1]中。
图2.1RGB颜色模型
一般摄像系统都采用RGB色系坐标系、通常图像的颜色也用这一色系坐标系表示。
一般以RGB色系坐标系为基础描述其它色系坐标系,将其它色系坐标系的基色描述为RGB三色的线性或者非线性函数。
这是常用于彩色图像压缩时的一种颜色模型。
Y:
代表亮度;
Cb,Cr:
代表色差。
它充分考虑了色彩组成时RGB三色的重要因素。
RGB成份通过下列公式与YCbCr成份进行变换:
1、RGB到YCbCr的转换:
(2.2)
2.YCbCr到RGB的转换:
(2.3)
这里,
因为亮度信息包含在Y成份中,色度信息在Cb和Cr中。
因此可以轻松地去掉亮度信息。
获取图像过程中,人脸图像不可避免的会出现噪声。
图像中的噪声种类很多,对图像信号幅度和相位的影响十分复杂,有些噪声和图像信号互相独立不相关,有些是相关的,噪声本身之间也有些相关。
因此要减小图像中的噪声,必须针对不同情况采用不同的方法,否则难有令人满意的结果。
1.图像噪声
噪声可以理解为“妨碍人们感觉器官对所接受的信源信息理解的因素”。
图像在生成和传输过程中会常常受到各种噪声源的干扰和影响而使图像质量变差。
噪声干扰可以由电子成像系统传感器、信号传输过程、信道误差或者胶片颗粒性等造成。
为了抑制噪声改善图像质量,必须对图像进行去噪处理。
一般情况下,在空间域内可以用邻域平均来减小噪声。
在频率域,因为噪声频谱多在高频段,因此可以采用各种形式的低通滤波的方法来减小噪声。
各种噪声中尤以椒盐噪声最为常见。
椒盐噪声是指黑图像上的白噪声点,白图像上的黑噪声点,常由图像分割所产生。
对人脸图像而一言,图像中除了山于光照、灯光、阴影等形成的大块干扰之外,大部分噪声都是椒盐噪声,对于椒盐噪声,比较好的滤波方法是采用中值滤波的方法。
本文就是采用中值滤波来去除图像的噪声。
2.中值滤波
中值滤波是一种去除噪声的非线性处理方法,它是由Turky在1971年提出的。
起初中值滤波用于时间序列分析,后来被用于图像处理,在去噪复原中得到了较好的效果。
它在一定条件下,可以克服线性滤波器如最小均方滤波、平均值滤波等所带来的图像细节模糊的缺陷。
而且对滤除脉冲干扰及图像扫描噪声最为有效。
中值滤波在实际运算过程中并不需要图像的统计特性,这带来了不少方便。
中值滤波的基本原理是把数字图像或数字序列中某一点的值用该点的一个邻域中各点值的中值代替。
其中,中值的定义如下:
一组数
,把n个数按值的大小顺序排列为
,
(3.3)
y称为序列
的中值。
把一个点的特定长度或形状的邻域称为窗口。
在一维情形下,中值滤波器是一个含有奇数个像素的滑动窗口。
窗口正中间那个像素的值用窗口内像素值的中值代替。
设输入序列为
I为自然数集合或子集,窗口长度为n。
则滤波器输出为
(3.4)
其中
。
中值滤波器的工作步骤如下:
(1)将模板在图像中滑动,并将模板中心与图中某个像素位置重合;
(2)读取模板对应像素值,将这些灰度值从小到大排成一列;
(3)按公式(3.3),(3.4)得到模板输出值,将输出值赋给对应模板中心位置的像。
中值滤波的窗口形状和尺寸设计对滤波效果影响较大。
不同的图像内容和不同的应用要求,往往采用不同的窗口形状和尺寸。
中值滤波器的模板邻域越大,虽然消除噪声的能力越强,但是图像的细节也去除得越多。
为了在滤除噪声的同时保持图像的细节,本文实验采用了(3×
3)邻域的中值滤波。
噪声被滤出的同时,肤色区域仍能保持连贯的轮廓。
4.仿真实验
4.1YCbCr空间
光照强度的不同、人脸肤色的不同、图片背景的不同往往导致每张图片都具有自身的特色,将人脸区域从背景、衣着、发型等非人类区域中分割出来。
一般使用的RGB图片不适合于建立人脸皮肤模型,因为在RGB空间中,使用三基色(r,g,b)表示图片的亮度以及颜色。
在不同的环境下光照条件的改变,很难将肤色点从非肤色点中分离出来,如果在RGB图像上进行处理,将产生离散的肤色点,图片中间嵌有很多的非肤色点,提高了人脸检测的难度,容易产生不可靠的肤色分割。
解决方法是隔离颜色表达式中的亮度信息与色度信息,充分利用色度空间中肤色所表示出来的聚类性。
为此需要创造这样一个色彩空间,这个空间能把R、G、B所代表的色度信息与亮度信息分开表示。
色彩空间常用的的转换颜色模型主要有:
YIQ、YCbCr、HSV等。
这里,采用YCrCb色彩空间作为报告的设计空间[5]。
YCbCr色彩空间一般是在数字视频领域内应用于高品质的视频播放。
在这种色彩空间中,用单个分量Y来表示亮度信息,用两个色差分量Cb和Cr来存储彩色信息。
其中分量Cb表示蓝色分量和一个参考值的差,分量Cr表示红色分量和一个参考值的差[5]。
RGB转换为YCbCr所用的变换公式是:
转换函数是:
YCBCR=rgb2ycbcr(RGB)。
灰度图像就是一个数组描述,通常由一个uint8、uint16或双精度类型表示,是使用一个特殊的图像来表示图片中的所有像素[5]。
这个特殊图像就是灰度,一般表示为图像的最黑暗色到图像的最白亮色。
灰度图像不同于黑白图像,黑白图像只有0、1两种取值颜色,而灰度图像的实质是一个数据矩阵I,该矩阵中使用了一定范围内的灰度级来代表图片中的数据,每一个元素对应着图像中的一个像素点,灰度级的取值范围[0,255][5]。
(0代表黑色,255代表白色)
在数字图像中,不同的肤色在YCbCr彩色空间内呈现不同的聚类分布,分布在很小的范围,其色度上的区别远大于在亮度上的区别,同样的肤色在YCbCr彩色空间中,在不同的光照条件下只有亮度值Y会随之改变。
不同的肤色可以具有相同的2D模型G(m,V^2)。
为此笔者借助设定门限值实现肤色的区分。
人体肤色在YCbCr色度空间的灰度范围为:
f=imread('
0010.jpg'
);
Ori_Face=f;
copy=f;
img=f;
f=rgb2ycbcr(f);
%rgb空间转换为ycbcr空间
f_cb=f(:
:
2);
f_cr=f(:
3);
f=(f_cb>
=100)&
(f_cb<
=127)&
(f_cr>
=138)&
(f_cr<
=170);
%皮肤颜色在ycbcr色度空间的分布范围为:
100<
=cb<
=127,138<
=cr<
=170
figure
(1);
imshow(f);
4.2噪声消除
在转换后图片出现了噪声,这里采用开闭运算的方法消除噪声。
这里涉及到了形态学描述。
膨胀是二值图像的形态操作,具体功能是使图像变得粗长。
其举例程序与结果如下:
se=strel('
square'
%%构建一个3*3单位矩阵作为结构元素
f=imopen(f,se);
%%图片开运算
f=imclose(f,se);
%%图片闭运算
figure
(2),imshow(f);
%%消除噪声
4.3图像填孔
图像的填孔处理是将一些不必要的小孔填充掉,使得图像更加简单,易于处理[6]。
其小孔是指较亮像素包围的暗像素区。
标记一副图像为m,该图像的边缘部分的值为fm,其余部分的值为0:
则图像填孔处理结果为:
调用程序为:
g=imfill(f,'
holes'
)
4.4图像重构
在形态学中,腐蚀通常会除去小的对象,而随后的膨胀往往会还原所保留对象的形状,然而,这种还原的精度取决于形状和结构元素之间的相似性。
在这里,采用重构做开运算,用于恢复图片之后的对象形状[7]。
图像重构是数字图像处理的重要组成部分,其工作原理是以选定图像的图像特征对标记图像进行一系列的膨胀运算,通过运算对选定图像中的重要部分起到强调作用。
标记图像的峰值作为膨胀运算的起始点,结果重复的膨胀过程,以图像的像素值稳定作为终止[8]。
se1=strel('
8);
f=imerode(f,se1);
f=imdilate(f,se1);
figure(4),imshow(f);
区域连通
4.5脸部提取
RGB=cat(3,Rimgrgb,Gimgrgb,Bimgrgb);
figure(6),imshow(RGB);
X(:
1)=double(imgrgb(:
1)).*f;
2)=double(imgrgb(:
2)).*f;
3)=double(imgrgb(:
3)).*f;
X_RGB=uint8(X);
figure(5)
imshow(X_RGB);
title('
脸部图像提取图'
4.6人脸区域确定
在录入的真彩图片中,人脸的最大长度(指在图片中的距离)为2.00厘米,宽度在1.3厘米左右浮动。
如果只是简单的对人脸的长度,宽度进行限定,通过阈值进行排除,所得到的程序是不能适用到图片上的所有部位。
对此,可使用长宽比,借由比值来第一步限定人脸区域。
在长宽比限定的基础上,可以对剩余的物体进行第二步骤,在录入的RGB图片中,人脸的大小是有一定限制的,在得到的灰度图像上,人脸的灰度维数通过多次的设定修改,最终限定在14000一下,凡大于这个数值的问题均归类到非人脸区域。
如果图片中的物体,它的长宽比符合条件,维数符合条件,但是它的边缘轮廓有内陷外凸,拉长变形等奇怪的形状,一样是不属于人脸的范畴。
对此,笔者对物体矩形面积与实际面积的比例设定一个阈值,借由这个阈值进行最终的人脸区域确定。
==
D=rgb2gray(A);
[mn]=size(D);
Htou=double(zeros(m,1));
Hmx=0;
IsHmn=1;
Hmn=0;
fori=1:
m
Vx(i)=i;
forj=1:
n
Htou(i)=Htou(i)+f(i,j);
end
ifHtou(i)>
10&
&
IsHmn==1
Hmn=i
IsHmn=2;
ifHtou(i)<
IsHmn==2
Hmx=i
IsHmn=0;
end
subplot(4,3,8),plot(Htou,Vx);
Vtou=double(zeros(n,1));
Vmx=0;
IsVmn=1;
Vmn=0;
forj=1:
Vy(j)=j;
fori=1:
Vtou(j)=Vtou(j)+f(i,j);
ifVtou(j)>
IsVmn==1
Vmn=j
IsVmn=2;
ifVtou(j)<
IsVmn==2
Vmx=j
IsVmn=0;
subplot(4,3,9),plot(Vy,Vtou);
fori=Hmn:
Hmx
j=Vmn;
RA1(i,j)=255;
GA1(i,j)=0;
BA1(i,j)=0;
j=Vmx;
forj=Vmn:
Vmx
i=Hmn;
i=Hmx;
RGB1=cat(3,RA1,GA1,BA1);
figure,imshow(RGB1)
5结论
人脸识别容易受光照条件、面部表情、背景等影响,为此,我们在第一步就将RGB空间转换为YCbCr空间,剔除光照因素,转换灰度图像剔除背景因素,之后的填孔重构等一系列动作则把面部表情等影响排除,只留下我们需要的脸型。
再之后通过测量、计算一步步的限定长宽比、目标面积的范围限定来剔除干扰区域,从而确定脸部区域。
最后利用边缘检测给予识别出来的脸部加框,实验结束。
从结果上看,我们使用的方法是有一定的局限性。
首先,图片所拍摄下的人脸必须是正对着摄像机镜头,对于俯视,侧视的拍摄并识别人脸,在目前看来仍然是一个世界性的研究课题。
其次,我们所使用的方法不能有效的将人脸锁骨部分在图片中剔除,因为当真彩图片转换为YCbCr空间时人脸的下颚和脖颈,锁骨部分是默认为不具有层次感的,直接作为一张灰度图片存储到计算机中进行后续处理,这是我们还需改进的地方。
对基于matlab人脸识别技术从理论和实践上分别给予了浅层次的探讨和一定的研究。
对基于matlab的人脸初识别做了详细的综述。
深入研究了对人脸识别的一系列流程。
主要取得以下成果:
(1)在Windows7系统下用matlab数学软件实现了人脸图像识别。
(2)对图像的预处理上,使用了转换YCbCr空间、灰度空间、填孔重构。
(3)采用剔除法将不符合条件的面积剔除掉,效果很好。
这里实现的是一种基于肤色分割和匹配的人脸识别,实验中采用的图片取自数码相机,从结果看被拍者的脸型、发型、面部表情、着装背景等都不能对人脸造成影响。
imgrgb=imread('
0008.jpg'
RA1=imgrgb(:
1);
GA1=imgrgb(:
BA1=imgrgb(:
[m,n,c]=size(imgrgb);
Rimgrgb=imgrgb(:
Gimgrgb=imgrgb(:
Bimgrgb=imgrgb(:
imgrgb3=rgb2ycbcr(imgrgb);
y=imgrgb3(:
cb=imgrgb3(:
cr=imgrgb3(:
cb=double(cb);
cr=double(cr);
y=double(y);
bwycbcr=zeros(m,n);
ify(i,j)<
125
cb1=108+(125-y(i,j))*10/109;
cr1=154-(125-y(i,j))*10/109;
wcb=23+(y(i,j)-16)*23.97/109;
wcr=20+(y(i,j)-16)*18.76/109;
cb1=(cb(i,j)-cb1)*46.97/wcb+cb1;
cr1=(cr(i,j)-cr1)*38.76/wcr+cr1;
elseify(i,j)>
188
cb1=108+(y(i,j)-188)*10/47;
cr1=154+(y(i,j)-188)*22/47;
wcb=14+(235-y(i,j))*32.97/47;
wcr=10+(235-y(i,j))*28.76/47;
else
cb1=cb(i,j);
cr1=cr(i,j);
x1=[-0.8190.574]*[cb1-109.38;
cr1-152.02];
y1=[-0.574-0.819]*[cb1-109.38;
if(x1-1.60).^2/644.6521+(y1-2.41).^2/196.8409<
=1
bwycbcr(i,j)=1;
elsebwycbcr(i,j)=0;
Rimgrgb(i,j)=255;
Gimgrgb(i,j)=255;
Bimgrgb(i,j)=255;
end
sum=0;
iptsetpref('
ImshowBorder'
'
tight'
)%%%设置图像处理工具箱的参数
f=imread('
Ori_Face=f;
copy=f;
img=f;
f=rgb2ycbcr(f);
f_cb=f(:
f_cr=f(:
f=(f_cb>
figure
(1);
imshow(f);
se=strel('
f=imopen(f,se);
f=imclose(f,se);
figure
(2),imshow(f);
f=imfill(f,'
%%%填孔处理
figure(3),imshow(f);
se1=strel('
f=imerode(f,se1);
f=imdilate(f,se1);
figure(4),imshow(f);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%区域连通
RGB=cat(3,Rimgrgb,Gimgrgb,Bimgrgb);
figure(5);
imshow(RGB);
figure(6)
subplot(1,2,1),plot(Htou,Vx);
subplot(1,2,2),plot(Vy,Vtou);
参考文献:
[1]姚敏.数字图像处理[M].机械工业出版社,2006:
2.
[2]王爱民,沈兰荪.图像分割研究综述[J].测控技术,2000,19(5):
1-5.
[3]张德丰.详解MATLAB数字图像处理[M].北京:
电子工业出版社,2010,7:
249.
[4]杨杰.数字图像处理及MATLAB实现[M].北京:
电子工业出版社,2010,2:
149-150.
[5]张洪刚,陈光,郭军编著.图像处理与识别[M].北京:
北京邮电大学出版社,2006:
102-103.
[6]韩晓军.数字图像处理技术与应用[M].北京:
电子工业出版社,2009,7:
38.
[7]张化光,刘鑫蕊,孙秋野编著.MATLAB/SIMULINK实用教程[M].北京:
人民邮电出版社,2009,3:
235.