数字图像处理项目报告

  • 格式:docx
  • 大小:883.99 KB
  • 文档页数:12

《数字图象处理》课程项目

实施报告

题目 ( A ): 人脸面部自动定位与分割

任课教师: **

组 长:

成 员:

成 员:

成 员:

成 员:

联系方式:

人脸面部自动定位与分割 实施报告

2018年1月31日星期三

1. 课程项目实施方案

图像分割是图像处理的主要目标,本项目综合利用图像采集、图像增强、彩色图像处理、图像分割等知识,根据人脸肤色检测及脸部五官形状,设计实现人脸照片中的人脸面部检测与五官分割。

1.1 项目要求

1)人脸图像的采集

2)人脸图像增强:去噪、均衡、尺寸归一化、倾斜矫正等

3)脸部肤色区域分割:采用肤色模型检测与分割人脸肤色区域

4)脸部五官区域分割:采用算法将人脸分割成眉毛、眼睛、鼻子、嘴巴等多个区域

1.2 设计思想

1)前期准备

我们组每个人拍摄一张各人的人头照片(含头发、脸部及部分颈部),照片质量故意差一些,比如光线较暗或较亮环境下所拍摄的照片,含有较强的噪声。

我们先对图片进行旋转(把倾斜的头部旋正),然后提取出人头部分(含头发、脸部及部分颈部)。

完成所有组员照片的去噪和质量增强(去过曝光、光线补偿),并通过直方图比对观察变化。对所有的人头照片进行尺寸的归一化(统一变成256×y的尺寸)。我们还做了一个锐化图像功能,观察他对分割结果的影响。

2)人脸肤色区域检测

通过查阅相关资料以及参考文献,设计人脸区域的检测与分割算法,并用程序实现该算法,得到脸部区域的分割图像,脸部区域不包括头发、脖子和背景。

3)五官识别(积分投影)

人脸部五官的眉毛、眼睛、鼻子、嘴巴等基本都是水平方向狭长分布,水平方向的灰度和色度变化大。

基于五官的亮度都较脸部其他部分低,通过水平灰度投影通常会在眉毛、眼睛、鼻子、嘴巴等处会产生局部低点,由此再结合五官分布的先验知识来确定眉毛、眼睛、鼻子、嘴巴的垂直位置,然后再在相应位置附近找出各器官的水平位置。

找出眼睛大致所在位置,通过水平投影与垂直投影,找出两者的交界点,这两点即可认为是眼球所在坐标。

以眼睛为分割线,将两部分分为上下两部分,再分别通过水平投影,找出嘴、鼻、眉等分布位置。 通过查阅相关资料以及参考文献,设计人脸五官区域分割算法,并用程序实现该算法,得到人脸五官区域的分割图像,包括嘴巴、鼻子、左眼、右眼、左眉毛、右眉毛六个区域。

1.3指标

1)功能实现:实现功能完整,基本符合要求;

2)性能指标:检测与分割较为准确性、运行速度较快;

3)工程规范:要注意程序的规范性、可靠性、操作便利性;

4)理论知识:项目算法理论正确,分析过程要清晰。

1.4实现方式与算法

1)图像旋转

彩色图像旋转后,原图像的四个角点应在新图像的四条边上(即新图像的大小是包含原图像旋转后的最小矩形);旋转的角度可以是 0~ 360度;函数的调用形式是 img_rotate=xuanzhuan(img1,angle)。

下图显示新图像与原图像的长宽关系,注意如果旋转角度是120度,则需要取绝对值。

下图显示原图像旋转后的点与原图像点的对应关系,以按此公式求得新图像每一点对应的原图像点。

旋转后,由于图像点可能是非整数,出现像素空洞问题,故需要进行插值法,选用最近邻插值法。 主要算法:

for x=1:w2

for y=1:h2

x0 = uint32(x*cos_val + y*sin_val -0.5*w2*cos_val-0.5*h2*sin_val+0.5*w);

y0= uint32(y*cos_val-x*sin_val+0.5*w2*sin_val-0.5*h2*cos_val+0.5*h);

x0=round(x0); %最邻近插值

y0=round(y0); %最邻近插值

if x0>0 && y0>0&& w >= x0&& h >= y0

img_rotate(y,x,:) = img1(y0,x0,:);

end

end

end

2)提取人头

主要算法:

[x,y] = ginput(2); %确定图像上的两点利用ginput函数,返回值是两点的坐标

pic_1 = imcrop(pic,[x(1),y(1),abs(x(1)-x(2)),abs(y(1)-y(2))]);

%利用imcrop函数对图像进行切割,输入参数是一个定点坐标,

%从该定点出发向右abs(x(1)-x(2)),向下abs(y(1)-y(2))的区域进行切割

3)去过曝光/光线补偿

因为在RGB三个分量进行简单的直方图变换或均衡会使得彩色图像颜色异变。所以我们转化成HIS三个分量,只在I(亮度分量)上进行变换,并且使用了一个imadjust灰度变换函数,通过调节gamma系数进行调整亮度实现,去过曝光以及光线补偿。

主要算法:

im_hsi=rgb2hsi(im_caijian);%%rgb转化成hsi空间

H=im_hsi(:,:,1)*2*pi;

S=im_hsi(:,:,2);

I=im_hsi(:,:,3);

H_jh=H/(2*pi); %S I 直方图均衡

S_jh=S;

I_jh=imadjust(I,[0 1],[0 1],sliderValue1);

hsi_jh=cat(3,H_jh,S_jh,I_jh);

