APP下载

基于OpenCV的实时动态手势检测研究

2015-12-26江超

软件 2015年6期
关键词:实时肤色直方图

摘要:基于OpenCV对实时动态手势检测进行了研究,将背景差分与运动肤色相结合,选择对HSV颜色空间的运动肤色信息进行标记,修改了运动肤色的亮度值,从而排除了静止人脸的干扰,并通过形态学处理,获得了预期的动态手势检测效果。

关键词:OpenCV;摄像头;实时;肤色;背景差分;直方图;动态手势检测

中图分类号:TP391.41

文献标识码:A

DOI:10.3969/j.issn.1003-6970.2015.06.021

本文著录格式:江超,基于OpenCV的实时动态手势检测研究[J].软件,2015,36(6):114-119

ResearchontheReal-timeDynamicGestureDetectionBasedonOpenCV

JIANGChao

[Abstract]:Thispaperanalyzesthereal-timedynamicgesturedetectionbasedontheOpenCV.Withthecombinationofbackgroundsubtractionandthedynamicskincolor,theinformationofthedynamicskincoloroftheHSVcolorspaceismarkedanditsbrightnessismodified.Asaresult,thedisturbingofthestaticfaceiseliminated.Moreover,withthemorphologicalprocessing,theexpecteddynamicgesturedetectionisrealized.

[Keywords]:OpenCV;Camera;Real-time;Skincolor;Backgroundsubtraction;Histogram;Dynamicgesturedetection

0引言

现今人T智能机器人技术快速发展[1],人们迫切的希望人机交互方式能像人与人那样通过声音或手势传递信息和指令,以使得机器人更加智能化,因而动态手势识别成为了当下研究的一个热点方向。

动态手势识别是一个动静结合的过程,包含了动态图像轨迹移动的识别和动态图像轮廓的识别,而这些都是以动态手势检测的结果作为识别基础的,动态手势检测的好坏直接影响着动态手势识别的好坏。本文的工作是进行动态手势检测的研究,为动态手势识别提供更好的检测数据。

动态手势检测是能够在动态的图像中检测到目标物体的移动[2],并能捕捉到运动物体在动态图像中的位置。目前动态手势检测最容易想到的算法是背景差分,但是由于光照等外部条件造成的背景图像的不确定的变化使得运动检测会随时间增长产生的误差越来越大,但是运动手势的另一明显特征是肤色,本文将目标的运动信息和颜色信息结合进行动态手势检测,并对颜色直方图进行标记,进一步排除了人脸的干扰,获得了较好的检测效果。

10penCV简介

OpenCV是Intel开源的计算机视觉库(opensourcecomputervisionlibrary)的简称,它是由一些C函数和少量的C++函数构成,实现了在图像处理以及计算机视觉方面的许多通用算法,主要对图像进行如运动检测,跟踪,分割,识别以及3D重建等高级处理。它有300多个C函数的跨平台的中、高层API,它不依赖外部库,但可以使用外部库。由于它是开放源码且代码简洁高效,其中大多数函数都经过汇编最优化,所以能充分利用英特尔系列的芯片的设计体系,因而对于英特尔系列芯片,OpenCV的代码执行效率是非常高的。OpenCV具有强大的图像和矩阵运算能力和这方面的用户接口,同时支持windows和Linux系统。本文研究内容所涉及的相关程序是在OpenCV+VS2008搭建的环境下编译运行的。

2实时视频图像的采集

实时图像采集系统的任务就是采集实时视频图像[3],硬件部分可以用图像采集卡或者USB摄像头,软件部分的视频图像捕捉技术主要有VFM和DirectShow两种。相比DirectShow方式,VFM方式使用简单方便,但是可控性差,并且VFM技术是基于消息机制的,相对于DirectShow方式速度较慢,而DirectShow技术是一套底层应用程序的编程接口,可以说是直接与硬件打交道,通过图像采集测试,发现VFM采集方式的fps只有9-12左右,而使用DirectShow方式采集能使fps提升到60帧/s。虽然OpenCV中能很好的支持VFM方式,提供了从摄像头获取图像信息的函数cvCaptureFromCAM,但为了能够在实时的视频中流畅地检测目标,本文采取DiretShow方式。通过安装DiretShow的开发包,调用CcameraDS对象的OpenCamera、CloseCamera、QueryFrame方法可通过摄像头进行打开、关闭、实时获取一帧图像的操作。

