基于Kinect深度图像信息的手势分割和指尖检测算法

2014-05-25 02:51徐鹏飞张红英
西南科技大学学报 2014年1期
关键词:人手指尖手势

徐鹏飞 张红英

(西南科技大学信息工程学院 四川绵阳 621000)

进入计算机时代以来,人机交互技术一直相对单一,传统的鼠标键盘交互方式给人们的生活学习带来很大局限性,特别是近年来生活水平不断提高,传统交互方式已经不能满足人们各个方面的需求。随着计算机视觉技术的不断发展,越来越多的研究者们通过手势运动跟踪以及手指状态来实现非接触式的人机交互[1-2]。

准确的手势分割和指尖检测是进行手势识别的前提,在动态手势识别中加入多个指尖的运动轨迹特征就能够大量增加手势种类。如果能够通过手指移动完成隔空操作,那肯定会比挥动手臂操作有更好的用户体验。当前手势交互的研究主要集中在基于二维彩色图像的研究上,如:根据各种颜色空间、人手的纹理结构分析、灰度特征或者运动特征等来对目标进行检测与跟踪。Rafael Bastos[3]等人利用HSV空间进行肤色分割,曹建秋[4]等人利用YCbCr空间进行肤色分割。利用不同的颜色空间进行肤色分割有不同的效果,一般而言,在光照变化较大的情况下,利用YCbCr空间进行肤色分割的效果较好,而在正常的光照条件下,利用RGB空间进行肤色分割的效果较好。由于人种肤色差异较大,这一点也限制了利用肤色进行图像分割的应用范围。于洋[5]等人通过结合灰度级直方图和设置动态阈值的方法进行手势识别和分割,达到了较好的效果。Schwarz L A[6]等人采用健壮性检测解剖标志以及约束化逆运动学,结合光流法来检测运动姿势。但由于二维图像无法获取物体在三维空间中的距离信息,相关的算法容易受到周围环境、光照变化、背景等因素的影响,在目标检测与跟踪上鲁棒性较差,难以实现复杂场景下的任意目标检测和实时跟踪,应用受到很大的限制。

本文通过引入Kinect摄像机来得到场景中的深度信息,有效分离目标与背景;使用最大类间方差法与固定阈值相结合的方法,分割出手势区域;利用手部轮廓几何特征、曲率特征标记指尖位置,实现实时的手势分割与指尖检测。

1 手势分割

基于深度图像的手势分割和指尖检测系统包含四大部分:深度图像采集、手势分割、指尖检测以及检测结果输出。整个系统的流程图如图1所示。

1.1 深度图像获取

Kinect是由微软开发的体感摄像机,最主要功能之一就是能够产生三维深度数据。深度数据流所提供的图像帧的每一个像素点代表的是在深度感应器的视野中,在(x,y)坐标处离摄像头平面最近的物体到该平面的距离(以毫米为单位)。其传感器传回的数据每像素占2字节(16位),其中低3位存储用户编号,用于用户的识别。高13位存储深度值。获取的图像中深度值最大为4 096 mm,0值通常表示深度值不能确定,一般应该将0值过滤掉。微软建议在开发中使用1 220~3 810 mm范围内的值。在进行其他深度图像处理之前,应该使用阈值方法过滤深度数据至1 220~3 810 mm这一范围内。

在实际场景中,各个物体的深度分布是离散的,故本文采用先从当前场景中分割出人体,再从人体图像中分割出人手图像的方法。

图1 系统总流程图Fig.1 The total system flowchart

1.2 深度图像预处理

由于Kinect获取的深度图像是不稳定的,其中存在一些空洞和噪声,以及物体边缘的深度值不稳定,直接处理会对算法的效果造成影响,所以需要进行一些滤波和形态学操作等,以提高分割和检测的准确性。

1.2.1 图像滤波

