基于kinect的手指定位

时间:2022-10-29 03:37:59

基于kinect的手指定位

摘要:为了实现更加自然的人机交互方式,利用微软的kinect体感设备提出一种实时手指定位方法。本方法首先利用kinect的关节点信息获取包含手部的区域,然后在此区域利用肤色颜色模型来提取出人的手部区域,并利用canny方法提取出手部的边缘信息,最后利用手部边缘曲线的曲率来判断手指的指尖。本方法能快速准确的定位手指位置,为进一步进行手指动作的识别做基础。

关键词:人机交互;kinect;骨架跟踪;肤色模型;k曲率

中图分类号:TP18 文献标识码:A 文章编号:1009-3044(2014)28-6713-03

人机交互(Human-Computer Interaction, HCI):是指为完成确定任务,在人与计算机之间进行信息交换的过程。传统的人机交互方式(鼠标、键盘、触摸屏)则由于其便携性不足而显得捉襟见肘。在人机交互的研究中,能够以自然的方式给计算机提供交互信息是当前人机交互系统研究的热点。

由于在传统的人机交互中人类输入给计算机的信息都是都是通过键盘和鼠标来完成的,而键盘和鼠标的操作都利用手部的动作来实现的,因此在自然的人机交互中利用手部动作来进行人机交互是首选的方式。手部的手指是人体最灵活的部位,因此手指的动作能提供丰富的三维信息,利用这些三维信息可以方便户以操作真实世界物体的方法去操作计算机,这必将极大的增强人机交互系统的真实感。对人体的手指进行识别,然后对识别后的手指指尖进行动态的跟踪,利用实时跟踪的动态三维信息来进行人机交互,在自然人机交互系统中有很大的应用前景。

随着微软Kinect设备的推出,利用这一廉价的硬件设备能够实时捕获场景的彩色和深度信息。该文实现了是利用kinect来实时检测手指的方法,本方法首先利用kinect的骨架信息定位关节点righthand和lefthand的位置信息[1],然后在此区域的附近利用肤色颜色模型来提取出人的手部区域,同时利用canny方法提取出手部的边缘信息,最后利用手部边缘曲线的曲率来判断手指的指尖。

1 基于kinect的骨架追踪

Kinect利用模式识别和机器学习的方法,识别出20个关节点,通过20个关节点来表示一个骨架的,具体由下图1可以看到。当你在Kinect前面做动作的时候,这些关节点的位置的也在不断的变化,因此,通过对关节点之间位置的变化信息可以识别出人体的动作。

Kinect SD中的骨豁追踪系统有四个主要的对象,分别是骨豁数据流(SkeletonStream)、骨豁框架(SkeletonFrame)、骨豁模型(Skeleton)和关节点(Joint)。

当Kinect正确识别操作者后,kinect 运行库中SkeletonFrameReady事件被触发来处理骨骼跟踪,该事件的参数包含两个重要的对象:SkeletonFrame和Skeleton。在Skeleton对象的Joints属性集合中保存了所有关节点的信息。每个关节点的信息都是一个Joint对象,其中的Position的X、Y、Z表示了三维位置。其中Z是Kinect到识别对象的距离。

利用kinect sdk中的MapSkeletonPointToColorPoint 函数可以把骨骼空间的点映射到彩色图像空间中。因此只要在骨骼空间中找到代表hand right和hand left的骨架中的关节点,就能利用MapSkeletonPointToColorPoint函数找到手部的区域大概位置。在此,以hand关节映射到彩色空间的点坐标为中心设定一个区域来查找手部的区域。

2 基于 YCbCr 空间的手部区域提取

图像中皮肤的颜色主要取决于血红蛋白、黑色素和光照情况。由于颜色的浓度主要影响的是饱和度而不是色相,所以在光照一致的环境中,不同肤色人种的皮肤色调是大致不变的,这是静态肤色模型构建的基础。基于颜色的皮肤检测具有简单、快速、直观,不受物体形状变化及视点改变等影响的优势,受到研究者的普遍重视,具有重要的理论研究意义和应用价值。

