人脸表情识别中对光强影响的改进及其系统设计作者:盛天明班级:08自动化2班Abstract:Withilluminationvaryingcondition,faceexpressionfeaturegottenfromimageisdistortednonlinearlybyvariantlightingintensityanddirection,sofacerecognitionbecomesverydifficult.Therefore,theimageoflightaffecttakeout,namelyilluminationnormalizationproblemhascausedmanyresearchersattention.Thispaperwillintroducetwokindofhistogrammodificationdetailedtechnicallightnormalizationmethod.Oneisthetraditionalhistogramequalizationalgorithm,andtheotheristheimprovedhistogramequalizationalgorithm.Keywords:faceexpressionrecognition,illuminationexpressionnormalization,histogramequalization摘要:在光照变化的环境下,人脸表情识别因受到光照强度和方向的非线性干扰而变得困难重重。因此,把图像的光照影响去掉,即光照归一化问题也引起了许多研究者的关注。本文将详细介绍两种直方图修正技术的光照归一化方法。一种是传统的直方图均衡化算法,另一种是改进的直方图均衡化算法。关键词:人脸表情识别、光照归一化、直方图均衡化。0.引言人脸识别和表情识别是模式识别中的一个热门课题,在过去的几年里,人脸识别和表情识别都取得了不少的进步[1]。但是,在各种识别系统中都普遍存在一个还没很好解决的难题,那就是识别系统的性能受到光照条件的严重影响[2]。在目前众多人脸和表情识别方法中,光照和视角是影响识别效果的主要因素,同一个人的人脸图像在不同光照条件下的特征差异往往比不同的人在同一光照条件下的特征差异还要大,因此,把图像的光照影响去掉,即光照归一化问题也引起了许多研究者的关注[3][4][5]。目前的光照归一化方法主要有:基于特征子空间的方法[5][9],基于直方图修正技术的方法[7],基于人脸光照模型的方法[8][10]等。本文将详细介绍两种直方图修正技术的光照归一化方法及其应用。1.基于直方图修正技术的光照归一化方法1.1传统的直方图均衡化算法图像的灰度直方图表示灰度图像中具有每种灰度的像素的个数,反应了图像中每种灰度级出现的频率,是图像的基本统计特征之一。直方图均衡是利用直方图的统计数据,进行直方图的修改,以通过某种对应关系改变图像中各点灰度值,使得变换后图像的直方图相对原始图像的直方图比较均匀、平坦,灰度层次清晰,从而达到图像增强、减少光照对识别的影响的目的。若以变量r代表图像中像素灰度级,并对r做归一化处理:0≤r≤1,其中r=0代表黑,r=1代表白。对一幅给定的图像来说,每个像素取得【0,1】区间内的灰度级是随机的。r是一个随机变量,可以用概率密度函数Pr(r)来表示原始图像的灰度分布,从图像灰度级的分布可以看出一幅图像的灰度分布特征。若图中大多数像素的灰度级取在接近于0的区间域,则整幅图像较暗,反之,则整幅图像较亮。理想的直方图均衡处理的目的是使处理后的图像的直方图是平直的,即各灰度级具有相同的出现频数,由此各灰度级具有均匀的概率分布,图像看起来就更清晰。因此需要找到一种变换关系S=T(r),使变换后新的灰度直方图较变换前直方图平直。传统的直方图均衡采用r的累积概率分布函数作为转换函数,即0()Pr()rSTrwdw(1)式(1)中,w为积分变量,0Pr()rwdw是r的累积概率分布函数。用rk表示离散灰度值,用Pr(rk)代表Pr(r),有下式成立:Pr()kknrn0≤kr≤1,k=0,1,2,„,L-1(2)式中,kn为图像中出现这种灰度的像素数,n为图像中像素总数,L表示图像灰度值共分为L级。转换函数的离散形式为:00()Pr()kkjjkkjjnSTrrn0≤kr≤1,k=0,1,2,„,L-1(3)可以证明,当图像的直方图呈均匀分布时,所包含的信息量为最大。1.2一种改进的直方图均衡化算法由式(3)可知,对一幅256×100的拥有256个灰度级的图像,如果原始图像中灰度为K的像素个数少于100,那么在转换后的图像中就会出现与临近的灰度的合并,不可能有自己的灰度值。这就造成了变换后图像的灰度变化范围一般很难达到图像格式所允许的最大灰度变化范围,同时,由于灰度的“吞噬”也容易造成图像信息的丢失。特别是在原始图像直方图分布极不均匀时,如在很亮或很暗的环境下采集到的人脸图像,变换后图像层次感更差,信息丢失更严重。JiangDuan和GuoPingQiu提出了一种改进直方图修改算法[7],这种方法建立在图像的RGB色彩空间空间上,采用高分辨率的灰度值表示方法,即用浮点数来表示原始图像像素的灰度值,从而有效地减少了灰度被吞并所造成的影响。1.2.1算法原理采用下式作为RGB色彩空间灰度转换公式,其中Lu作为浮点数类型,在我们的实验中,Lu取小数点后两位:Lu(x,y)=0.299×R(x,y)+0.587×G(x,y)+0.114×B(x,y)(4)构造一个高分辨率的直方图:H[k]=Pr[Lu(x,y)=k](5)基于此直方图,我们采用一种分级分割算法,将灰度级投影到动态范围为【0,255】的256个灰度级中。在本算法中,只有一个可调整的参数α。由式(7)、(9)、(11)可知,当α=0时,原始图像的直方图完全不变地映射到新的直方图中:当α=1时,映射关系相当于对图像做直方图均衡化处理:当0≤α≤1时,新的灰度直方图分布的均匀程度将处于原始图像灰度分布和灰度均匀分布之间。在实验中,我们取α=1,从图1我们可以看到,采用改进的直方图均衡算法处理后的图像的像素灰度分布更加均匀。1.2.2分级分割算法首先,在【0,255】中找到一个满足(6)的0β值,0≤0β≤255,00[]kHkβ=2550[]kHkβ(6)接着,我们将灰度动态范围分为两段【0,0C】和【0C,255】,其中0C由下式确定:000255025522Cα(β-)(7)对于【0,0C】,我们采用相似的方法,找到一个值1,0β,0≤1,0β≤0C,满足下式:1,001,00[][]CkkHkHkββ(8)接着再分为两段【0,1,0C】和【1,0C,0C】,其中001,01,00022CCCα(β-)(9)同理,我们可以在【0C,255】中找到1,1β和1,1C,将【0C,255】分为两段【0C,1,1C】和【1,1C,255】。1,101,1255[][]kCkHkHkββ(10)001,01,125525522CCCα(β-)(11)这样,我们便把灰度的动态范围分成了4段,继续在各段中重复上述过程,经过8次的分割之后,我们就可以把灰度动态范围划分为28=256段。落在第一段的灰度值被映射灰度级0,落在第二段的灰度级被映射到灰度级1,依此类推,所有灰度值被映射到256个灰度级中。2.测试在这里,我们采用传统直方图对人脸图像改进(注:人脸图像来自AR人脸数据库),Matlab程序及结果如下:I=imread('001-01.bmp');J=histeq(I);subplot(2,2,1);imshow(I);title('原始图像')subplot(2,2,2);imshow(J);title('直方图均衡化后图像')subplot(2,2,3);imhist(I,64);title('原始图像直方图')subplot(2,2,4);imhist(J,64);title('直方图均衡化后图像直方图')图2.13.软件系统设计在本次设计中,我们将会完成一个人脸图像表情识别软件系统的设计,利用这个软件,我们可以对人脸的四中表情——“高兴”“惊讶”“平静”“悲伤”进行自动识别,并以绘图的形式输出表情的识别结果。在这个系统中,计算机会自动读取图像,并对图像进行归一化、灰度化、二值化、表情识别(采用基于黑斑的特征识别方法),最终实现表情的识别(这个系统的设计我们是采用VB6.0完成)。表3.1颜色常量Table3.1Colormeasure颜色常量值颜色vbBlackvbRedvbGreenvbBluevbYellowvbWhitevbCyanvbMagenta&H0&&HFF&&HFF00&VHFF0000&&HFFF&&HFFFFFF&&HFFFF00&&HFF0000&黑红绿蓝黄白青紫红原始图像直方图均衡化后图像0100200050100原始图像直方图0100200050100直方图均衡化后图像直方图3.1VB颜色设定由于该系统是基于VB6.0,首先,介绍VB的颜色设定。VisualBasic的计算机屏幕颜色设定常用3种类型:8色、16色、和RGB函数。①8色设置使用8个颜色常量,如表3.1所示。②16色设置使用QBColor函数。其格式为QBColor(color),其中color为必要参数,取值0-15,代表颜色编号,如表3.2所示[11]。③本文中将会用到RGB函数,VisualBasic中的函数RGB有红色、绿色、蓝色3个基色,根据给定的颜色深度,RGB函数返回由三个基色混合调制的色彩。RGB的格式是:RGB(red,green,blue)red:必要参数,表示红色色素,取值0-255。Green:必要参数,表示绿色色素,取值0-255。Blue:必要参数,表示蓝色色素,取值0-255。表3.2颜色设置Table3.2ColorEstablish颜色编号颜色0123456789101112131415黑色深蓝绿色青色咖啡色紫色墨绿色灰色深灰色蓝色浅绿色浅蓝色红色粉红色黄色白色例如,RGB(0,0,0)为黑色,RGB(255,255,255)为白色,RGB(0,0,255)为蓝色,RGB(255,255,0)为黄色。理论上RGB函数有1677216256256256种颜色组合[13],但究竟能显示多少种颜色还要看显示器类型。RGB函数合成绿色的方法可以表示为:合成颜色=蓝色65536+绿色256+红色。3.2灰度化处理预处理的第一步是将彩色的人脸图像转化为灰度图像,原理如下:彩色图像使用一个三维矢量(R,G,B)表示一个像素点,而灰度图是用一个灰度级(graylevel)来表示。因此这种转化可以看作是从一个三维矢量到一个一维矢量的投影操作。通常可以用一个线性变换完成这一过程,如下式:P(x,y)=kR(x,y)+lC(x,y)+mB(x,y)这里R(x,y),C(x,y),B(x,y)分别为像素(x,y)点的R,G,B三个分量的值,l,k,m为预先确定的参数(在该系统中l,k,m都取1/3),且和为1。P(x,y)为求得的灰度值。下面给出了VB中生在VB里生成灰度图像的一般算法[14]:c=Picture1.Point(x0,y0)Red=(cAnd&HFF)Green=(cAnd62580)/256Blue=(cAnd&HFF00)/65536graycolor=(Red+Green+Blue)/33.3二值化处理由于是针对人脸图像的黑斑特征进行表情识别,所以要将灰度图转化为二值图,在本文中我们采用阈值分割法。我们选取最简单的阈值取灰度值的一半127作为阈值[15]。在VB里二值化的一般算法为:Ifgraycolor127ThenT=0ElseT=2553.4归一化处理由于在每幅人脸图像的大小不同,因此可能导致眼睛、鼻子、口等的位置发生误差,因而会导致识别结果