im_zq=hsi2rgb(hsi_jh)

4)尺度归一化/去噪/锐化 主要算法:

imsize=imresize(im_zq,[chang,256]); %%尺寸归一化

imsizeR=imsize(:,:,1);

imsizeG=imsize(:,:,2);

imsizeB=imsize(:,:,3);

imsizeR_filtered=adpmedian(imsizeR,9);%%自适应中值滤波器,去除椒盐噪声

imsizeG_filtered=adpmedian(imsizeG,9);%%自适应中值滤波器,去除椒盐噪声

imsizeB_filtered=adpmedian(imsizeB,9);%%自适应中值滤波器,去除椒盐噪声

imsize_filtered=cat(3,imsizeR_filtered,imsizeG_filtered,imsizeB_filtered);

lapmask=[0 1 0;1 -4 1;0 1 0];%%拉普拉斯滤波器模板

imsize_f=tofloat(imsize_filtered);%%锐化

5)人脸肤色检测模型算法

在彩色图像处理中,色彩通常用3个分量来表示。如RGB格式(红、绿、蓝三基色模型)、HIS格式(色度、饱和度、亮度模型)和YCbCr格式(YUV)等。经过统计证明,不同人种、不同环境下的肤色区别主要受亮度影响,受色度影响较小,CrCb空间下肤色的统计分如下图所示。

肤色的Cb、Cr分量统计分布

从统计图中可看出,人体肤色在色度空间内分布稳定,聚集在色度平面内的一个狭窄区域。因而,人脸区域的确定可以通过判决YCbCr色彩空间中色度值是否落在一个狭窄范围内的像集合中来实现。文献[2]通过实验发现适合所有输入图像的肤色色度判决范围是RCr=[133,137]和RCb[77,127]。当然,多种色度空间都可用来进行肤色检测。本项目采用YCbCr色彩空间,其色彩格式的计算过程和空间坐标表示形式比较简单,可以从RGB格式线性变化得到,变换公式如下所示:

处理步骤首先将RGB图像转化为YCbCr色彩空间,然后采用通用阈值方法对肤色区域进行判决。即对每个象素(i,j)进行如下处理:

式中M(i,j)表示象素(i,j)处理后的象素值,RCb和RCr分别表示Cb、Cr的阈值范围。这样处理后将图像转变成一幅二值图像。这一步的核心问题是确定阈值范围RCb和RCr。但如文献[2]的固定阈值的方法虽然能把大多数证照的人脸区域二值化,但没有考虑到人脸的色度分量虽然在一狭窄的区域内,但在这一区域内也随不同的人而变动;同时当衣服颜色和肤色相近时,衣服也被归入人脸区域。

为解决这一问题,可以使RCb和RCr随不同照片而改变,即具有自适应性。具体的做法是:根据先验知识,身份证照中人脸一般处于中部的特点,取以图像中心点为中心,边长为20个象素的正方形区域(为了适应不同的图像尺寸,可以采用图像尺寸的某一个比例,如20%形成区域),求出这个正方形区域的Cb、Cr平均值 和 ,而后令RCb=[ -10, +10],RCr=[ -10, +10],用此阈值后对图照片处理后,可把衣服去掉,显然鲁棒性加强。

经过肤色检测得到二值图像之后,可采用连通区域的标记方法找出二值图像中最大的一个连通区域,就是人脸肤色区域,图像中也会形成一些小的区域,如衣服、耳朵等所形成的小块区域,这些不属于人脸区域,需要丢弃。连通区域的标记方法有通用的算法,并用Matlab实现。

分割出人脸连通区域后,还需将该区域中由于眼睛、嘴巴、眉毛等造成的空洞填补掉,由于空洞都在区域的内部,可采用如下方法:对每一行进行扫描,提取出区域最左最右的边界,然后将该范围内的所有0值置成1即可。

通常人脸肤色区域都包括了脖子部分,这部分的存在对最终的五官分割会造成影响,需要切除,一种最简单的方法是肤色区域的高度只取肤色区域宽度最大值的1.3倍,超过这个范围的下面部分丢弃。

最后通过将两值图像与原图像相乘,就可以得到只包含人脸区域的图像,用于后续的五官区域分割。

主要代码:见 renlian_pro.m

6)人脸肤色检测模型算法

人的面部比例如下图所示。事实上它给出了人脸五官位置的一个统计规律“三庭五眼”,具体到某一个人是有一些差异的。

在已经检测到人脸的基础上,对截取的人脸图片进行灰度化处理后,计算水平方向的灰度投影曲线,从而初步选定包含人眼的纵坐标。人脸部五官的眉毛、眼睛、鼻子、嘴巴等基本都是水平方向狭长分布,水平方向的灰度和色度变化大。

基于五官的亮度都较脸部其他部分低,通过水平灰度投影通常会在眉毛、眼睛、鼻子、嘴巴等处会产生局部低点,由此再结合五官分布的先验知识来确定眉毛、眼睛、鼻子、嘴巴的垂直位置,然后再在相应位置附近找出各器官的水平位置。

找出眼睛大致所在位置,通过水平投影与垂直投影,找出两者的交界点,这两点即可认为是眼球所在坐标。

以眼睛为分割线,将两部分分为上下两部分,再分别通过水平投影,找出嘴、鼻、眉等分布位置。

对于灰度图像f(x,y),积分投影可定义如下:

垂直投影:

水平投影:

主要算法:见 fenge.m

% 求垂直投影

for y=1:n

S(y)=sum(I(1:m,y));