本文需要寻找一个对人的肤色分布有着很好聚类性的颜色空间,在这个空间中,利用肤色信息可以有效的将人的手势和其他背景分离出来,传统的颜色空间有 RGB,HSV,YCbCr,LAB 空间等,由于RGB 空间的三个颜色分量具有较强的相关性,不能将色彩信息和亮度信息分离开来,故它不适合用于肤色分割,该文将重点放在YCbCr 空间上,并将 YCbCr 空间的肤色分割用到本系统中[2]。通过研究表明,发现在 YCbCr颜色空间进行肤色分割具有如下特点[3]:

1) 在 YCbCr颜色空间,不同的肤色上分布在比较小的范围内;

2) 在 YCbCr颜色空间,肤色的色度受到亮度变化的影响较小;

3) 在 YCbCr颜色空间,肤色聚类性较好,适合做分割。

YCbCr是色彩空间的一种,常用于数字视频领域,其中Y是指亮度分量,Cb指蓝度分量,而Cr指红度分量。YCbCr它可以由 RGB 空间线性变换得到,RGB 变换到 YCbCr 空间的转换公式为:

[Y= 65.481R+ 128.553G +24.966B+ 16Cb= 37.797R +74.203G+ 112.000B +128Cr=112.00R +93.786G +18.214B+ 128] (1)

通过实验表明,在YCbCr颜色空间中进行肤色分割时,由于Y分量的值表示的是亮度的变化,对肤色的影响较小,故只用考虑Cb和Cr两个颜色分量。当Cb的数值在区间[77,127],Cr的数值在区间 [147,173]时能取得较好的效果。图显示了利用YCbCr颜色模型分割手部区域的结果:

在获取了手部区域的图像之后,首先利用自适应阈值方法把彩色图像变化成二值图像,然后利用canny算法获取手部区域的边缘轮廓。实验结果如图所示,图3为有彩色图像变化得到的二值图,图4是手部的边缘轮廓图。

3 基于K曲率的手指定位

在得到了手部区域的轮廊之后,就可以利用某种算法来找出指尖点所处的位置。该文利用K曲率算法来进行手指指尖识别[4][5],如图5所示,P(i)为手部区域的轮廓线上的一个点。给定一个常数K,顺时方向前进K个点,得到点P(i+K),逆时针方向前进K个点,得到点P(i-K)。

图形轮廓上的点P(i)的K曲率计算方法如下:以P(i)为起点,P(i-k)为终点得到向量V1,以P(i)为起点,P(i+k)为终点得到向量V2。利用向量V1与的向量V2之间夹角α的余弦作为点P(i)的K曲率。夹角计算公式如公式(2)所示。

[cosα=V1?V2|V1||V2|] (2)

通过判断向量V1和V2的夹角α是否在某一范围内,来判断轮廓上的点P(i)是否为指尖点。所选择的判断角度大小要合适,如若判断角度太大,可能会将手腕处那一段误认为为指尖;当手指较短时或者由于离Kinect较远,造成截取图片中手指较短时,测出的角度会很大,如若判断角度太小,就无法识别出指尖。经过实验发现当K=20及α

4 结束语

由实验分析可知,采用本文的方法能实时的检测到手指指尖。在获取了手指的位置信息后,就可以利用kinect sdk开发包把彩色图像空间的位置信息映射到深度空间,进而就能获取手指的动态深度信息。利用手指的动态深度信息就能判断手指的动作,从而为高级的人机交互系统提供信息来源。

参考文献:

[1] 吴国斌,李斌,阎骥洲.Kinect人机交互开发实践[M].北京:人民邮电出版社,2013.

[2] Chai D,Ngan K N. Locating facial region of a head and shoulders color image[C].Proceedings of the 3rd International Conference on Automatic Face and Gesture Recognition,1998:124-129.

[3] 江凤兵.不同颜色空间肤色检测算法的研究[D].赣州:江西理工大学,2011.

[4] Trapero Cerezo.3D Hand and Finger Recognition using Kinect. Universidad de Granada,2012.

[5] 王松林.基于Kinect的手势识别与机器人控制技术研究[D].北京:北京交通大学,2014.

上一篇:基于文献计量学的我国心理学学科半衰期分析 下一篇:DWR与Quartz在WEB工程中的综合应用