传统滤波算法有均值滤波、中值滤波、低通滤波等。均值滤波算法比较简单、易于实现,但是会使目标边缘模糊,且对零值噪声敏感,影响后续处理。由于深度图像中噪声多为0值点,即摄像机无法获取深度值的点,中值滤波可以有效去除噪声点,也降低了目标边缘的模糊程度。所以本文采用中值滤波算法进行去噪。中值滤波法是一种非线性平滑技术,它的基本原理是通过使用滑动窗口扫描整幅图像,将窗口内所有点的像素值按大小顺序排列,找到其中的中位数,将中位数赋给窗口中心点。本文采用3×3的模板数组作为中值滤波的窗口,则对于图像中任一点(x,y)都有8个相邻的点,加上点(x,y)共有9个点,当这9个点有奇数个灰度值时选取中间值来代替点(x,y)的灰度值,而当这9个点有偶数个灰度值时选取两个中间值的均值来代替点(x,y)的灰度值。对于图像中4个边框的像素点不进行处理,保持原来的灰度值。中值定义如式(1)。

1.2.2 形态学处理

形态学处理主要包括腐蚀、膨胀、开运算、闭运算等。膨胀是指将图像与核进行卷积,并求其局部最大值的操作。核可以是任何的形状或大小,它拥有一个单独定义出来的参考点。核与图像卷积,即计算核覆盖的区域的像素点最大值,并把这个最大值赋值给参考点指定的像素,这样会使图像中的高亮区域逐渐增长。腐蚀是膨胀的反操作。腐蚀操作是对图像的细化,常应用于骨架的提取、噪声点的去除等;膨胀操作是对图像目标的扩大,应用于图像空洞的填充。开运算和闭运算是腐蚀膨胀的组合操作。在开运算情况下,我们先对图像进行腐蚀后进行膨胀。开运算通常可以用来统计二值图像中的区域数。在闭运算的情况下,我们先对图像进行膨胀然后进行腐蚀。在多数连通区域分析算法中,都会用到闭运算来去除噪声引起的区域。

1.3 手势分割

通过对Kinect返回的深度数据进行分析,像素值的高13位保存该点像素的深度值,低3位保存操作者序号。当操作者序号为000时,表示该像素不属于操作者。遍历每一帧图像的每一个像素,将像素信息后三位与111相与即可获取该像素的操作者序号,进而过滤出操作者和背景,只取操作者的像素信息,其余像素信息全部置零。

如图2所示,经过逐像素判定后可以得到人体的深度图像。

图2 获取操作者深度图像Fig.2 The depth image of the user

从深度图像的特性来看,每个像素的灰度值能够反映该点距离摄像头的远近。在得到人体深度图像后,统计其灰度分布直方图。如图3(a)所示,当操作者伸出手操作时,灰度直方图中较小的峰是手部区域的灰度分布,较大的峰是人体躯干区域的灰度分布。可见手掌平面与摄像机平面平行时,手掌的深度分布较均匀;如图3(b)所示,当人手距离身体较近时,手部区域灰度值与人体灰度值相差不大;如图3(c)所示,当指尖向前倾斜,人手所在平面与摄像机平面不平行时,人手区域的灰度分布范围较大,所以单纯使用最近点灰度值与固定阈值相加的方法来分割手势会有很大的局限性。

图3 人体深度分布直方图Fig.3 The body depth distribution histogram

设图像中一共包含L个灰度级(0,1,2,……,L-1),灰度值为i的的像素点数为Ni,由于灰度值为0的点是背景点,直接将其排除计算,图像中人体部分总的像素点数为N=N1+N2+…+NL-1。灰度值为i的点的概率为:pi=Ni/N。设阈值t,将图像分为躯干A=(1,2,3,…,t)和人手B=(t+1,t+2,t+3,…,L-1)两个部分。则两类出现的概率为:

躯干和人手的灰度均值为

灰度图像的总均值为

由此,可以得到人手区域和躯干区域的类间方差

类间方差越大,两类灰度差别就越大。则使得类间方差σ2最大的t即为所求的最佳阈值[7]。

由于后续工作只需对人手图像进行操作,而此时得到的图像有可能含有部分手臂图像,因此,再设置阈值τ,结合自适应阈值得到的t,可以较好的得到手部图像。

依据该阈值分割出手部图像

如图4所示,该方法能够得到比较好的分割效果。

图4 手势分割效果Fig.4 The effect of hand gesture segmentation

2 指尖检测

指尖检测算法中,建立三维手指模型的计算量较大,因此在实时系统中应用很少。基于二维手指模型的检测分为指尖的空间位置检测和二维平面位置检测。指尖的空间位置检测一般需要复杂的计算。因此在许多实时系统中,主要是检测指尖在二维平面上的位置。检测指尖二维平面位置的方法可以分为3类:轮廓分析[8]、模板匹配[9]和直观启发式方法[10]。