此外,由于像信息会随时受到变化的光照强度、周围环境和外部设备的影响,同时在采集和处理过程中常伴有各种噪声与畸交,使采集到的图像偏离了本身原有的色彩或产生噪点,从而影响图片的质量,导致运动手势检测的效果不佳,因此,有必要对刚采集的每一帧实时图像进行光照补偿[4]以及去噪滤波[5-6]。

3实时动态手势检测的算法原理

3.1基于背景差分的运动检测

本文研究的内容实现环境为从固定的摄像头采集实时视频图像,因而本文实验所处的环境中的背景基本是不动的,由于背景差分的运动特征提取计算量不大,能很好的满足实时性要求,因而本文在运动目标检测的算法基于背景差分。背景差分是将当前帧与背景差分,从而分割运动的物体。假设d(x,y)表示背景差分后的图像,f(x,y)表示当前帧的图像,b(x,y)表示背景图像,那么背景差分的基本原理可用式(1)表示。在OpenCV中可以用cvAbsDiff函数来进行背景差分。

difference(x,y)=frame(x,y)-background(x,y)

(1)

在背景差分中,位于运动手势区域的像素点的差分值比较大,而由于光照等外部条件影响的背景区域的部分像素点差分值也会有比较大数值,从而在差分图像中形成一些噪声点或者干扰区域,但是大部分的没有受到干扰背景区域的像素点会得到比较小的差分值。对于三通道RGB图像,通过背景差分将运动目标从背景图像中分割出来,可将差分后的目标转换成单通道的灰度图,然后通过阈值法分割目标,将8位RGB图像转换成8位灰度模式图像如公式(2)。

Gray=(R*30+G*59+B*11)\100

(2)

阈值法分割运动目标是通过比较像素与一个合适的阈值的大小关系,来确定图像的每个像素是目标像素还是背景像素,最后得到一个二值化的图像,完成目标分割。图像的二值化如公式(3)。OpenCV中可用cvThreshold函数进行二值化。

合理地选择最佳阈值[7]是必要的,考虑到差分值比较大的像素点大部分应属于手势运动区域,那么最佳阈值应该处于偏小的差分值的区间,本文通过统计不同阈值下像素的明显变化来找到最佳阈值。先设定一个最小阈值为1,然后每次增加2的间隔增加到51,并统计每个阈值下的像素个数,发现阈值在17以后像素统计量下降很快,且在17左有时像素统计值变化不是很大,于是义从最小阈值开始每隔l的间隔增加到20,发现阈值为10左右时像素统计量基本不变,在10之前像素统计量是随阈值增加缓慢减小的,而超过10后一点,像素统计统计量义开始快速减小,于是确定最佳阈值为10。

3.2基于目标信息标记的颜色直方图运动检测

3.2.1颜色空间

颜色空间有多钟模型,常用的有RGB、YCbCr、HSV等。

RGB颜色空间是基于白然界中三种基色光的}昆合原理,将Red、Green、Blue三种基色按照从0(黑色)到255(白色)的亮度值在三个颜色通道中分配,从而确定其色彩,于是当不同的亮度值的基色}昆合,就会产生出256*256*256中颜色,大概为1670W种颜色,用几何学来表示是基于笛卡尔坐标系统的立方体,三个轴分别为R、G、B,原点对应为黑色,离原点最远的顶点为纯白色,立方体内各个不同的点都是256*256*256种颜色中的一种,可以用从原点到该点的矢量表示,每一副彩色图像都可以分解到立方体中三个独立的基色平面上。

YCbCr颜色空间广泛应用在数字视频中,Y分量表示亮度信息,Cb分量和Cr分量分别表示蓝色色差和红色色差,由于Y分量的亮度信息与Cb和Cr两个色差分量的颜色信息分开,使得该颜色空间在Cb和Cr分量所组成的空间平面上具有更好的颜色聚类性,尤其是肤色聚类性。YcbCr与RGB颜色空间的转换如公式4和5。

