摘 要: 针对基于视觉的手势识别技术对环境背景要求较高的问题,提出了一种利用深度信息进行手势提取和识别的研究方案。采用Kinect深度摄像头,通过中值滤波以及深度信息与邻域特点来分割手部区域并用Canny算子提取出手势轮廓,再以深度图像的凸缺陷指尖来完成对指尖的检测,从而实现对数字手势1到5的手势识别。该方法可快速有效地对指尖进行检测,鲁棒性和稳定性都比其他方法更好。实验结果表明,该手势识别方案的平均识别率达到92%,证明了该方法的可行性。
关键词: 手势识别;Kinect;Canny算子;凸缺陷检测
0 引言
人机交互(Human-Computer Internet,HCI)是指人和计算机之间通过某些交互方式(媒介、对话接口等),使用某种对话语言来传递和交换信息,是计算机系统的重要组成部分[1]。在很长一段时间里,以鼠标和键盘作为输入设备、字符文本和图形窗口作为输出设备是最主要的人机交互方式。近年来,随着计算机视觉技术的不断发展与完善,使用摄像头进行手势的捕捉是手势识别的主要方式。与传统的需要专用硬件设备(数据手套输入设备等)辅助才能完成手势输入相比,自然人机交互实现的手势输入具有广阔的应用前景和重要的研究价值。
使用计算机视觉技术进行手势输入,需要对获得的手势图像进行手势分割,将手势从整个输入图像中分割出来。手势提取的方法主要有以下三种:(1)增加限制法:该方法是通过增加种种限制因素来增加背景区与手势区的对比,主要使用背景相减或者差分法,但该方法降低了人机交互所提出的自然性,故主要用于手势训练样本[2]。(2)肤色模型法:肤色在特定空间中总是分布在某个区域,可以根据肤色区域与非肤色区域将手势分割出来。ALON J等人[3]采用肤色模型与运动信息结合的方法来进行手势分割,但肤色易受光照变化、摄像机参数、人类种族、年龄、性别等因素影响。(3)模板匹配法:该方法首先建立一个手势的训练模板数据库,用这些模板遍历整幅图像并进行匹配,在匹配的同时完成识别[4]。其缺点是运算量较大,不能有效地运用于实时跟踪识别中。
2010年微软公司推出了用于Xbox 360的体感外设3D摄像机Kinect,采用结构光编码技术获得拍摄图像深度信息。Kinect摄像部分包括红外发射器、红外摄像头和RGB摄像头。图像处理器通过分析散斑图案获得空间距离生成深度影像。
本文依据Kinect高效且廉价的硬件基础,基于图像深度信息的手势模型,首先利用中值滤波对深度数据做噪点去除和平滑处理,然后通过二值化、骨骼点进行手势提取,再以深度图像的凸缺陷指尖来作为检测基础,对已分割出的手部二值图像用Canny算子提取出手势轮廓,利用凸缺陷之间的关系剔除伪指尖点,完成对指尖的精确检测。基于Kinect深度图像信息的手势提取与识别由于手势分割只与手和摄像头之间的距离有关,故对背景复杂干扰的鲁棒性较好。
1 图像深度信息的获取及预处理
一个完整手势识别主要分为图像深度信息获取与预处理、图像深度信息的手势提取分割、手势建模、手势识别等几个步骤,流程图如图1所示。
1.1 图像深度信息获取原理
Kinect共有3个镜头,中间是普通的RGB彩色摄像头,左边是红外发射器,右边是红外CMOS摄像头组成的深度传感器。图像深度获取是通过左右两边的红外发射器和红外CMOS摄影机一同完成的,红外发射器发出红外光覆盖整个待检测区域,与此同时红外线CMOS摄影机接收反射光线得到深度图像,其中每一个像素的颜色代表了那一点物体与摄像头的距离。基于Kinect获取的图像深度信息图如图2所示。
1.2 图像深度信息预处理
中值滤波是一种基于排序统计理论、能有效抑制噪声的非线性数字滤波技术,常被用于滤除图中的斑点噪声和椒盐噪声。其基本原理是把数字图像中一像素点p(i,j)的值用该点的一个邻域窗口w中各点值的中值代替,使周围像灰度值接近真实值,从而消除孤立噪声点。其方法是把该邻域窗口w中所有像素的灰度值按从小到大的次序排列,生成单调上升(或下降)的二维数据序列,并选择中间值作为中心像素点p(i,j)的灰度新值,窗口移动时,就能够通过中值滤波对图像进行平滑处理。中值滤波的基本公式可以表示为:
其中,f(r,s)表示邻域窗口w内任意像素点的灰度值,Nf(i,j)表示f(i,j)的实心邻域。本文中选择的w为11×11的正方形滤波窗口。
该算法不仅可以对噪声区域进行平滑处理,还可以很好地保持区域之间的边界形态。对图2(b)所示的深度信息图进行中值滤波,结果如图3所示,图3较好地说明了中值滤波是如何去掉结构化人为干扰的。中值滤波对于抑制边缘模糊有很好的特性,本文使用中值滤波算法实现了对深度图像的降噪滤波。
2 图像深度信息的手势提取与识别
2.1 手心的检测与跟踪
本文基于深度图像信息进行手部区域提取的基本流程为:先根据手心关节点坐标位置建立一个手部信息的矩形盒;再在这个矩形盒内以手心关节点位置开始向邻域逐个遍历像素,检测像素是否属于手部区域,如果符合条件就在二值图中置1,循环遍历所有需要遍历的邻域像素直到个数为空;最后得到手部区域的二值图。
在对手势进行检测完毕之后,调用Hand Tracker的startHandTracking()函数就可以对手部进行跟踪。图4为不同深度距离位置对手心检测的结果。
2.2 手势的分割
在检测跟踪到手心以后,根据手心Z坐标的深度值对深度图像进行分割,如式(2)所示:
其中,手部可能存在区域的像素值为255,其他区域为0,式(2)中的阈值设定为150 mm。
将手心点投影到2D空间,根据手的大小做一次二维分割,如式(3)所示:
其中,W(Z)表示以手心为中心的一个包围盒,大小与手势到Kinect的距离成正比。
基于最优化算法的Canny边缘检测算子[5],提取的边缘线形连接较为完整,定位准确性较高,效果好。本文采用此方法对深度图像进行边缘提取。首先用一阶偏导的有限差分来计算梯度的幅值和方向,再对梯度方向进行量化,使其只有8个方向,即0°、45°、90°、135°、180°、225°、270°、315°,对于每一个梯度强度非零的像素点,查找沿其量化后的梯度方向的两个相邻像素点,然后通过阈值判断为非边缘点还是候选边缘点。对于弱边缘点,如果它与强边缘点在8连通区域相连,则该点记为弱边缘点,同时将其边缘提取置为1,所有标记为1的点就成了最后的边缘。手部提取轮廓如图5所示。
2.3 手心、指尖检测与识别
为了获取更准确的手心坐标,利用细化方法中的距离变换(Distance Transform)算法来计算手部区域的骨骼,从而得到手心位置。
本文采用葛立恒扫描法(Graham Scanning Method)[6]进行凸包检测,在结束对凸包点的检测之后,采用参考文献[6]的方法继续计算缺陷点(Convex Defects),再由阈值判定条件得到代表手指凸包点的个数从而实现对1~5的检测识别,结果如图6所示。
3 实验结果验证
由表1实验验证结果可知,基于Kinect的深度图像手势识别平均正确率达到92%,能够达到基本手势识别的目的。使用深度图像信息进行手势识别可能会受到拍摄光照、角度和手势的弯曲程度的影响,通过识别结果可以了解到,手势1、2、3的出错概率较4、5多,造成错误识别的原因大都是因为手指的弯曲造成深度信息错位,这也是以后需要改进的方面。
4 结论
本文设计并实现了基于Kinect深度图像信息的手势提取与识别,此方案使用设备简单,计算量少,能有效提高工作效率。相比较于传统基于二维计算机视觉识别,该方法增加了深度信息,能够很好地去除复杂背景的影响,可以解决手指水平竖直移动容易识别错误的问题。但由于手势增加可能造成深度方向可分辨性降低,在后续工作中将考虑对平面信息和深度信息融合进行识别。
参考文献
[1] MINSKY M R. Manipulating simulated objects with real-world gestures using a force and position sensitive screen [J]. AQH Computer Graphics, 1984,18(3):195-203.
[2] 任海兵,祝远新,徐光,等.基于视觉手势识别的研究——综述[J].电子学报,2000,28(2):118-121.
[3] ALON J, ATHITSOS V, Yuan Quan, et al. A unified framework for gesture recognition and spatiotemporal gesture segmentation[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence,2009,31(9): 1685-1699.
[4] 赵亚飞.基于视觉的手势识别技术研究[D].杭州:浙江大学,2011.
[5] 舒欣,李东新,薛东伟.五帧差分和边缘检测的运动目标检测[J].计算机系统应用,2014,23(1):124-127.
[6] Graham scan. http://en.wikipedia.org/wiki/Graham_scan.