鉴于深度图像的特征:人离摄像头较远,分辨率较低,手部图像模糊,不适用传统的模板匹配等方法。本文采取的方案是:首先,计算获得图形质心;其次,提取手部轮廓信息;最后,计算轮廓上各个点到质心的距离,判定指尖。由于指尖为突出部分,所以轮廓各点到掌心距离会有一个急剧的先变大再变小过程,而手腕、手掌边缘不具有这些特征,通过合适的阈值设置即可快速的检测出指尖。

指尖检测步骤如下:

(1)首先计算图像的矩并得到质心

Mpq为(p+q)阶矩,I(x,y)是被描述的区域。其0阶矩为:

1阶矩为:

因此,图像形状的质心为:

(2)设P(xi,yi)为轮廓上的点,根据得到的人手图像进行轮廓提取并计算轮廓上点P(xi,yi)距离质心的距离D:

顺时针或者逆时针遍历轮廓上所有的点,就会出现5个较大峰值,分别对应5个手指。手腕处的距离变化速度明显小于指尖处。如果只伸出一两个手指,那么就只有一两个峰值了。

(3)判定指尖:将t个手部轮廓连续像素分为一组P={P0,P1,…Pt-1},在各组中寻找距离极大值的点Pmax。然后以此点开始按顺时针、逆时针方向各抽样一个点(Pmax-5,Pmax+5),如果满足|Pmax-Pmax-5|>τ且|Pmax-Pmax+5|>τ则认定Pmax为指尖,如果不满足则说明此段序列中无指尖。在认定为指尖的Pmax中,计算任意两点的距离,距离太近的删除其中一个,以排除分段点正好位于指尖位置时出现两个都可认定为指尖的点。

3 实验结果及分析

为验证算法有效性和手指尖提取的准确性,本文在配置为奔腾双核主频为2.80 GHz处理器、内存2 GB、win7 32位操作系统的计算机上,采用VS2010编译环境,利用opencv2.3.1和C++来进行算法设计。传感器为Kinect for XBOX360,深度图像分辨率为320×240。

如图5所示,红点表示手部图像质心,绿点表示指尖。本文算法下可有效检测0到5个指尖。

图5 不同数目手指的指尖检测情况Fig.5 Fingertip detection of different numbers of fingers

本文方法相对于其他手势分割及指尖检测方法最大的提升在于鲁棒性。

相对于使用彩色相机的方法,由于深度图像的生成与环境光照、颜色无关,而且在手势分割中已经通过距离信息将所有背景信息去除,然后只对分割出的手部图像进行指尖检测,所以能很好克服环境光照变化、环境中有类肤色区域、背景干扰等限制因素。而利用手部轮廓特征,计算轮廓点与掌心距离判断指尖的方法也具有尺度变化、旋转不变性,可以对指尖指向不加限制。

将深度图像检测到的指尖坐标映射到彩色图像上,如图6所示,图6(a)为光线较暗的情况,图6(b)为正常光照的情况,图6(c)为光照较强的情况,图6(d)为背景中有类肤色区域和其他人物,图6(e)为指尖不同指向时的情况。可以观察到本文算法在各种光照变化、背景干扰、指尖指向不一的情况下仍能够准确检测到伸出的指尖。

相对于同样使用深度图像信息的方法,如曹雏清[11]等人的分割方法需假设人手为距离摄像头最近的物体,而本文算法通过引入用户ID分类,可以很好克服前景干扰。另外,曹的方法使用固定阈值,在手掌伸出角度较大时,也会造成手势分割不完全或者范围过大,本文算法采用自适应阈值分割的方法可以解决此问题。如图7所示,当操作者之前有其他物体或者手部倾斜较大时,使用曹雏清等人的方法进行手势分割不能正确得到人手图像而造成漏检、误检,但是本文方法不受干扰。

图6 不同实验条件下的检测效果Fig.6 Detection performances of different experimental conditions

图7 前景干扰及手部倾斜时的检测效果Fig.7 Detection performances of occlusion and hand leaning