HSV颜色空间是基于画家的配色方法。HSV颜色空间对应于圆柱坐标系中的一个圆锥形子集,网锥的轴对应了V,代表亮度,取值在0-100%之间,H对应了绕V轴旋转的度数,代表色调,大小在0-360度之间,S对应了绕V轴旋转的半径,代表饱和度,表示色彩的明暗,取值也在0-100%之间。在圆锥的顶点(即原点)处,V=O,H和S都无定义,代表黑色。网锥顶面的中心处S=O,V=l,H无定义,代表白色,从该点到原点的连线即V轴代表亮度逐渐灰暗的等级,在该轴上的点S=O,H无定义,它对应于RGB颜色空间中的主对角线。在圆锥顶面的圆周的上颜色,V=l,S=l,表示为纯色。从RGB颜色空间的转换到HSV颜色空间如公式6。

3.2.2手势颜色特征提取

颜色特征有多种如颜色直方图、颜色集、颜色矩、颜色聚合向量以及颜色相关图等。其中颜色直方图能描述不同的颜色值在整个图像中所占的比例,而并不关心每个颜色在图像中所处的位置。任何一副图像都能给出一副与它对应的直方图,但是不同的两幅图像可能有一副完全相同的颜色直方图分布,因而颜色直方图邗图像是一对多的关系。一般图像中的前景色和背景色的分布明显不同,在其颜色直方图上就会出现双峰的特性。一幅灰度图像的颜色直方图的数学表达如公式(7)。

H(K)=nA(K=0,1,…,L-1)

(7)

其中,K表示像素值个第K个bin格,L表示最大

像素值将像素的取值范围平均分成L个等份,8位图像的像素值最大值为255,nK表示整幅图像所有像素中,像素值在第K个bin的像素值区间中的像素的个数。

在实际中一般都要将直方图归一化,因为由于图像如果很大的话,那么该图像中在其直方图的某一个区间中的统计值很可能非常大,因此有必要将直方图进行归一化。归一化就是将所有直方块的值加起来,然后将每个直方块都除以这个和,最后将每个直方块的值都乘以一个归一化因子,从而调整每个直方块为归一化后的值,这样直方块的值就会变成我们需要的值,而不会太大。OpenCV中可以用CvHistogram表示颜色直方图变量,用cvCalcHist来计算图像的直方图,用cvNormalizeHist进行直方图的归一化。

本文在动态手势检测前,先提取手势肤色的颜色直方图信息,该直方图的直方块数据在人体肤色有关的区间有比较大的值,而在非人体肤色的区间有比较小的值,那么用该直方图数据计算每帧反投影图像,人体肤色的像素点则在反投影图像中就会有比较大的数值。

由于HSV颜色空间对光线的敏感程度较小[8],因而本文采集颜色直方图数据时选择HSV颜色空间。为提高直方图数据精度,将HSV空间直方图划分为40*40*50的等级。

3.2.3基于手势颜色特征的反投影图

图像的反投影图像[9]是是直方图数据的反映,即用输入图像的每个二维位置上的像素值(灰度或者多维)对应到该像素在直方图上对应的bin格上的值来替代该像素的值,因而图像的反投影图像都是单通道的。用统计学来表述就是输出图像像素点的值是对应观测数组在某个分布(直方图)下的概率,如公式(8)。

其中b(xi)是图像在位置x.上的像素对应到直方图的第b(xi)个bin格,m表示直方图被平均分成m个bin格,qu表示直方图的第u个bin格直方块的值。在OpenCV中可以用cvCalcBackProject函数来获得图像的反投影图像。

3.2.4排除人脸干扰

由于提取的颜色直方图是肤色相关的,因此背景图像的人脸会对运动手势检测形成干扰,然而人脸和手势的最大区别是运动特征,因此,对符合条件的像素值进行标记,以使其不同于人脸的像素点。由于HSV空间中将光线敏感的亮度信息单独用V表示,选择修改V值可以很好的保留颜色信息,且对运动肤色特征进行标记。

本文中将HSV空间中符合条件的像素点的亮度V调整为比较小的值。调整为比较小的值是因为人脸肤色的亮度和运动的手势亮度值正常情况下应该是亮度比较大的,将运动手势区域的亮度值V修改为较小的数值可以很好的减小类肤色人脸的干扰。那么在采集颜色直方图时,采集区域内的所有像素点都应该符合条件,应该对所有像素点的V值进行修改,而在每帧图像中只有的运动肤色的像素点才符合条件,应该只对这些像素点进行V值的修改,这样直方图数据在运动肤色方面就可以对应了。具体的修改做法如公式(9)。

