基于RGB-D图像的手势识别方法
2018-03-16谭台哲韩亚伟
谭台哲,韩亚伟,邵 阳
(1.广东工业大学 计算机学院,广东 广州 510006;2.河源广工大协同创新研究院,广东 河源 517001)
0 引 言
近年来随着科技的发展,人机交互广泛应用于人们的生活中,常见的人机交互如鼠标、键盘等,但这种交互方式限制了交互的速度和自然性[1-3];而手作为人体结构中最灵活的部分,能够在人机交互中向电脑及其一些智能设备更加方便地传递信息。早期,人们通过穿戴一些传感器对手部数据进行采集进而对手势进行识别,这样就造成成本很高昂,不利于普及,而且穿戴很不方便。随着摄像头精度的提高,基于计算机视觉的手势识别开始流行[4],国内的一些高校和科研机构也做了大量研究,例如,Ghosh D K等[5]提出了基于肤色分割和SVM的算法进行手势识别。因为手部是人体最灵活的部位之一,各种动作可以产生很大的扭曲性,为了保证鲁棒性,Yimin Zhou等[6]提出了一种把手掌和手指分开并分别取特征的方式进行手势识别,常亚楠等[7]使用HMM进行动态的手势识别,这些方法取得了不错的效果。然而,在手势识别的过程中,手部动作的采集受到光照、复杂背景、硬件特性的影响,识别准确率不高,而且不同环境识别结果偏差比较大。随着深度图像的引进,研究人员通常在识别的过程中运用彩色图像信息与深度信息相结合的方法[8-11],蒲兴成等[12]使用了改进Hu矩算法的Kinect手势识别,Zhaojie Ju等[13]提出了基于EMD距离和Lasso算法的深度图像手势识别,吴晓雨等[14]提出了基于深度人手定位和HOG特征的静态手势识别算法及基于改进HMMs的动态手势识别算法。对比以上方法,现阶段手势识别的难度主要集中在:①复杂环境下的手势分割问题;②手势的旋转不变性问题,方向不能固定;③复杂手势的识别;④手掌与手腕的分割问题。针对这种情况,本文通过Kinect摄像头采集到RGB-D深度图像信息,采用一种基于手部参数的手势识别算法,分割的过程中采用肤色分割和深度信息分割相结合的方式进行。手势特征提取过程中通过对图像进行卷积、阈值化和形态学处理得到手指部分的图像信息,然后通过手掌质心和手指质心来保证手势的旋转不变形。最后在极坐标下具体识别每个手指的具体角度位置和弯曲状态,这样能够克服前人使用的方法中出现的上述问题,达到更高的识别率、保证更强的鲁棒性,并且能够准确地判别左右手信息。
1 手部提取
1.1 深度图像获取
本文采集深度图像的时候选择设备是Kinect,Kinect是由微软公司开发的体感摄像机,特别之处在于该摄像机有3个摄像头,从左到右依次是红外投影机、彩色摄像头、红外摄像头。中间的彩色摄像头是采集RGB图像的,两端两个是通过发射/接收红外线来提供深度数据。经过实验可知,从Kinect中采集的深度图像一般情况下是不稳定的,存在很多的噪声和空洞,而且边缘深度值不稳定,因此在进行下一步识别之前要进行一些滤波和形态学处理[14],采集设备如图1所示。
图1 Kinect设备
1.2 手势分割
经过中值滤波和形态学处理以后得到的深度图像如图2所示。
图2 采集图像信息
手势分割是手势提取中最重要的部分,只有手势提取更加完整清晰才能为后续的识别提供更多的准确的参数依据。本文使用肤色和深度信息相结合的方式进行分割,首先根据肤色消除掉除人体以外的信息,这样就能够很好地去除前景及非人体部位干扰,然后对通过肤色分割后的深度图像进行进一步处理,本文使用根据深度信息使用最大类间方差法与固定阈值相结合的方法,分割出手势区域。
1.2.1 肤色分割
本文选择在HSV空间采用改进的高斯模型的方法进行肤色检测和肤色分割,首先要将RGB空间转到HSV空间。高斯模型的基本原理是根据肤色分布的概率建立高斯模型。计算公式如下
D(Cb,Cr)=exp[-0.5(P-μ)TC-1(P-μ)]
(1)
其中,μ表示均值、C表示协方差,根据建立的模型计算待测矢量P(Cb,Cr)与肤色的相似度,对计算出的结果D进行归一化,然后进行阈值化以后就能够得到具有深度信息的肤色图像的二值图像。分割效果如图3所示。
图3 肤色分割
1.2.2 深度信息分割
从以往的研究成果和实验来看[14],当手和身体部分距离较近或者手掌与摄像机平面不平行的时候,直接使用最近点灰度值和固定阈值结合来分割效果不好。
在这种情况下本文考虑使用最大类间方差法与固定阈值相结合的方法,分割出手势区域。首先假设一个图像中包含L个灰度级,那么灰度值为i的像素点个数为Ni,一般而言灰度值为0的点被认为是背景点,所以一张图像中人体部分总的像素点数为N=N1+N2+…NL-1,因此可以得到灰度值为i的概率为pi=Ni/N。可以假设阈值为t,通过阈值t把人体躯干部分和手的部分区分开来,躯干部分为A=(1,2,…,t),手势部分为B=(t+1,t+2…L-1)。由上可得两个部分出现的概率分别是
(2)
(3)
因此人体躯干部分和手势部分的灰度均值为
(4)
而灰度图像的总均值为
(5)
由上可以推出人体躯干部分和手势部分的类间方差为
σ2=PA(wA-w0)2+PB(wB-w0)2
(6)
而上述所说的类间方差越大就表示手势部分和躯干部分的灰度值差别越大,因此使得类间方差最大的t就是说要求的最佳阈值
(7)
由上面所得到的t,再通过实验设置一个阈值τ,可以很完整地分割出手部图像
(8)
通过这两种方法分割出的效果如图4所示。
图4 手势分割
通过肤色分割和深度信息分割相结合的方式对图像进行分割,这样能够既能够很好地去除前景和背景干扰,又能去除光照等影响。对比几种算子效果,最终选择使用最简单的Roberts算子检测方法对分割后的图像进行边缘检测处理,得到图像b,如图5所示。
图5 手势边界
1.3 手指图像提取
为了得到更加准确的数据信息,增强下一步手势识别的鲁棒性,本文利用特殊的卷积处理,去掉手掌部分,然后得到手指部分的图像信息。卷积算子G模型如下[7]
(9)
首先,通过图像的卷积处理,得到图像b,其中Ib(x,y)=Ia(x,y)×G;
然后,对得到的图像b进行阈值处理,得到图像c,其中
(10)
最后,对图像c进行形态学膨胀处理,得到图像d。过程如图6所示。
图6 手指分割过程
2 特征提取
2.1 获取质心
从已知分割后的手部图像a获取图像信息。设手势二值分割图像的质心为Phc(x0,y0)
其中,x,y为图像坐标,I(x,y)为在图像在该坐标下的灰度值。用上述同样的方法,求图像c手指部分的质心Pfc。
2.2 手的方向
由上面求得的手掌质心和手指质心可以得到整个手的方向
(12)
3 手势识别
手势建模图,如图7所示。
图7 手势建模
(13)
Pn可以认为是第n个角度手指部分的面积[8],即角度在[θn,θn+1]范围内,半径在[r1,r2]范围内,根据手部特征,一般可取r1=0.5Rp,r2=2.5Rp。根据手的形状特征,一般手的曲张度在180度以内,因此取M值取180。然后对Pn进行标准化,可得
(14)
按照积分的定义以及手指的分布特性,最终求得的Pn_norm中极大值中的最大的5个值所在的位置就是5个手指的角度位置。由上可以求得每一个手指部分的与0度之间的角度为θn,n=1,2,3,4,5。因此可以定义
θ=θn+1-θn,n=1,2,3,4,5
(15)
当θ取最大值时,如果θn≥90度,则表示右手,如果θn<90度时,则表示左手,当然这样的判别仅限于常规手势,非常规手势会有误差。
在角度变化范围内,因为由上信息可以非常具体地得到5根手指所处的位置和角度信息,设指尖到腕部Pw的距离为Di,这样根据手指的特性,可以很精确地判断手指的弯曲和伸直状态
(16)
通过以上方法,在常规手势下可以准确判断手势样例是左手还是右手。而通过手指具有的特性可以判别出手指是弯曲还是伸直。
4 实验与结果分析
4.1 实验数据介绍
本文一共定义了0-5这6种手势,分别代表6种不同手指弯曲状态。由于网络上并没有完全公开的手势识别数据库,因此本文是使用实验室设备Kinect对20个人,每个手势左右手分别采集30张深度图像(包括强光、黑暗、复杂背景下各10张深度图像),并且每个动作伸手的角度是不相同的。一共采集7200张图片进行测试。手势样板如图8所示。
图8 手势样板
4.2 实验结果分析与对比
蒲兴成等[13]提出了一种基于改进Hu矩算法的Kinect手势识别算法,吴晓雨等[14]提出了基于深度和HOG特征的静态手势识别算法,这两种方法作为本文的对比方法。本文是基于深度图像进行手势识别,在实验的过程中,由于Kinect的特性,共有3个摄像头,既可以采集深度图像,又可以采集RGB图像,RGB图像用于肤色分割,深度信息用于二次分割。
实验是在12GRAM、2.6GHzIntelCPU笔记本上进行,Kinect型号是kinectforXbox360,使用VS2012进行编程,调用OPENCV库函数对数字0-5这6种手势分别通过两种方法进行手势识别。
实验分为两个部分,第一部分不对左右手进行区分直接实验,然后作对比。总体识别率见表1。
表1 识别率对比
第二部分是将左右手放在一起进行识别,由于另外两种方法没有对左右手进行分别,因此没有做对比实验。先识别左右手,然后对手指的弯曲和伸展状态进行识别。实验结果见表2。
表2 左右手判别
4.3 鲁棒性验证
为了验证本文的识别效果,特别对3种不同的环境下手势识别率进行了一下对比,分别将采集到的3种场景下的手势各400张图片进行了分别实验,实验结果见表3。
表3 特殊环境识别率
从实验结果上面来看,显然本文的方法取得了较好的识别率,当光照或环境过于复杂的情况下,本文提出的算法比另外两种算法分割出的手势更加完整。而基于HOG直方图的识别效果最差。从本文方法错误识别的图像来看,当手指并拢或者相邻手指之间呈现非常规角度时,识别效果会受到一定影响。本文方法对光照、前景和背景干扰都有很强的鲁棒性。对于左右手的识别,识别率达到了96%,从识别错误的图片可以看出,当相邻手指呈现非常规角度的时候,左右手识别会受到影响。3种特殊环境下识别效果如图9~图11所示。
图9 光照条件下
图10 黑暗条件下
图11 复杂背景下
5 结束语
本文利用RGB-D图像的深度和彩色数据,提出了一种鲁棒性强的静态手势识别方法。本文方法利用深度信息和彩色信息相结合的方法对手势进行分割能够消除背景和光照条件对采集手势数据信息的影响;而特征提取的过程中通过卷积和阈值相结合的方式得到手指信息特征,以及利用具体的手指角度信息和尺寸信息能够很准确地判断手指的弯曲状态和左右手信息。通过对比实验,本文的方法对手势的判别更加精准,而在左右手的判别上也有很高的识别率。
[1]Ben Abdallah M,Kallel M,Bouhlel M S.An overview of gesture recognition[C]//6th International Conference on Sciences of Electronics,Technologies of Information and Telecommunications.IEEE,2012:20-24.
[2]Song Y,Demirdjian D,Davis R.Continuous body and hand gesture recognition for natural human-computer interaction[J].ACM Transactions on Interactive Intelligent Systems,2012,2(1):1-28.
[3]WU Xia,ZHANG Qi,XU Yanxu,et al.Survey on current situation of the development of gesture recognition[J].Electronic Science and Technology,2013,26(6):171-174(in Chinese).[武霞,张崎,徐艳旭,等.手势识别研究发展现状综述[J].电子科技,2013,26(6):171-174.]
[4]Droeschel D,Ckler J,Behnke S.Learning to interpret poin-ting gestures with a time-of-flight camera[C]//ACM/IEEE International Conference on Human-Robot Interaction.IEEE,2011:481-488.
[5]Ghosh DK,Ari S.Static hand gesture recognition using mixture of features and SVM classifier[C]//IEEE International Conference on Communication Systems and Network Technologies.IEEE,2015:1094-1099.
[6]CHANG Yanan.Dynamic gesture recognition based on HMM[D].Guangzhou:South China University of Technology,2012(in Chinese).[常亚南.基于HMM的动态手势识别[D].广州:华南理工大学,2012.]
[7]Zhou Yimin,Jiang Guolai,Lin Yaorong.A novel finger and hand pose estimation technique for real-time hand gesture recognition[J].SCI-Pattern Recognition,2016,49(C):102-114.
[8]Wu D,Zhu F,Shao L.One shot learning gesture recognition from RGBD images[C]//Computer Vision and Pattern Recognition Workshops.IEEE,2012:7-12.
[9]HE Xiaolei.Gesture recognition based on depth information and color information[D].Hubei:Huazhong University of Scie-nce and Technology,2012(in Chinese).[何小磊.基于深度信息和彩色图像的手势识别[D].湖北:华中科技大学,2012.]
[10]Panwar M.Hand gesture recognition based on shape parameters[C]//International Conference on Computing,Communication and Applications.IEEE,2012:1-6.
[11]Chen M,Alregib G,Juang BH.Feature processing and mo-deling for 6D motion gesture recognition[J].IEEE Transactions on Multimedia,2013,15(3):561-571.
[12]PU Xingcheng,WANG Tao,ZHANG Yi.Kinect gesture recognition based on improved Hu moment algorithm[J].Computer Engineering,2016,42(7):165-172(in Chinese).[蒲兴成,王涛,张毅.基于改进Hu矩算法的Kinect手势识别[J].计算机工程,2016,42(7):165-172.]
[13]Ju Z,Gao D,Cao J,et al.A novel approach to extract hand gesture feature in depth images[J].Multimedia Tools & Applications,2016,75(19):11929-11943.
[14]WU Xiaoyu,YANG Cheng,FENG Qi.Research on Kinect-based hand gesture recognition algorithm and its applications[J].Computer Applications and Software,2015,32(7):173-176(in Chinese).[吴晓雨,杨成,冯琦.基于Kinect的手势识别算法研究及应用[J].计算机应用与软件,2015,32(7):173-176.]