从以上实验中随机选取1 800帧图像(0~5个手指各300帧),其中包含了不同光照、背景及指尖指向的各种情况,统计检测结果,得到表1数据。检测正确定义为:伸出几个手指就检测到几个指尖,多检、漏检均为错误。指尖数目平均检测正确率为97.9%。从结果可以看出不同手指数目的总体检测正确率较高,在环境变化的情况下仍能保持较好的鲁棒性。

表1 检测正确率Table 1 Detection accuracy rate

表2对比了本文方法与曲率法检测指尖的精度(指尖实际位置为指尖正中间)及消耗时间。可以看出指尖检测精度差别不大,但是本文算法耗时较短。指尖位置产生误差的原因为:某些手势下,指尖点并非是距离掌心的最远点,可能是其旁边的像素,因而造成数个像素的误差。

表2 实验误差与耗时比较Tab.2 Experimental error and time consumption

通过以上实验可见,基于深度信息的手势分割能够在各种情形下有效分割出手部图像,稳定快速地进行指尖检测。但是深度图像也有其局限性。如图8所示,左图为人手在距离摄像头1.7 m时,右图为人手在距离摄像头1.2 m时,结果表明由于设备精度问题,在1.7 m时能检测出伸出手指的个数,但是对于指尖的真实位置的准确定位有误差。

图8 人手距离摄像头1.7 m与1.2 m时的效果Fig.8 Detection performances in the distance of1.7 m and 1.2 m

4 结束语

本文提出了一种基于深度图像的手势分割和指尖检测方法,在不使用MSKinect SDK的骨骼数据情况下,能够快速鲁棒地达到预期效果。相对于传统彩色摄像机,基于深度图像的方法很好地克服了光照、背景、其他人物的干扰,并能在较远距离(1.2~1.7 m)内保证检测效果有效,使手势识别应用环境大大延伸。另外,本方法可以为基于Kinect的人体肢体动作识别、手势识别系统提供指尖的定位和运动轨迹数据,以便进行静态手势识别和手指动作动态识别。

[1]翁汉良,战荫伟.基于视觉的多特征手势识别[J].计算机工程与科学,2012,(2):123 -127.

[2]于美娟,马希荣.基于HMM方法的动态手势识别技术的改进[J].计算机科学,2011,(1):251-252.

[3]RAFAEL B,MIGUEL SD.Skin Color Profile Capture for Scale and Rotation Invariant Hand Gesture Recognition[J].Lectures Notes in Computer Science,2009,5085:81 -92.

[4]曹建秋,王华清,蓝章礼.基于改进YCrCb颜色空间的肤色分割[J].重庆交通大学学报:自然科学版,2010,(3):488-492.

[5]于洋.基于手形特征的静态手势识别[D].河北工业大学,2007.

[6]SCHWARZ L A,MKHITARYAN A.Estimating Human 3D Pose from Time-of-Flight Images Based on Geodesic Distances and Optical Flow[C].Proceeding on Automatic Face& Gesture Recognition and Workshops(FG 2011),2011 IEEE International Conference,2011.700 -706.

[7]瞿中.基于改进的最大类间方差算法的图像分割研究[J].计算机科学,2009,(5):276 -278,290.

[8]张登康,郭太良,姚剑敏,等.改进肤色识别参量和轮廓特征相结合的指尖检测[J].光电子技术,2012,(3):185-189.

[9]OKA K,SATO Y,KOIKE H.Real- time fingertip tracking and gesture recognition[J].Computer Graphics and Applications,2002,22(6):64 -71.

[10]TOMITA A JR,ISHIIR.Hand Shape Extraction from a Sequence of Digitized Gray-Scale Images[C].Proceedings of the 20th International Conference on Industrial E-lectronics,Control and Instrumentation.Bologna:IEEE Computer Society Press,1994.1925- 1930.

[11]曹雏清,李瑞峰,赵立军.基于深度图像技术的手势识别方法[J].计算机工程,2012,(8):16 -18,21.

猜你喜欢
人手指尖手势
治理“指尖乱像”不宜一散了之
虔诚之花在指尖绽放
挑战!神秘手势
指尖上的生活,指尖上的美
木兰从军
V字手势的由来
指尖童话
胜利的手势
人手不够 ——原载俄罗斯漫画网▲