满足式(9)的像素点必须先是运动的像素点,因而需要满足背景差分后的经过二值化的阈值大于10的条件。式(9)中通过判断r/g的比例来修改V值,这是因为大多数黄种人肤色偏黄色,而纯黄色可以用纯红色与纯绿色按1:1的比例搭配得到,因而对应的像素点在RGB图像中其红色分量一定大于绿色分量即r>g,本实验采用的是30万的摄像头,采集的视频图像效果难免有失真,在室内环境内经过多次调试,发现其采集的人体肤色像素中的红色和绿色比例大概在1.0-2.0之间。因而式中将满足运动且为肤色的条件的像素点的V值修改为lO*(r/g),而非肤色的值修改为最大值255。

在经过V值修改后,将采集的HSV空间的手势颜色直方图对处理后的当前帧图像做反投影,就可以得到一个具有动态肤色信息的灰度图像。在采集直方图时,经过试验确定归一化因子为1000。HSV颜色直方图中统计的是手势肤色的颜色信息,其中也不排除采集时也有少量非手势肤色信息被采集,但是不妨碍直方图中只有满足是肤色的柱状块有比较大的数值,少量非肤色和V=255的柱状块的值有比较小的数值,其余非肤色的柱状块的值基本上都为0,因而这里得到的灰度图像的像素点中基本上只有是符合运动肤色的像素点才有数值,大部分非运动肤色的像素点的灰度值都应该为0,所以这里对运动肤色进行阈值法分割时,选择的阈值很小,本文选择阈值为从1每隔1增加到10统计的像素个数基本变化不大,于是就选择阈值为5,进行二值化运动目标分割。

3.3进一步处理

由于背景差分的运动检测只能检测出运动的像素,而基于颜色直方图的运动检测可以检测出运动肤色的像素,这其中也会有采集手势肤色直方图中有少量的非手势肤色也被采集到手势HSV直方图中,且V值为255的像素点也会形成干扰,本文将背景差分的运动检测与基于颜色直方图的运动检测结合起来,将两种方式得到的运动检测结果相与,取它们的共有的像素,这样减少了干扰,这可能也会排除掉本来是运动肤色的像素,但是对于实时准确的检测出运动手势提供了稳定性。OpenCV中可以用cvAnd实现上述操作。

上述动态手势检测的算法虽然可快速准确的检测出移动的手势,但不能形象的检测出手型,如产生细丝状或出现空洞等,因此有必要对检测结果进行进一步的形态学处理。

3.3.1形态学处理

形态学源于对植物和动物的形态研究,而数学形态学[10](MathematicalMorphology)是将形态学应用于图像处理中用于表达图像中的有用的区域形状。它的基本做法是用特定形态的结构元素度量并提取图像的特定的形状用以达到图像分析与识别目的。在图像形态学处理[11]时,通常是将4连通的3*3领域或8连通的3*3领域的结构元素在图像中以单位结构元素移动,然后做类似卷积形态学基本运算。图像的连通性是指像素的领域是由某种结构构成,那么该像素与其领域的像素就是连通的。在OpenCV的函数库中可用cvMorphologyEx函数进行图像形态学的操作。

最基本的四个形态学算法[12]是:膨胀、腐蚀、开运算以及比运算。膨胀的作用是使物体的边界扩张,若在图像中的两个区域相距较近,那么经过膨胀运算后,两个区域就有成为连通域。腐蚀是膨胀的反过程,在数学形态学中腐蚀的作用是消除物体边界,若两个物体之间有细小的连通,那么选择合适的结构元素,经过腐蚀运算后,就会使两个连通的物体变得不连通。腐蚀可以消除图像中细小而孤立的噪声点。开运算是对目标图像先做腐蚀运算,再做膨胀运算。它可以消除图像中孤立的小点、小刺,也可以平滑较大物体的边界而基本不改变物体像素个数。它的作用与腐蚀的作用类似,但与腐蚀相比,它可以基本保持目标原有面积不变的优点。闭运算时对目标图像先做膨胀运算再做腐蚀运算。它可以平滑图像轮廓、填平小孑L、修补细小裂缝,填补后使图像的填补结果义一定的几何特征,它还可以抹掉凸图像内部的尖角部分而总的位置与形状都不变。闭运算的结果常常是目标比源图像增加一些像素。

