数字图像处理项目报告.docx
- 文档编号:10633059
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:15
- 大小:838.34KB
数字图像处理项目报告.docx
《数字图像处理项目报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理项目报告.docx(15页珍藏版)》请在冰豆网上搜索。
数字图像处理项目报告
《数字图象处理》课程项目
实施报告
题目(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度,则需要取绝对值。
下图显示原图像旋转后的点与原图像点的对应关系,以按此公式求得新图像每一点对应的原图像点。
旋转后,由于图像点可能是非整数,出现像素空洞问题,故需要进行插值法,选用最近邻插值法。
主要算法:
forx=1:
w2
fory=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);%最邻近插值
ifx0>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);%SI直方图均衡
S_jh=S;
I_jh=imadjust(I,[01],[01],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=[010;1-41;010];%%拉普拉斯滤波器模板
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
%求垂直投影
fory=1:
n
S(y)=sum(I(1:
m,y));
end
y=1:
n;
figure
subplot(211),plot(y,S(y));
title('垂直投影');
%求水平投影
forx=1:
m
S(x)=sum(I(x,:
));
end
x=1:
m;
1.5软硬件系统构成
MatlabGUI界面
2.项目的实施过程
首先我们通过查找资料查询有用的源代码,然后进行修改与编写使之成为正确、可运行的程序。
我们将整个人脸面部自动定位与分割分成了三个大部分,一是图像处理,二是人脸肤色检测提取,三是五官分割。
2.1图像处理
1)图像收集
2)倾斜矫正
3)提取人头
4)去过曝光/光线补偿(HSI里对I用直方图变换增强或者减弱)
5)直方图对比(图1)
6)尺寸归一化(256*y)
7)去噪以及锐化
为了改善图像质量,对彩色照片图片进行中值滤波,以消除图像中的散粒噪声,保留图像的边缘细节。
对于彩色图像,可以对RGB图像的三个分量分别进行滤波在合成为彩色图像,也可以只对HSI空间中强度分量I进行中值滤波后在形成彩色图像。
2.2肤色检测
在彩色图像处理中,色彩通常用3个分量来表示,如RGB格式、HSI格式和YCbCr格式等。
人体肤色在色度空间内分布稳定,聚集在色度平面内的一个狭窄区域,因而,人脸区域的确定可以通过判决YCbCr色彩空间中色度值是否落在一个狭窄范围内的像集合中来实现。
经过肤色检测得到二值图像之后,可采用连通区域的标记方法找出二值图像中最大的一个连通区域,就是人脸肤色区域,图像中也会形成一些小的区域,如衣服耳朵等形成的小区域,这些不属于人脸区域,需要丢弃。
分割出人脸连通区域后(图2),还需将该区域中由于眼睛、嘴巴、眉毛等造成的空洞填补掉,可以采用如下方法:
对每一行进行扫描,提取出区域最左最右的边界,然后将该范围内的所有0值置成1即可。
通常人脸肤色区域都包括了脖子部分,这部分的存在对最终的五官分割会造成影响,需要切除,我们采用的方法是肤色的区域高度只取肤色区域宽度最大值的1.3倍,超过这个范围的下面部分丢弃。
最后通过将两值图像与原图像相乘,就可以得到只包含人脸区域的图像(图2),用于后续的五官分割。
图2
2.3五官分割
人脸部五官的眉毛、眼睛、鼻子、嘴巴等基本都是水平方向狭长分布,水平方向的灰度和色度变化大。
基于五官的亮度都较脸部其他部分低,通过水平灰度投影通常会在眉毛、眼睛、鼻子、嘴巴等处会产生局部低点,由此再结合五官分布的先验知识来确定眉毛、眼睛、鼻子、嘴巴的垂直位置,然后再在相应位置附近找出各器官的水平位置。
眼:
找出眼睛大致所在区域,通过水平投影与垂直投影(图3),找出两者的交界点,这两点即可认为是眼球所在坐标。
以眼睛为分割线,将两部分为上下两部分,再分别通过水平投影,找出嘴、鼻、眉等分布位置。
通过鼻子的水平投影与垂直投影确定鼻子的位置(图4),继而确定其他器官的位置,用标记框圈出,形成最后的五官分割(图5)。
图3
图4
图5
3.结果分析
3.1肤色检测
对于一些人脸图像光线过于充足,即曝光过度的情况下,通过人脸肤色检测做法的人脸肤色分割存在一定的出错,不能很好的分割只含人脸部分。
而对于光线正常的情况下较为准确。
我们认为,主要是因为使用人脸肤色检测的方法做,是对于偏向黄色皮肤的效果较好,而对于肤色过白的情况下,结果不是很好。
对于这个问题,我们又通过查阅资料,制作了一个较为简单但有所效果的人脸肤色模型的代码来弥补这个不足之处,两个方法都做了上去,能互取所长,得到较为准确的结果。
3.2五官分割
1)眼、眉毛
通过水平投影与垂直投影的交界点,找出眼球所在坐标。
转换为灰度图后,因眼球与脸部的灰度值分布间隔较大,故能很好的检测出眼球的分布。
在所测试的单脸图像中,除却肤色检测错误的图像之外,均能较为准确的找出所在点。
用类似的方法能够找出眉毛的大值位置,框出来。
2)鼻、嘴
以现采用算法而言,对于一般的单脸图像,这两个部分能较好的分割出来。
但在遇到某些带有胎记或者是光照补偿不理想等原因,造成波形的变换缓慢,对鼻、嘴位置的判别产生较大的影响。
认为造成此问题的主要原因还在于算法对于波形形状的要求较大(过于理想)。
通过一维中值滤波器之后,嘴巴所在区域的分割点会出现两个极小值点。
导致采点采在相邻位置上。
预想解决方法:
同眼睛。
先找出嘴巴的分割点。
以眼、嘴为分割线,将脸分成三块区域,再在中间区域通过投影等方法找出鼻子的分割点。
4.结束语
一开始我们对于数图项目是有点恐惧的,想到数图就会联想到人工智能,一股高深的感觉。
但还好一步一步实践下来,井然有序地一个个实现了功能,我们组团结一心互帮互助。
通过数图项目,无疑让我们对于数字图像这门课有了更深入的了解,同时也让我们初窥了新兴的科技热点。
同时也培养了我们实践、合作以及交流的能力。
做课程项目是难得可贵的经验。
参考文献
[1]R.L.Hsu,A.M.Mohamed,andA.K.Jain.FaceDetectioninColorImages[J].IEEEonPAMI,May2002,24(5):
696-706
[2]李华胜,杨桦,袁保宗.人脸识别系统中的特征提取[J].北方交通大学学报,Vol.25,2001:
19
[3]李月龙等.人脸特征点提取方法综述[J].计算机学报,2016年7月,39(7):
1356-1374.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 项目 报告