本文对上述动态手势检测的结果进行一次开运算以进一步消除噪声,然后经过5次闭运算扩大运动目标,以使最终检测的动态手势平滑且具有形态化。

3.3.2背景更新

由于真实场景的中的背景也在随着时间也在不断的变化,即使在摄像头固定的情况下,背景也会有光线等外部条件产生微小变化,这样若在每帧图像与背景做差分时,选取的背景图像还是初始背景时,会由于使用的背景图像不能反映当前帧的背景的真实情况,从而产生误差,这个误差会随着时间而不断积累,最终不能有效地实时检测出运动目标。因此有必要对背景图像进行背景更新,从而能及时反映当前帧的背景。背景更新的如公式(10)

其中ut表示t时刻背景图像对应像素点,ut+l表示t+l时刻经过背景更新后背景图像对应的像素点,It表示t时刻即当前帧图像的像素点,If表示t时刻图像对应像素点的掩码值即是否做背景更新,a∈[0,1]表示背景更新的速度,一般取0.8到1.0之间的值,本文取值为0.8。在OpenCV中可以用cvAddWeighted函数做背景更新操作。

由于在摄像头打开时是需要一定的时间的,在这段时间里摄像头采集的实时视频图像数据也有可能受少许硬件初始化的影响,并且此时在摄像头前的人基本是在等待摄像头的开启,是处于静止状态的,因而这期间采集的实时视频图像数据的综合数据应该就是本实验环境的背景图像。所以本文将摄像头采集的前20帧实时视频图像连续做背景更新,从而得到初始的背景图像Bo。然后在每帧图像中只对被检测出来的运动手势遮住的部分进行更新。

4实验结果与分析

4.1基于背景差分的运动检测实验

从下图1可以看出在连续的几帧中,有大面积的运动的手势被检测出来,而人体微小的运动也被检测出来。

4.2基于目标信息标记的颜色直方图运动检测实验

从上图2可以看出在连续的几帧中,经过人为标记的运动手势能有效的被检测出来,而没有经过标记的人脸部分,基本没有被检测出来。

4.3进一步处理

如上图3,在经过背景差分和人为标定直方图相结合的运动检测后,经过图像形态学处理能得到比较完整的运动手势二值图像。

5结束语

本文通过对动态手势检测的研究,提出了将背景差分和基于目标信息颜色直方图的动态手势检测相结合的算法,获得了预期的动态手势检测效果,对今后进行动态手势识别的研究打下了坚实的基础。

参考文献

[1]杨帆,刘咏梅.基于视觉与语义信息的图像联合相似性度量方法研究[J].新型工业化,2012,2(1):52-58.

[2]张灿龙,敬忠良.基于辨识性稳定区的视频跟踪[J].新型工业化,2012,2(5):55-64.

[3]吉亚泰.基于DSP的图像采集与处理系统的研究与设计[J].软件,2013,34(2):22-25.

[4]RafaelC,GonzalezRichadE.Woods.数字图像处理(第二版)[M].阮秋琦,阮宁智译.北京:电子工业出版社,2003.

[5]罗军辉,冯平,哈力旦A等.Matlab7.0在图像处理中的应用[M].北京:机械工业出版社,2005.

[6]陈蒙.医学X光成像中图像去噪算法研究[J].软件,2013,34(11):62-63.

[7]陈松.人脸检测和识别[D].西安:西安电子科技大学,2007,4:43-45.

[8]蔡林沁,郑雪松,王牛.基于HSV颜色空间正交立体视觉目标检测[J].新型工业化,2013,3(1):79-88.

[9]罗强.移动目标的跟踪技术研究[D].武汉:武汉理T大学,2009.

[10]谢凤英,赵丹培.VisualC++数字图像处理[M].北京:电了工业出版社,2008,9.

[11]钟彩.边缘检测算法在图像预处理中的应用[J].软件,2013,34(1):158-159.

[12]冈萨雷斯.数字图像处理(第三版)[M].北京:电子工业出版社,2011.

猜你喜欢

实时肤色直方图
符合差分隐私的流数据统计直方图发布
Conversation in a house
人的肤色为什么不同
为什么人有不同的肤色?
用直方图控制画面影调
一种改进的混音算法的研究与实现
基于空间变换和直方图均衡的彩色图像增强方法
基于直方图平移和互补嵌入的可逆水印方案
肤色检测和Hu矩在安全帽识别中的应用