硕 士 学 位 论 文
题 目: 基于Kinect深度信息的
手势识别
研 究 生 郑 斌 珏 专 业 计 算 机 应 用 技 术 指导教师 赵 辽 英 教 授
完成日期 2014年3月
杭州电子科技大学硕士学位论文
基于Kinect深度信息的手势识别
研 究 生: 郑 斌 珏 指导教师: 赵 辽 英 教授
2014年3月
Dissertation Submitted to Hangzhou Dianzi University
for the Degree of Master
Gesture recognition based on Kinect
depth data
Candidate: Zheng BinJue Supervisor: Prof. Zhao Liaoying
March, 2014 杭州电子科技大学
学位论文原创性声明和使用授权说明
原创性声明
本人郑重声明: 所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品或成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
申请学位论文与资料若有不实之处,本人承担一切相关责任。
论文作者签名: 日期: 年 月 日
学位论文使用授权说明
本人完全了解杭州电子科技大学关于保留和使用学位论文的规定,即:研究生在校攻读学位期间论文工作的知识产权单位属杭州电子科技大学。本人保证毕业离校后,发表论文或使用论文工作成果时署名单位仍然为杭州电子科技大学。学校有权保留送交论文的复印件,允许查阅和借阅论文;学校可以公布论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存论文。(保密论文在解密后遵守此规定)
论文作者签名: 日期: 年 月 日
指导教师签名: 日期: 年 月 日
杭州电子科技大学硕士学位论文
摘要
随着计算机技术的发展,人机交互一直朝着人性化与简单化的方式不断的持续发展,而手势识别是人机交互的一个重要方式。相比较鼠标,键盘等接触式的操作方式,自然而直观的手势更符合人的自然行为。基于计算机视觉手势识别技术对环境背景要求高,通过Kinect传感器获取的深度图像可以解决该问题。因此研究基于深度信息的手势识别对提高人机交互效果,推动人机交互技术在各行各业的应用具有重要意义。本文对基于深度信息的手势识别进行了较深入的研究,开发了一个手势识别系统,研究内容如下:
首先,分析了手势识别研究的背景及意义、国内外的研究现状,给出了常用的几种手势识别算法。
其次,研究了Kinect传感器内部结构和工作原理,以及利用OpenNI框架获取深度信息并进行预处理的具体方法。
再次,研究了基于Kinect深度信息的静态手势识别算法。先介绍了手部提取的算法。然后研究了传统的手指检测方法,同时,对静态手势提出了一种阈值拐点检测法,该方法能准确提供手部的重要信息:指尖、手指、掌心的准确位置,提供信息让手部与系统做即时的互动。本系统可以在复杂背景的情况下准确的判断手指和手心的位置,并且容许手掌和手臂一定程度的翻转。最后在手指识别的基础上,实现了手指名字和数字手势的识别。
最后,对动态的手势识别做出了深入的研究,先使用了Kinect SDK获取用户索引和人体的骨骼特征,并进行了平滑处理。然后研究了DTW动态规划算法的原理,根据DTW算法识别手势的时候不同的关节点的权重是不同的,提出加权DTW动态规划算法,实验证明该算法能有效地用统计方法进行训练手,然后通过分析手势轨迹特征与加权的骨骼关节点序列匹配达到识别的功能,能识别挥手、移动、推动等动作。该方法识别稳定,不受背景、距离等的影响,能满足远距离的动态手势识别的需要。
关键词:人机交互,手势识别,深度信息,手指检测,骨骼追踪,动态规划
I
杭州电子科技大学硕士学位论文
ABSTRACT
With the development of computer technology, human-computer interaction has been moving towards sustainable development of humanity and simplistic way constantly, and gesture recognition is an important way of human-computer interaction. Compared to the mouse,keyboard and other contact mode of operation, natural and intuitive gestures are more natural human behavior. Hand gesture recognition based on computer vision high requirements on environmental background, depth image obtained by the Kinect sensor can solve this problem. So the research of gesture recognition based on depth information to improve the interactive effect based on human-computer interaction, promoting technology plays an important role in all walks of life application. This paper carried out a thorough study on hand gesture recognition based on depth data, and developed a gesture recognition system, research contents are as follows:
Firstly, analyses the present research situation of the background and significance of the study,gesture recognition at home and abroad, and gives some gesture recognition algorithms.
Secondly, research the internal structure and working principle of Kinect sensor, the specific method for pretreatment and the use of the OpenNI framework and obtaining the depth information.
Thirdly, study on static hand gesture recognition algorithm based on Kinect depth information. First the paper introduced the hand extraction algorithm. Then the finger detection method, the traditional at the same time, put forward a threshold point detection method for static hand gesture, the method can accurately provide important information to hand: the accurate position of finger, finger, palm, provide information to let the hand and do real-time interactive system. The system can determine the fingers and the palm of the hand accurately under complex background position, and allow the hand and arm to a certain degree of turnover. Finally, on the base of identification of the finger, we realized a finger name and digital gesture recognition.
Finally, make a thorough research on gesture recognition dynamic. First, we used Kinect SDK to obtain the skeletal features of user index and the human body, and the smoothing. Then we study the principle of DTW dynamic programming algorithm, DTW algorithm according to the weight of the gesture recognition of different joint point is different, we proposed the weighted DTW dynamic programming algorithm,
II
杭州电子科技大学硕士学位论文
experiments show that the algorithm can effectively trained hand by statistical method, and then achieve the recognition function by skeletal joint trace characteristics and weighted analysis hand rail sequence matching, can identify waved, mobile, promoting action. The method is identified stable, and not influenced by background, distance etc., can meet the need of dynamic hand gesture recognition of remote.
Keywords:Human-computer interaction, gesture recognition, finger detection,
depth data, Skeletal tracking, dynamic programming
III
杭州电子科技大学硕士学位论文
目 录
摘要 ............................................................... I ABSTRACT .......................................................... II 第一章 绪论 ........................................................ 1 1.1 课题研究背景及意义 ........................................... 1 1.2 手势识别的研究概况 ........................................... 1 1.2.1 手势识别技术的发展状况 .................................... 1 1.2.1.1 基于数字手套的手势识别 ................................ 1 1.2.1.2 基于视觉的手势识别 .................................... 3 1.2.2 基于深度信息的手势交互技术 ................................ 3 1.3 本文主要研究内容及方法 ....................................... 4 1.4 论文的章节安排 ............................................... 5 第二章 深度图像获取与预处理 ........................................ 7 2.1 开发环境介绍 ................................................. 7 2.1.1 Kinect传感器 .............................................. 7 2.1.2 OpenNI框架 ................................................ 8 2.2 深度图像的获取 .............................................. 10 2.2.1深度信息的表示 ............................................ 10 2.2.2深度信息与距离的转换 ...................................... 11 2.2.3深度图像到RGB图像的配准 .................................. 11 2.3 深度图像预处理 .............................................. 12 2.3.1深度中值滤波 .............................................. 12 2.3.2形态学操作 ................................................ 13 2.4 本章总结 .................................................... 14 第三章 基于深度信息的静态手势识别 ................................. 15 3.1 引言 ........................................................ 15 3.2 手部提取 .................................................... 15 3.2.1基于阈值分割获取手部图像 .................................. 16 3.2.2基于聚类算法区分左右手 .................................... 16 3.3 手指识别 .................................................... 17
3.3.1 手部凸包检测 ........................................... 17 3.3.2 手部轮廓检测 ........................................... 18 3.3.3 掌心检测 ............................................... 19 3.3.4 手指检测 .............................................. 20 3.4 手势识别及其应用 ............................................ 24 3.4.1 手指名字识别 ............................................. 24 3.4.2 手势数字识别 ............................................. 26 3.5 本章总结 .................................................... 27 第四章 基于深度信息的动态手势识别 ................................. 28 4.1 引言 ........................................................ 28
IV
杭州电子科技大学硕士学位论文
4.2 骨架追踪 .................................................... 28 4.2.1 提取骨骼特征 ............................................. 28 4.2.2 平滑滤波 ................................................. 30 4.3 动态手势识别 ................................................ 30 4.3.1 动态规划原理 ............................................. 30 4.3.2 加权DTW动态规划 ......................................... 31 4.3.3 动态规划算法流程 ......................................... 32 4.3.4 实验结果 ................................................. 33 4.4 本章总结 .................................................... 35 第五章 总结与展望 ................................................. 36 5.1 总结 ........................................................ 36 5.2 下一步工作 .................................................. 37 致谢 .............................................................. 39 攻读硕士期间科研成果 .............................................. 40 参考文献 .......................................................... 41
V
杭州电子科技大学硕士学位论文
第一章 绪论
1.1 课题研究背景及意义
随着计算机技术的迅速发展,人机交互已经成为人们生活和工作中最重要的一部分,人们追求自然的,方便的人机交互体验。从最原始的命令行界面到如今的以鼠标、键盘为媒介的图形界面,人机交互正是在不断的友好化,人性化,简单化和自然化。而最近这几年人机交互发展的领域和深度不断扩大,如语音识别,人脸识别,手势识别,人体动作识别等等。从人机交互的发展历史来看,过去计算机刚发明的时候是人类适应计算机,现在随着计算机的发展,开始不断适应人类。卡内基梅隆大学的Dan R.Olsen教授说:“人机交互是未来的计算机科学。我们已经花费了至少50年的时间来学习如何制造计算机以及如何编写计算机程序,下一个新领域自然是让计算机服务并适应于人类的需要,而不是强迫人类去适应计算机。”[1]计算机的发展也要遵循人类发展的理想模式,即与自然环境和谐生存。
手势识别[2]是新一代人机交互的一个重要方面。相比较鼠标,键盘等接触式的操作方式,自然而直观的手势更符合人的自然交互习惯。在虚拟现实、远程控制和交通等领域逐渐得到应用。用户自由的、直接的操纵用户界面,这种手势交互模式已成为未来的发展趋势,也成为近年来的一个研究热点。
1.2 手势识别的研究概况
1.2.1 手势识别技术的发展状况
1.2.1.1 基于数字手套的手势识别
手势识别的初期研究主要集中在机器设备上,手势是人手的一种运动,以表达一种情感或信息。早在20世纪70年代人们就开始对其进行分析和研究,把手势作为输入设备的最初研究需要专用硬件设备的辅助,数据手套就是这样的一种典型的输入设备。
数据手套[3]利用机械或光学传感器把手指的运动转化为电信号,这种电信号可以通过计算机转化为手部关节的位置、手指的伸展状况等丰富信息。数据手套采用光纤技术获取人手的伸展等信息,用磁传感器技术实现位置跟踪。1993年B.Thanmas等[4]研究出使用数据手套作为输入的媒介的目标控制系统,但这需要实验者带上一个专用设备。图1.1显示的是一个常见的手势电子手套,手套上的传感器用来获取手的每个部分数据信息,然后将数据将传输到手套的数据处理中心后集中处理。
1
杭州电子科技大学硕士学位论文
图1.1 手势电子手套
文献[5]中给出了一种基于数字手套的以虚拟现实和增强虚拟现实为应用平台的人机交互界面,该系统提供两种类型的交互:一是菜单系统,给每个手指分配一个菜单条;二是通过跟踪具有6自由度的双手上的标记来实现对虚拟3D物体的操作引擎。文献[6]中还介绍了一种重量比较轻的输入设备,该设备仅仅由戴在食指上的一个可弯曲的传感器、一个戴在手上的加速传感器以及一个用于激活作用的微型开关组成。在文献[7]的研究中,采用了一种无线手指跟踪器。在食指上带上超声波发射器,把接收器安装在HMD上,该接收器可以跟踪发生器的3D位置,在400mm的范围内分辨率可以达到0.5mm,当发射器被信号波激发时,接收器可以接受这种波信号。接受信号的大小正比于发射信号的频率和电压。由于对位于手腕上的传感器的位置非常敏感,因此仅仅用于区分两种不同手势(拳头和指向)。在Norimichi Ukita等[8]的研究过程中,在HMD上安装有红外线装置,在红外相机上加上一个彩色相机,由分路器在两个相机中产生两个完全相同的图像,因此,使用红外图像的深度信息可以从彩色图像中识别出物体。该装置可以用指尖画物体,并识别物体。
在国内,不少大学和科研机构很早就开始研究基于数字手套的应用。江立[9]采用中科院研究所的CAS-GLOVE数据手套,建立虚拟手势模型,通过数据手套获得的数据建立手势数据库,该算法识别率高,识别快。丁国富、李琪等[10]根据人手的生理解剖模型生成人手的标志物理模型,把数字手套返回的数据通过数学建模的方式建立虚拟手模型,以实现人手的实时运动跟踪的目的。
数字手套是手势识别技术中广泛使用的交互设备,该方法能精确的获取手指关节的信息,从而实现手势的识别。由于在使用的时候需要佩戴手套,掩盖了手势自然的表达方式,所以利用数字手套实现的手势识别在某种意义上不能称作手势识别,只能称作手势输入设备,一些传统的输入设备,如鼠标也可以称作最早的手势输入设别。基于数字手套的手势识别目前较多采用神经网络识别算法。神经网络识别算法中数据的输入可以用静态的和动态的方式,而且具有快速交互的方式进行训练的优点,而不必用一些解析的方式定义传递特征。还可以根据用户个人情况调整网络的连接权值。
2
杭州电子科技大学硕士学位论文
1.2.1.2 基于视觉的手势识别
由于数据手套的使用不方便,学者们提出了基于视觉的手势识别方法。基于视觉的手势识别系统旨在根据由摄像机获取的帧图像序列恢复人手的运动参数,如关节角度。方法大致可以分为静态手势识别和动态手势识别。静态手势识别其特征在于在学习从图形特征空间到手形状空间的映射关系。具体地说,首先预定义一组手势集合,并从每个手势中提取唯一的手势特征描述,然后从图像特征空间直接映射到手势空间得到手势的估计,也就是通过图像特征(点、线、角或纹理区域等)来识别手势或手势状态。该方法需要在代表各种手势的数据模板的基础上进行学习和训练。一般提取的手势特征包括肤色特征、Haar特征、HOG特征、形状特征等。动态手势识别主要是基于运动的检测算法,根据运动区域的特征描述子检测预先定义的动态手势。目前动态手势检测研究较为成熟,但如果考虑光照、背景等干扰因素,识别率大大降低。
国内的一些高校和科研机构在手势识别方面做了大量的研究,取得了丰富的研究成果。例如,杭州电子科技大学的任彧等人[11]利用HOG特征提取手势,建立手势模版库,通过SVM训练手势,达到了良好的识别效果。郭康德等人[12]提出一种基于视觉技术的手指识别,这种方法能跟踪指尖但没有涉及手势识别。华中科技大学的程文山[13]研究了基于肤色分割和Camshift的手势,识别稳定,识别率达到了90%以上。华南理工大学的常亚南[14]研究了基于HMM的动态手势识别。
在国外,对手势识别的研究已经有接近三十年的时间了,很多学者对手势识别进行了深入的研究,提出了很多具有理论价值的方法,成果也比较丰硕。例如Zeller等[15]实现了一个虚拟环境系统,该系统主要应用在大规模生物建模,手势动作作为输入用来控制虚拟环境中的设备为生物建模提供了交互接口;Davis和Bobick[16]实现了一个虚拟系统,用户可以通过手势操作个人健美操教练,实习了丰富的个人体验;Quek[17]研发了手势鼠标,通过手势控制鼠标在个人电脑在的操作;Triesch和Maslburg[18]提供了手势与机器人之间接口,利用手势控制的机器人可以从事一些人类不能完成的任务,减轻工作人员的负担。手势识别技术在现实场景中应用的越来越广泛。 1.2.2 基于深度信息的手势交互技术
针对传统手势识别系统对背景物体和光照条件敏感的缺点,学者们提出基于深度信息的手势检测和跟踪,例如华南理工大学的陈子毫[19],传统的手势识别技术主要是基于视觉的手势识别,其分割手部信息需要通过肤色检测的方法获取。而基于深度的手势识别能更加快捷、更加精确的定位和识别。相对于普通的RGB图像,基于深度信息的分割能准备的获取全身各个部位的动作信息,达到自然友好的手势控制,理解人体的感知和行为,并识别出其中有意义的动作,而普通RGB图像中对手型动作具有严格的规定,所以基于深度从信息的手势
3
杭州电子科技大学硕士学位论文
控制更加符合人们的行为习惯。
目前基于深度信息的手势交互研究刚刚起步阶段,主要研究方法有是传统的基于视觉的手势识别方法中融入深度信息,弥补RGB摄像头中没有深度信息的缺点,提高手势检测和手势识别算法的识别率和鲁棒性[20],在灰度信息中加入深度值后处理复杂背景的能力和解决不同肤色的问题[21]。基于RGB摄像头是基于阈值分割的检测简单快速,获取直方图后计算得到分割的阈值,然后分割前景与背景,达到提取场景最前面的目标,通过遍历一次图像即可分割出前景目标,缺点是目标前面有物体遮挡的时候或者目标不在前景的前方的时候容易出现分割不准确。
通过对基于深度信息的研究,手势分割方法主要有基于距离分割,根据深度信息较为容易分割出前景和背景是这种方法的主要优点;目标跟踪方面与基于RGB摄像头的主要区别是可以把深度信息加入到模板更新,可以提高跟踪的实时性和准确性,主要有基于深度信息的Meansift跟踪和基于团块的跟踪。专门针对深度图像的跟踪算法研究目前还比较少,主要有融合深度信息的Meansift跟踪算法[22]和基于深度信息的Tri-tracking跟踪算法[23]和基于团块跟踪算法[24]等,这些技术都是根据不同的角度,对传统的基于视觉的手势识别技术加入深度信息进行改进,基于深度图像的手势识别也是当前基于深度信息的目标检测与跟踪的研究重点,在虚拟试衣[25]、机械手臂[26]、交通手势指挥[27]和教育辅助[28][29]等领域逐渐得到应用。。虽然目前社会上大量使用的比如视频监控,视频聊天等用的都是RGB的摄像头,但是未来随着深度摄像头的价格下降,新的技术的产生,未来小部分的领域大量的使用深度摄像头不是不可能的时期。
由于人机界面的日渐完善和人们生活质量的提高,对基于视觉和图像的手势识别发展带来了机遇和挑战。以色列的PrimeSense公司研发3D感应器,2010年微软推出了用于Xbox360的体感外设3D摄像机Kinect,而且还提供了支持硬件的软件开发包和应用程序开发接口。由于其功能强大且相对廉价,成功的将手势识别应用于商业领域中。
1.3 本文主要研究内容及方法
本文研究了基于深度信息的手指检测和手势识别的方法。首先对传统的手势识别,手指检测方法做出了深入的研究,并通过实验结果分析了这些常用方法各自存在的不足。本文首先研究基于深度信息的静态手势识别,使用Kinect的红外摄像头获取深度信息,在照明条件下,使用者的皮肤和衣服和背景系统颜色对该系统影响不大。而且考虑到Kinect提供的手势识别只能识别上下左右的挥动,或者向前推的动作。在对比了传统的手指检测方法后,本文提出了一种阈值拐点检测法,该方法能精确定位手指指尖和手掌中心位置,并通过计算指尖和掌心的位置识别手势。由于在传统的RGB图像下从背景中精确分割手部信息困难,因此本文为了得到更优的识别结果,利用Kinect获取的深度信息提取手部信息,通过实验研究发现,识别结果得到了一些改进。
4
杭州电子科技大学硕士学位论文
其次研究了基于深度信息的动态人手检测和手势识别,首先用Kinect传感器收集彩色图和深度图、通过Kinect SDK获取骨骼特征并进行平滑滤波,从而有效的获取用户的骨骼信息,动态的手势识别根据实际应用场景的需要采用DTW动态规划算法[15],研究DTW动态规划算法的原理,根据识别手势的时候不同的关节点的权重是不同的,提出加权DTW动态规划算法,实验证明该算法能有效地用统计方法进行训练,然后通过分析手势轨迹特征与加权的骨骼关节点序列匹配达到识别的功能,能识别挥手、移动、推动等动作。该方法的优点是训练不需要大量的计算,而且不受背景、距离等的影响,能满足远距离的动态手势识别的需要,具有识别稳定,鲁棒性好,唯一的缺点是需要大量的计算,从而对计算机的运算速度有较高的要求。
1.4 论文的章节安排
手势识别方法的研究总体上可分为三个阶段:基于数字手套的手势识别、基于视觉的手势识别、基于深度信息的手势识别。本文对基于深度信息的手势识别做出了较深入的研究,主要从以下几个方面:
第一章是绪论,主要从课题研究的背景及意义、手势识别技术的研究发展状况、基于深度信息的手势交互技术的这3个方面进行了简要的阐述,并对深度信息与手势识别融合的特点做了较详细的分析。
第二章主要对深度图像获取和预处理的做出了研究,首先介绍了Kinect传感器理论知识和利用OpenNI框架获取原始深度图的方法,然后将获取的深度信息转换为实际的距离,并对进行了配准。在获得深度图之后,通过深度中值滤波和形态学操作消除图像中存在的空洞及噪声点。为下文进一步的使用深度图像奠定了基础。
第三章主要对基于深度信息的静态手势识别方法做出了研究,首先使用阈值分割获取手部图像,再运用K均值聚类算法区分左右手。然后详细介绍了凸包检测算法、手部轮廓检测和获取掌心位置的算法。主要分析了传统手指检测的三种方法,详细比较三种方法的优劣,由于传统手指检测方法中手势的方向变化和部分手指合拢都会造成误检,且手部边缘很多点会被识别为拐点,考虑到这些本章提出了用阈值拐点检测法,以三点检测法为基础,加入对拐点的检测,结果表明该方法具有较明显的优势。在此基础上,本文提出手指名字识别方法和手势识别方法。
第四章是主要对动态的人手检测和手势识别算法分别做出了深入的研究。本文首先使用了Kinect SDK获取用户索引和人体的骨骼特征,并进行了平滑处理。动态的手势识别根据实际应用场景的需要采用DTW动态规划算法,研究DTW动态规划算法的原理,根据识别手势的时候不同的关节点的权重是不同的,提出加权DTW动态规划算法,实验证明该算法能有效地用统计方法进行训练,然后通过分析手势轨迹特征与加权的骨骼关节点序列匹配达到识别的功能,能识别挥手、移动、推动等动作。该方法的优点是训练不需要大量的计算,而且
5
杭州电子科技大学硕士学位论文
不受背景、距离等的影响,能满足远距离的动态手势识别的需要,具有识别稳定,鲁棒性好,唯一的缺点是需要大量的计算,从而对计算机的运算速度有较高的要求。
第五章是总结与展望,对全文做出了进一步的总结,并根据目前的研究现状提出了进一步研究的意义。
6
杭州电子科技大学硕士学位论文
第二章 深度图像获取与预处理
2.1 开发环境介绍
2.1.1 Kinect传感器
Kinect for Xbox 360,简称 Kinect[30],是由微软公司开发的,主要应用于Xbox 360游戏主机的周边设备,用户可以通过语音指令或手势来操作Xbox360的系统界面,进去游戏后,用户不需要传统的游戏手柄或者类似Wii[31]的手柄来控制游戏中的角色,直接用身体的动作就可以游戏。近几年推出了Kinect for Windows,开始面向多领域应用。如图2.1所示为Kinect传感器。
图2.1 Kinect传感器
Kinect的中央处理器是PrimeSence公司生产的PS1080系统级芯片。PS1080SoC芯片是一个多感应系统能提供同步深度图像,拥有超强的并行计算逻辑,可控制近红外光源,进行图像编码并主动投射近红外光谱。同时,通过一个标准的CMOS图像传感器接收投影的Light Coding红外光谱并且将编码后的反射斑点图像传输给PS1080,PS1080对此进行并行处理并生成深度图像。图2.2所示为Kinect的内部设计。
图2.2 Kinect的内部设计
Kinect通过景深摄像头和RGB摄像头的配合获取深度图。景深摄像头包括两个主要部件:红外线发射器和红外线摄像头组。红外线发射器发出一道红外散斑覆盖整个摄像头的可视范
7
杭州电子科技大学硕士学位论文
围,摄像头组接收反射光线来识别玩家。红外摄像头识别是一个三维带深度信息的图像,摄像头到目标的距离用深度帧的每一像素颜色来代表。比如亮红色、绿色等亮色表示摄像头离目标近,而暗灰色等深颜色表示摄像头离目标远。
Kinect采用light coding,即光编码技术。传统的ToF或者结构光测量技术,投射到探测空间的是周期性变化的二位图像编码,而光编码使用结构光技术,通过连续的照明光源给需要探测的空间进行具有三维纵深的“体编码”。当这种光照射到粗糙物体或穿透毛玻璃后就会形成的一种随机衍射斑点,所以这种光源也称为激光散斑(laser speckle)。光编码技术的这种技术只需要普通的CMOS感光芯片,所以大大的降低了制造成本,而传统的感光芯片价格昂贵。这就是Kinect价格低廉效果好的主要原因。如图2.3所示为light coding光编码技术。
图2.3 light coding光编码技术
衍射斑点具有随机性,不同的散斑具有不同的图案,当激光照射到空间的时候,整个空间也被打上了标记,距离摄像头的不同距离,也就具有不同散斑,也就说空间中任意两处的标记都不相同,所以可以用标记的不同来判断物体所处的位置,这种标记也叫做结构光。这样的话,我们只要知道物体散斑图案就知道这个物体距离摄像头的距离。具体的做法是,首先把整个空间的结构光标记记录下来,用一副图案记录下来,假设我们取距离摄像头1米到3米的之间的空间,Kinect一般是在这个范围识别的准确率比较高,如果距离太近或者太远,因为散斑不能在后面做相关度的计算而不精确。每隔一段距离,比如10cm,这样我们就需要保存20幅散斑的图像,当我们使用Kinect的时候,拍摄目标物体的没一帧都与前一帧获取的20幅散斑做互相关的运算,如果空间中有目标物体,散斑形成的峰值就会一层一层的叠加,就会逐渐形成三维的空间图案了。
2.1.2 OpenNI框架
OpenNI是一个由业界领导的非营利组织推出的开源软件。该组织专注于改善的提高自然开放式交互设备,人机交互应用软件的相互操作能力。通过这些交互硬件和中间件(软件)来可以很方便的访问和使用一些设备。
该组织创建于2010年11月,主要成员有PrimeSense公司,开发ROS的机器人公司Willow
8
杭州电子科技大学硕士学位论文
Garage,,以及游戏公司Side-Kick。Kinect传感器的核心芯片由PrimeSecse公司提供。
OpenNI框架相比较微软公司自己推出的开发接口Kinect SDK而言,他的特点是多语言,跨平台,但是对Kinect的硬件兼容性上差很多,但优势也很明显,即软件开源,针对商业开发也没有限制,所以OpenNI API还是有很多人使用,这几年逐渐成为自然交互应用的标准接口,而且还可以在其他的体感传感器上使用,并且也可以在不同的操作系统上使用,比如Linux操作系统,去年推出了OpenNI2框架,更改了整个框架的架构,增加了支持中间件的力度,很多第三方的应用的开发者也加入到中间件的开发,现在中间件有3D手势识别,手指检测,人脸识别等特定功能的软件。开发者可以通过OpenNI接口控制Kinect底层的音频视频传感器,也可以在中间件的上面开发自己的应用。
例如,一个中间件可以接收一副有人的图像,计算并返回人手掌在图像中的位置。OpenNI提供了一组基于传感器设备的API,以及一组由中间件组件实现的API。通过打破传感器和中间件之间的依赖,使用OpenNI的API编写应用程序就不需要额外的努力去处理由不同的中间件共存带来的问题(跨平台)。
使用OpenNI API可以不用管底层传感器的数据如何产生,如何编码,开发者只需要通过接口就可以获得,而且在不同的平台都是一样的处理方式,因为OpenNI是跨平台的标准框架,这些底层的数据类型用户的索引值,全身的骨架信息,手的位置,或者只是深度信息的像素图,开发者也不用考虑中间件提供商相关的细节。
OpenNI API使得自然交互应用开发人员通过传感器输出的标准化了的数据类型来处理真实的三维数据(这些标准化的数据类型可以表示人体全身,手的位置,或者仅仅是一个含有深度信息的像素图等)。编写应用程序的时候不用考虑传感器或中间件供应商相关的细节。图2.4显示了OpenNI的三层抽象层。每一层代表一个完整的部分。
图2.4 OpenNI抽象层视图
底层是输入硬件设备层,包含所有传感器色板,有Kinect彩色摄像头、深度摄像头和麦
克风。中间层代表OpenNI框架层,具有与底层硬件层沟通的功能,可以获取传感器的数据
9
杭州电子科技大学硕士学位论文
让上层来处理,OpenNI框架还包含一个第三方开发者开发的中间件,这些中间件有手势识别、三维建模、人脸识别等功能。顶层是应用层,属于应用开发的层,可以利用OpenNI提供的数据开发游戏、手势识别、电视互动、浏览器交互等功能的软件。
微软在2011年也推出了自己官方的Kinect for Windows SDK,但是只能在Windows 7以上的微软操作上运行,在商业应用上也会有限制。而OpenNI是一个开源的软件,支持多平台的开发,包括Windows 7,Mac OSX,和Linux,商业应用上也不会有限制,也可以应用其他传感器比如华硕的WAVI Xtion硬件平台。
2.2 深度图像的获取
2.2.1深度信息的表示
Kinect摄像机和其他摄像机一样,近红外摄像机也有视场,所以视野是有限的,如下图2.5所示:
图2.5 Kinect摄像机视野
如图,Kinect红外摄像机的投射的空间形状是一个是金字塔形状。离摄像机越远,视场横截面积更大,离摄像机越近,视场横截面积更小。这导致影像的高度和宽度与摄像机视场的物理位置并不一一对应,但是视场空间的物体与摄像头之间的距离是不变的,所以使用Kinect的时候,微软官方推荐的距离为1220mm-3810mm,实际情况中,Kinect在距离为1.0m时其精度大概是3mm,而当距离是3.0m时,其精度大概是3cm,因此当Kinect在官方推荐的距离范围内使用是,如果是1.2m时,其精度应该在3mm附近,如果是3.6m时其精度就大于3cm了,因此距离越远,其深度值精度越低。
在深度图像数据中,每个像素占16位,即每一个像素占2个字节。每一个像素的深度数据只占用了16个位中的13个位。通过OpenNI获取到的深度信息(即z坐标)的单位是mm,
10
杭州电子科技大学硕士学位论文
且一般的深度值用12bit表示,即最大值为4095,也就是代表4.095m,所以如果需要把采集到的深度数据扩展到灰度图时,可以乘以一个因子255/4095,最后如果其深度值为0表示该位置处侦测不到像素点的深度。
15 21 11 8 7 4 3 0Depth Bits0000 1010 1101 0111Player Index
图2.6 像素点的深度值表示
如上图2.6所示,游戏者索引位存储在第0至2位,深度值存储在第3至15位中,在实际使用过程中将深度数据向右移位,将游戏者索引(Player Index)位移除。
2.2.2深度信息与距离的转换
在传统的基于视觉的手势识别算法中,由于手势的多样性和人的移动性,会造出人手距离摄像头远近发生变化,从而导致手掌大小的变化,影响了手势的跟踪和识别效果。本文将该信息转换成实际深度距离,以便获得人手距离摄像机的距离,并由此估计人手目标的大小。Kinect产生的深度图用灰度图表示,其中的每个像素深度值用11bit表示,而且与实际距离并不是成线性关系,当手掌越靠近摄像头时,由于Kinect的金字塔视场的原因导致图像的分辨率越高。所以在进行手势识别时需要根据手掌的距离大小转化为实际距离,Kinect返回的深度值不是实际距离,而是以像素为单位记录的一个相对数据,故首先要把获得的原始数据转换成以实际距离为单位的数据。假设通过Kinect获得的某一点像素的深度值为draw,根据Kinect的转换原理,可得到相应的实际距离深度值为: d=K tan(draw⁄2842.5 +1.1863)−O (2.1) 其中:K = 0.1237 m,O = 0.038 m。
根据实际深度距离值,转化原始像素位置为( i,j,d)的实际位置( x,y,z) ,其转换公式为:
其中:s = 0.0021。
{
x= (i−2) ×(d−10)×s×y= (j−2) ×(d−10)×s
z=d
hw
wh
(2.2)
2.2.3深度图像到RGB图像的配准
Kinect有两个摄像头,分别是深度摄像头和彩色摄像头,它们并排的安置在Kinect中,
所以它们的位置不同,成像范围也不同,彩色图其实就是三维空间点在图像平面的投影,考虑到仅包含旋转、平移的仿射变换,故可采用投影变换式进行计算,为了准确的目标跟踪和排除错误的检测,需要通过配准合并两者的信息。深度摄像头与彩色摄像头的坐标变换关系为:
11
杭州电子科技大学硕士学位论文
𝑥𝑋
*𝑦+=R∗[𝑌]+T 𝑧𝑍
(2.3)
其中R、T分别为旋转、平移矩阵,( X , Y , Z )为深度摄像头坐标系中对应点的坐标,可由式(2.3)计算得到,( x, y , z )为 RGB 摄像头坐标系对应点的坐标。
对应RGB图像的点坐标为:
𝑐𝑥𝑓𝑥∗x/z𝑢
*+=[]+*𝑐+
𝑓𝑣𝑦𝑦∗y/z
(2.4)
其中( fx,fy)为RGB图像中对应比例参数, ( cx,cy )为RGB图像中心点。文献[38]对以上参数的拟合结果如下:
9.9985e−1
R=[−1.4779e−3
1.7470e−2
1.2635e−3−1.7487e−29.9992e−1−1.2251e−2] 1.2275e−29.9977e−1
(2.5)
1.9985e−2T=[−7.4424e−4]
−1.0917e−2𝑓𝑥=529.2151{ 𝑓𝑦=525.5639cx_rgb=328.9427{ cy_rgb=267.4807
(2.6) (2.7) (2.8)
2.3 深度图像预处理
实际使用中发现,Kinect获取的深度图像不稳定,存在很多噪声点及空洞,特别是在目标的边缘处获取的深度值比较不稳定,直接进行处理时对算法会造成一些影响,比如进行手部图像的提取中会产生比较多的噪声点,所以需要进行一些噪声的滤波、形态学等操作,以提高目标提取的准确率。
2.3.1深度中值滤波
传统的线性滤波算法比较简单、实现容易,对图像平滑效果比较好,但由于使用邻域的均值算法,会导致目标边缘变得模糊,影响后面的处理效果。而低通滤波算法能有效的去除图像中的高频噪声,对孤立噪声点去除效果比较好,但同时也去除了图像中的高频部分,降低了目标清晰度。故本文使用深度中值滤波算法,以去除场景中存在的孤立噪声点,同时保留目标边缘信息。中值滤波算法是一种非线性算法,通过使用滑动窗口w扫描整幅图像,将窗口w内所有点的像素值按大小顺序排列,找到其中的中位数,将中位数赋给窗口中心点。这种算法较为简单,能有效去除高频噪声点。考虑到深度图像中的噪声主要是0值点,即像
12
杭州电子科技大学硕士学位论文
素深度值无法获取的点,故本文在传统中值滤波基础上,实现针对0值点特殊处理的深度中值滤波法。本文算法先判断窗口中心点是否为噪声点,如果不是噪声点则不处理。噪声点的判断标准是该点为无法获取深度的点即0值点。对于处理噪声点所采用的中值滤波法也不是简单的取窗口内所有点的中位数,而是先把窗口中所有0值点去除,再取中位数。本文算法能有效的去除孤立噪声点,并且保留目标区域内的信号点。
如果本文使用的中值滤波采用5*5邻域窗口处理时,通过扫描整幅图像判断中心点是否为零值点,若非零值点则保留,对于零值点则获取该点在此邻域内的所有非零点,将这些非零点按深度快速排序,取最中间的点的深度值或中间两个点的深度均值作为窗口中心点的深度值。使用此算法能有效的去除零值噪声,并且由于仅处理零值点,所以速度比常规中滤波算法快。通过此算法处理的深度图像能有效去除小的零值噪声点,但同时也使得部分背景被设置为前景目标,类似膨胀效果。
2.3.2形态学操作
图像形态学操作主要包括腐蚀、膨胀、开运算、闭运算等,主要用于空洞填充、去噪声等操作,这些运算均是使用结构元素在二值图像滑过通过集合的并或交运算求解计算结果。针对深度图像,周杨[3]在二值形态学处理上叠加深度信息,提出深度形态学操作,原理较为简单,但其中结构元素需要指定深度值,而这没有一个统一的标准,故实际应用中存在一定的问题。本文中使用由于使用深度分层算法对深度场景进行层分,故很多操作只是在相应的一个深度层次上进行的,因此实际上本文只应用二值图像的形态学操作。令输入图像为集合A,结构元素为集合B ,则图像A被结构元素B腐蚀定义为:
A⨀B=∩(A−b|b∈B) A⨁B=⋃(A+b|b∈B)
(2.9) (2.10)
图像A被结构元素B膨胀定义为:
即将图像A平移b的所有结果的交集定义为腐蚀,将图像A平衡b的所有结果的并集定义为膨胀。实际运算效果即是,对于图像A中任意点x,若点 x 的邻域内包含结构元素B中的所有点,则点x属于腐蚀结果集合;对于图像A中任意点x,若点 x的邻域内包含结构元素B中的任意点,则点x属于膨胀结果集合。故腐蚀操作是对图像的细化,应用于骨架的提取、噪声点的去除等;膨胀操作是图像目标的扩大,应用于图像空洞的填充。
图像的开运算与闭运算等操作是对腐蚀、膨胀等基本操作的综合,开运算实际上即是先执行腐蚀操作再执行膨胀操作,执行效果即是提取在目标图像中提取符合结构元素的集合,主要用于消除噪声、分离物件及平滑较大物体的边界;闭运算是开运算的对偶操作,即先执行膨胀再执行腐蚀,用于填充小空洞、连接邻近物体。
13
杭州电子科技大学硕士学位论文
2.4 本章总结
本章主要对深度图像获取和预处理的做出了研究,首先介绍了Kinect传感器理论知识和利用OpenNI框架获取原始深度图的方法,然后将获取的深度信息转换为实际的距离,并对进行了配准。在获得深度图之后,通过深度中值滤波和形态学操作消除图像中存在的空洞及噪声点。为下文进一步的使用深度图像奠定了基础。
14
杭州电子科技大学硕士学位论文
第三章 基于深度信息的静态手势识别
3.1 引言
随着计算机技术的发展,人们对人机交互有了更高层次的要求。相比较鼠标,键盘等接触式的操作方式,自然而直观的手势更符合人的自然行为,是新一代人机交互的主要方法,在虚拟现实、远程控制和交通等领域逐渐得到应用。自动手势识别成为近年来的一个研究热点。
静态手势识别的初期研究主要集中在机器设备上,例如数据手套,即一个类似手套的传感器。计算机通过它可以获取手部各关节数据。该方法虽能精确的识别手势,但是设备昂贵且掩盖了手势自然的表达方式。为此,学者们提出了基于视觉的手势识别方法。目前研究的手势识别系统主要分为基于RGB图像和基于深度图像。其中前者研究时间比较长,方法众多,但依然没有一个很好的方法解决问题。与RGB图像相比,深度图像具有物体三维特征信息,即深度信息。由于深度图像不受光源照射方向及物体表面的发射特性的影响,而且不存在阴影,不受颜色相近信号影响,所以可以更准确地识别手势。
本文对静态手势提出了一种阈值拐点检测法,该方法能准确提供手部的重要信息:指尖、手指、掌心的准确位置,提供信息让手部与系统做即时的互动。本系统可以在复杂背景的情况下准确的判断手指和手心的位置,并且容许手掌和手臂一定程度的翻转。最后在手指识别的基础上,提出一种手指名字识别和数字手势识别的算法。
2010年微软推出了用于Xbox360的体感外设3D摄像机Kinect,而且还提供了支持硬件的软件开发包和应用程序开发接口。Kinect功能强大且相对廉价,研究者广泛采用它获取深度信息。
目前基于Kinect深度信息的静态手势识别方法主要有两类。一类是基于骨架识别获取手势位置[32]进而识别手势。这类方法使用Kinect SDK时必须要在摄像头全身可见的条件下才能进行较为准确的识别。另一类是深度信息转换为2D信息,通过支持向量机训练后识别[33]。这类方法需要构造训练样本,并且不能识别手指。
3.2 手部提取
手势分割是手势识别中最重要,也是最基础的一个步骤,手势分割的好坏直接影响后续手势识别的效果,在以往的手势识别系统中,最常见的手势分割方法有基于肤色的分割和基于手部的形状轮廓特征的分割这种方法在手势分割中都有很大的局限。基于肤色的分割方法
15
杭州电子科技大学硕士学位论文
识别率较高,但它的处理过程相对复杂,降低了手势识别的效率而且对于不同人种、肤色的分布也大相径庭;基于形状轮廓的分割方法虽然简单易行,但是识别率也大大降低。在复杂背景和有其他手势干扰的情况下,这2种方法基本都束手无策。
本文采用基于深度阈值的分割来提取手势,使用直方图分割提取场景最前面的目标以分割前景与背景,用灰度来表征距离,无限远取白色,无限近取黑色,通过设定阈值来将图像二值化。实验结果表明,基于阈值的手势分割,不仅简单,只需遍历1次图像即可分割出前景目标,而且分割效果好,在一定程度上,还可以实现在不同光照和复杂背景情况下对手部的快速提取,但缺点是当目标不处于场景最前方时无法分割具有一定的局限性。
3.2.1基于阈值分割获取手部图像
Kinect获得的深度数据以像素为单位记录。在进行手势识别时需要根据实际距离的大小进行距离判定,Kinect返回的深度值不是实际距离,而是一个相对数据。故首先要把以像素为单位的数据转换成以实际距离为单位的数据。设Kinect返回的的某一点深度值为draw,根据Kinect的校准过程,可求得相应的实际距离深度值。获得实际深度数据后,遍历深度矩阵的每个值,获取距离最小值。根据一般做手势的时候,手部在整个身体最前面且与身体有一定距离。所以在最小值的基础上加上一个固定的值作为阈值。这种方法的好处是,距离范围不固定,当手的距离变化时,获取数据的范围也会动态变化。图3.1给出了基于阈值分割获取的手部图像。
图3.1 基于阈值分割获取的手部图像
3.2.2基于聚类算法区分左右手
聚类分析作为一种非监督学习方法,是机器学习领域中的一个重要的研究方向,同时,聚类技术也是数据挖掘中进行数据处理的重要分析工具和方法。Mac Queen最早提出K均值聚类算法(K-means算法),作为聚类方法中一个基本的划分方法,通常采用误差平方和准则
16
杭州电子科技大学硕士学位论文
函数作为聚类准则函数,到目前为止它在诸多的聚类算法中仍然是一种应用广泛,有效的技术。
阈值分割技术只能把手势从背景中分割出来,不能区分两只手。k均值算法根据像素在2D空间的位置,把所有像素划分为两个聚类中心,初始化k为2。其中聚类中心代表手掌,聚类算法计算每个分割图像的像素点到聚类中心的距离,然后把所有的像素点根据距离聚类中心的远近分配到各自的类。计算新形成的每一个聚类的数据对象的平均值来得到新的聚类中心,如果相邻两次的聚类中心没有任何变化,说明样本调整结束,聚类准则函数已经收敛。在每个手部的像素点划分好后,如果在两只手的中心距离小于提前定义的一个值,两个聚类将合并成一个。
图3.2给出了经过K均值聚类算法判断的左右手,两只手用不同的颜色表示。
图3.2 经过K均值聚类算法判断左右手结果
3.3 手指识别
到目前为止的操作主要是对从Kinect获取的原始数据进行基本的预处理。他们是精确的检测手指和识别手势的基础。下面将提到指尖检测算法总共有三种,我们在不同的条件下测试算法的结果好坏。第一种方法只是简单的判别点是不是既在手部的轮廓上又是凸包的一部分。称为基于凸包的手指检测;第二种方法基于掌心的手指检测,把整个手部的几何结构考虑进去。最后一种是基于几何的手指检测,该方法采用一种简单的形态学的分析每个手指。
3.3.1 手部凸包检测
在做手势的时候,手指经常远离手掌中心,而且指尖离的最远。根据这个情况建立数学模型。因为凸包包含指尖的点,基于Graham's Scan算法[34]找到手型外部的凸包。具体过程如下:
首先选取基点。在手部图像中选取y坐标最小的一点H,当作基点。如果存在多个点的y坐标都为最小值,则选取x坐标最小的一点。排除坐标相同的点。如图3.3中,y坐标最小
17
杭州电子科技大学硕士学位论文
点H为基点。
图3.3 凸包算法中基点示意图
然后按照其它各点和基点构成的向量与x轴的夹角进行排序。当加入一点时,必须考虑到前面的线段是否会出现在凸包上。从基点开始,凸包上每条相邻的线段的旋转方向应该一致,并与扫描的方向相反。如果发现新加的点使得新线段与上线段的旋转方向发生变化,则可判定上一点必然不在凸包上。按照上述步骤进行扫描,直到点集中所有的点都遍历完成,
⃗⃗⃗⃗ 相邻的⃗⃗⃗⃗⃗ ⃗⃗⃗⃗ 被判定不在凸包上,⃗⃗⃗⃗ 旋转方向不一致,⃗即得到凸包。如图3.4所示,与⃗HCHK和⃗HLHC与⃗⃗⃗⃗⃗ HK相邻的线段旋转方向都一致,因此⃗⃗⃗⃗⃗ HK在凸包上。
图3.4 凸包算法中线段示意图
3.3.2 手部轮廓检测
手部轮廓检测采用Moore neighborhood算法实现。定义N(a)为像素a的八个领域像素。p表示为当前轮廓像素。C表示检测到的轮廓点集合,初始化为空集合。轮廓检测算法描述如下:
1)从上面到下面,并从左到右,在荧幕上扫描所有像素,直到发现手部的像素s就判定为起始点。
2)设置当前轮廓像素p为s,设置初始像素的领域。 3)把p插入C中,然后计算N(p)的领域。
18
杭州电子科技大学硕士学位论文
4)从p 开始顺时针方向的遍历N(p)的领域知道另外一只手的像素r被找到。 5)把q设置为p, p从新的轮廓像素r开始,然后重复步骤3直到遍历到起始点s,或者检测像素超过最大值。
轮廓检测算法如图3.5所示。
图3.5 轮廓检测算法步骤
图中“红色边框”为当前的轮廓像素,“绿色边框”为起始像素的领域的检测,“黑色边框”为邻域检测顺时针路径,“虚线箭头”所示的路径,因为已经检测到下一个轮廓像素。
上面的算法在只有一只手的时候是有效的,如果是两只手算法运行就会出错,因为接下来当判断该内部点是否属于哪只手的时候,因为包含范围互相重叠,每个内部点同时属于不同的包含方位,这样很容易错误判断,影响最终的结果,这是由于识别内部不能判别内部点属于哪个范围。
3.3.3 掌心检测
一旦手部轮廓被检测到,手掌的中心被计算为手部轮廓内接圆中心。掌心位置可以用来计算手指的方向向量。内接圆的中心比手部点云图质心更加稳定,因为当手掌伸开、握紧或者弯曲对后者的结果影响很大。手掌中心点是一个能够提供很多信息的点,它表明了手及手指的位置,同时可以帮助其他相关的计算。比如:识别手势。
19
杭州电子科技大学硕士学位论文
图3.6 计算手掌的中心
手的掌心点一般是手掌最大的内接圆。计算所有内部点到轮廓的最小距离中的最大值,该最大值所对应的内部点就是手掌中心点。这个算法非常耗费时间,可以通过两个方面来改善性能。首先,如果计算内部点至每个轮廓点之间的最小距离小于目前的最大值,可以判断出这个点不是中心点,所以就没有必要计算该点与其他轮廓点之间的距离。其次,不需要计算内部点到所有轮廓点才计算出最小距离,可以选取每隔N个点的轮廓点来计算距离,这样降低了时间复杂度又没有对结果造成很大的影响。经过实验测试,当N为8的时候时间复杂度和精度达到一个平衡。需要注意的是如果深度数据中包含了手臂的数据,计算得出的中心点就会移到手臂上,所以在获取深度数据时,应该尽可能的避免这种情况。
3.3.4 手指检测
3.3.4.1 传统的手指检测
1. 凸包缺陷检测法
通过凸包缺陷算法获得11个凸包缺陷点的序列,包括缺陷起点,缺陷终点,缺陷中离凸包线距离最远的点的坐标,以及此时最远的距离。总共包含有4个手指之间谷点,5个指尖点和2个不正确的手腕的缺陷点。那意味着,在这个序列中包含了我们要查找的所有缺陷点,下面我们唯一需要做的是区分和判别。如图3.7所示我们要找的凸包缺陷起点和缺陷终点,这样我们能直接确定指尖点。
20
杭州电子科技大学硕士学位论文
图3.7凸包缺陷手指检测
该方法主要的问题是检测到的手腕部分的点会干扰结果。因为它只能检测在手腕和大拇指之间的凸包缺陷点。算法错误的识别手腕的点而不是把指尖的点为起点。同样,在另一只手的手腕和大拇指之间也会发生这种错误。为了避免这种情况,设置阈值来排除错误凸包缺陷点,首先取所有指尖点的Y轴坐标为𝑌𝑝𝑖,i = 1…11,其次所有指尖需满足以下条件:
𝑌𝑝𝑖>𝑌𝑐+ϵ
(3.1)
𝑌𝑐指的是前面计算得到的掌心Y轴坐标值,而ϵ取10像素大小,因为手腕与大拇指或小拇指之间的凸包缺陷点小于𝑌𝑐+ϵ而被排除。虽然算法能解决错误识别的问题,比较稳定并且在不同的情况下都有良好的表现,但是当手势倾斜或者向下,一些指尖点会由于小于阈值被排除。
2. 掌心位置检测法
这种方法首先通过求手部的凸包获取指尖点,设为{H1,H2,…,HN}为凸包向量的点集。每一个Hi,i = 1…N,都是候选指尖点。如下图3.8 所示Di-1和Di为指尖点Hi附近的凸包缺陷点。
图3.8基于轮廓的手指检测
相应的,我们抽象的用P =(Xp,Yp)代表坐标系中的点P, Mi-1和Mi分别代表Hi到Di-1或Hi到Di的向量的中点。
21
杭州电子科技大学硕士学位论文
𝑀i−1=(
𝑋𝐻𝑖+𝑋𝐷𝑖−1𝑌𝐻𝑖+𝑌𝐷𝑖−1
,) 22𝑋𝐻𝑖+𝑋𝐷𝑖𝑌𝐻𝑖+𝑌𝐷𝑖,2) 2
(3.2) (3.3)
𝑀i=(
如公式3-1所示,掌心C点和M1和M2形成的向量之间的夹角𝜃𝑖。
𝜃𝑖= cos−1(
→ 2+→ 2−→ 2
𝐶𝑀i−1𝐶𝑀i𝑀𝑖𝑀i−12→ →
𝐶𝑀i−1𝐶𝑀i
) (3.4)
最后,每一个𝜃𝑖,i = 1…N,通过与一个适合的阈值进行比较,来决定Hi是否是指尖。当设置Hi为指尖的条件为𝜃𝑖<50°时,算法在各种情况下表现稳定。因为有很多点位于手腕,所以为了避免当手指向下的时候识别错误,在手的顶部和底部的点(根据掌心的高度确定)也被考虑进去。当顶部的点大于底部的点是手势向上。此时算法工作正常,指尖能正确被识别。相反的,当手势向下时,该算法也能正确执行。
虽然第二种方法比第一种方法好,但是在识别指尖的过程中,如果部分手指合拢可能会引起另外一个问题,比如是在做代表胜利的手势“V”时。也就是说当手部分合拢的失手,手的形状和掌心的位置都会改变,从而导致检测的不准确。
3. 三点检测法
三点检测法[23]首先要确定指尖,通过计算那些既在凸包上又在轮廓上的点来找到指尖。如图所示,Hi,i = 1…N为候选指尖点,Di和Di-1为靠近Hi的手部轮廓的点。 具体算法描述如下:
1) 初始化C序列为既是凸包上的点又是轮廓上的点的集合。
2) 遍历C序列上每个点Hi,取其左右Di和Di-1点,分别计算它们到p0的矢量值为⃗⃗⃗⃗⃗⃗⃗⃗ HiDi和
⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗ HiDi−1。 3) 计算⃗⃗⃗⃗⃗⃗⃗⃗ HiDi和⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗ HiDi−1的夹角为αi。如果αi<45o,i=1…N,则确定为指尖,否则返回2)
重新检查下一个候选点。
图3.9 三点检测法
22
杭州电子科技大学硕士学位论文
这种方法看起来是最简单的一种,不过相比其他方法,它是最稳定的一种算法。该算法能在不同手势的方向和手部的形状下准确找到指尖。这种方法之所以有效,是因为指尖的三角在不同的手势下具有稳定性,即使在部分手指合拢的情况下。 3.3.4.2 指尖阈值检测法
上面两种手指检测方法都是根据手掌的特殊形状,首先分割手掌,然后通过凸包检测和轮廓检测获得拐点,不同的是使用不同的拐点判断方法,但这两种方法都不能确保错误的把手腕边缘也识别为拐点,所以本文提出一种指尖阈值检测算法:首先提取出目标手部的轮廓,遍历轮廓序列,假设取的一点为p[i],取一定长度之后的点为p[i+step],mid=(p[i]+p[i+step])/2 ,mid2=p[i+step/2]。step为步长,根据不同手的大小取不同的步长,然后判断d(mid,mid2)是否大于d(p[i]+p[i+step])*T,T是手指长度和宽度的比值,如果是,则该点为拐点,否则不是拐点,然后在判断是不是指尖点,在轮廓序列中去除开始点和结束点,它们的中点如果在轮廓中则判断目标拐点为指尖点。
指尖阈值检测如下图所示,其中绿点为检测到指尖,蓝点、红点分别为start、end:
图3.10 指尖检测示意图
根据上面算法实现的最终检测结果如下图所示,:
图 3-10 手指检测结果
23
杭州电子科技大学硕士学位论文
3.3.4.3 实验结果及其分析
为了验证三种手指检测方法的识别效果,我们使用三种手势进行实验,分别是张开的手并且方向朝上、张开的手掌方向朝下、手部分闭合。这个测试的目标通过可靠的评价方法来评价三种手指检测方法。每种手势每种方法我们各测试了100次,实验结果如下表所示:
表3.1 手指检测结果评价
检测方法 凸包缺陷检测法 掌心位置检测法 三点检测法 阈值拐点检测法
手张开向 手张开向下 手指闭拢 84 91 98 98
0 22 68 86
68
4 88 90
正如表所示,第一种方法在手掌张开向下和第二种方法在部分手指闭合的情况下的识别率都不高,相反的,第三种和第四种方法在这两种情况下都能获得较好的实验结果。
前两种方法在手掌张开向上的情况都能获得较好的结果,分别是84%,91%。然而,当手掌张开向下的时候,由于指尖点都低于阈值,所以第一种方法识别率为0。第二种方法在手掌部分闭合的时候识别率不高,因为部分手指的闭合造成掌心位置的偏移,所以识别率只有4%。
第三种方法在这三种情况下都能达到良好的实验结果,因为无论在哪种情况下,每个指尖点和旁边点形成的三角都是不变的,但是如果手张开朝下的时候,会有很多错误的识别为指尖,比如手腕的部位,所以在这种情况下识别率也有68%。在部分手指闭合的情况下,也可能会产生部分错误识别,但是效果比手张开朝下好,识别率为88%。而第四种方法由于克服了部分拐点的误识别,所以该算法在三种情况下都表现良好。
3.4 手势识别及其应用
3.4.1 手指名字识别
手指名字根据他们之间的距离确定,需要用户张开手掌和伸展手指。找到指尖点之后,可以与掌心做差值,得到从掌心到指尖的矢量。根据矢量长度和手指间的相对位置识别手指。手指识别的四个过程如下图3.11所示。第一步,因为相邻手指之间距离相差最大的是大拇指和食指,所以识别出大拇指和食指。第二步,小拇指离大拇指最远,同时中指离食指最近,识别出小拇指和中指。第三步,最后识别剩下的是无名指。
24
杭州电子科技大学硕士学位论文
图3.11 指尖识别
手指检测结果如图3.12所示,其中白线连接区域表示凸包,黄线连接区域表示手部轮廓,红色点表示检测得到的指尖,蓝色点表示掌心的坐标。
图3.12 手指识别结果
图3.13所示的是手指识别结果,各个手指都被准确地识别出。
(a) 大拇指 (b) 中指
(c)食指 (d)小拇指 图3.13 手指识别结果
这种凸包结合轮廓的算法,比起k-curvature算法,一开始可以排除了两个手指之间间隙
25
杭州电子科技大学硕士学位论文
这种情况。算法鲁棒性和效率更高。
3.4.2 手势数字识别
经过上面一系列的算法,现在我们获得了关于手指和手势的信息有手掌中心位置,手指个数,指尖的坐标和手指的向量。
这四种数据组成了手势的基本元素,通过这些数据可以识别大部分手势。可以通过计算伸开的手指的个数,实现数字手势的识别;还可以利用伸开手指的名字判断手势的意义;还可以根据伸开手指之间的角度来判断手势的意义。
利用Kinect深度摄像头及OpenNI框架在Visual Studio 2010开发环境上研究手指检测和手势识别算法。Kinect输入的深度图尺寸为640×480。手势提取中设置固定阈值为500毫米。图3.14所示的是识别数字手势1~5的结果。
图3.14 识别数字手势1~5
为验证基于Kinect深度信息手指检测和手势识别的有效性, 每种手势做40次。如表3.2
26
杭州电子科技大学硕士学位论文
所示。
表3.2 手势识别结果
手势 手势1 手势2 手势3 手势4 手势5
输出1 输出2 输出3 输出4 输出5 准确率(%) 37
2 38
1 1 39 1
1 1 39 1
38
92.5 95 97.5 97.5 95
手势数字1由于干扰的可能性大,所以准确率最低。如果手指没有足够伸开,可能不
被识别。大拇指的下面的点由于比较尖,也可能被识别为手指,所以手势数字5有一次被识别为数字6。总体来看该算法手势数字识别速度快,准确率高。
3.5 本章总结
本文研究了基于深度信息的静态手势识别,在利用Kinect获取深度图像的基础上,使用基于阈值分割的方法提取手部,得到相应的手部信息,然后详细的分析了传统三种手指检测方法:凸包缺陷检测法、掌心位置检测法、三点检测法,并对比分析了三种方法的优劣,提出了阈值拐点检测法检测指尖。从实验中可以看出阈值拐点检测法比传统的手指检测方法要好,在手朝向不同方向和部分手指合拢的情况下都保持较好的识别率。在检测到指尖和掌心的信息后,通过简单的一个手指识别方法识别每个手指的名字,最后使用分类器来识别不同的数字手势。
27
杭州电子科技大学硕士学位论文
第四章 基于深度信息的动态手势识别
4.1 引言
静态手势识别不涉及图像时空序列的研究,因此,在对象的分离和对象的跟踪上相对简单。而动态手势识别需解决手部分离、手部跟踪。手部运动轨迹理解等一系列的问题。
常用的动态手势识别方法有两种:模板匹配法、统计法和神经网络方法。模板匹配为每个特定的手势动作建立一个或多个模板,当输入一个模板时,寻找它和已建好模板指尖的最优匹配,如DTW算法。该类方法抗噪声能力差。基于统计方法虽然有更好的动态适应能力,如HMM[35],但在分析手势信号时过于复杂,使得HMM训练和识别计算量过大。神经网路方法具有分类特性及抗干扰性,然而其处理时间序列的能力不强。DTW算法更易实现,更加使用,所以采用该算法实现动态手势识别。
基于深度信息的DTW动态手势识别,不同于识别手势的静态动作,比如数字手势或者代表各种含义的手势,它的目标是识别人手在时间序列中的运动特征,比如挥手、推动、移动等。本系统首先基于Kinect SDK提取骨架特征方位并做平滑滤波,然后研究了动态规划算法的原理,结合深度信息提出了加权的DTW手势识别方法,通过程序实现,对实验结果进行了分析。
4.2 骨架追踪
本章研究DTW动态规划算法,首先利用Kinect SDK提取人体骨架[36],预处理之后利用获得的理想图像可以提高识别率。骨架追踪技术可以用来实现动态手势识别和人体的姿态识别[37]预处理的主要步骤包括骨架特征提取、滤波。
4.2.1 提取骨骼特征
我们是用微软公司的Kinect传感器来获取关节点的位置,Kinect SDK跟踪全身20个三维坐标的骨骼关节点,如图4.1所示,机器学习算法使用深度图像来预测关节点的位置的原因是骨架模型对颜色、问题和背景具有非常强的鲁棒性。通过骨架跟踪系统获得骨架的位置后,系统会给他分配一个号码,每个用户的每个关节点都有一个标号,但是这个标号是随机分配的,如果用户离开了Kinect视野,这个标号将过期,此时另外的用户如果出现在视野中,Kinect有可能把这个标号重新分配。Kinect也会为用户分配用户索引值,索引值为0表示这个骨骼信息不是用户的。
28
杭州电子科技大学硕士学位论文
图4.1 Kinect获取的全身骨骼点
动态手势识别方法中最重要的一步是手势分割,在复杂的背景提取出清晰的目标手势,去除了背景噪声的干扰。过去处理方法是肤色识别,或者佩戴数字手套区别[38],我们利用深度图提取骨架节点来获取信息,该三维坐标信息在对灯光、肤色、背景的时候鲁棒性强。基于DTW动态手势识别基于N特征向量的级联,我们只观察20个骨骼节点中的8个作为识别手势的特征:左手、右手、左腕关节、右腕关节、左肘、右肘。一个特征向量由8个关节的三维坐标组成。由于左肩和右肩运动相对较小,其位置用基准点来计算。这样,我们将原来的人体化坐标系转行到了以双肩中心点为圆点的双手左边系,消除人体的尺寸和离摄像头距离的远近对特征向量引起的变化。
𝐹𝑛= (𝑥1,𝑦1,𝑧1,𝑥2,𝑦2,𝑧2,⋯,𝑥3,𝑦3,𝑧3)
(4.1)
式(4.1)中n为tn时刻的骨骼索引,一个手势序列由N这样的特征向量构成。在N特征向量级联来创建手势序列进行预处理之后,在DTW成本计算之前先进行预处理。该预处理阶段排除一个人的大小或其在摄像机视野的地位原因导致特征向量变化。所有的特征向量进行归一化处理,左、右肩膀之间的距离要考虑由于一个人的大小的变化。其次,归一化要把所有关节点都减去肩膀关节点,因为肩膀的关节的稳定:
A(𝑥𝑎,𝑦𝑎,𝑧𝑎)= 2(𝑥3+ 𝑥4,𝑦3+ 𝑦4,𝑧3+ 𝑧4)
对特征向量归一化,A是基准点,公式为:
𝑂后= |𝐿−𝑅| 𝑂−𝐴
1
(4.2)
(4.3)
式(4.3) 中: A为在原有坐标系的特征向量中计算出的基准点; O 为归一化前骨骼点对应
的向量; O后是归一化后骨骼点对应的特征向量; L是左肩的特征向量; R是右肩的特征向量。通过这种方式我们把原来以人体为中心坐标转化为以双肩为中心坐标。
29
杭州电子科技大学硕士学位论文
4.2.2 平滑滤波
由于游戏者的动作不够连贯,Kinect硬件的性能等原因,Kinect传感器在骨骼跟踪过程中有时候会出现含有骨骼特征信息的帧会出现跳跃的情况。骨骼关节点在上一帧与下一帧之间的相对位置变动很大,这会对程序的稳定造成严重的影响。比如会影响用户体验和会出现不可控制的错误等。通过对骨骼数据进行平滑,减少视频上一帧与下一帧之间的关节点位置差异,用这种方法避免造成骨架跳跃的情况。
而且采用Kinect获取的深度信息常常包含很大的噪声,因为激光斑点具有不稳定性质,因而这对后续动态手势识别是一种不稳定的因素,所以在平滑处理阶段需要对深度图像进行噪声的平滑滤波操作.基Kinect传感器深度的边缘性很强,深度差值大于3~4mm被认为是不同的深度。在降低噪声的过程中,我们不仅不能简单的去掉边缘信息,而且要求滤波算法处理的速度不能对后续的手势识别产生影响.综合考虑,本文采用一种双边滤波器.双边滤波是一种非线性的滤波方法,考虑空域信息和灰度相似性,同时是结合图像的空间邻近度和像素点值相似度的一种折衷处理,,达到既能保护边缘信息又能去除噪声的目的,具有简单、非迭代、局部的特点.本文在图像平滑和去除噪声的同时很好地保留了手部深度信息。
4.3 动态手势识别
4.3.1 动态规划原理
DTW算法是一个模板匹配算法,它根据已知的模式在另一幅图中查找相应的模式,模式被表示为一个时间序列度量或特征从测量中得到。假设r(𝑖),𝑖=1,2,…,𝐼,t(𝑗),𝑗=1,2,…,𝐽分别为参考和测试向量序列,目的是为了使这两个序列在同一时间通过非线性映射。这种非线性变形是一种有序元组集。
(𝑖0,𝑗0),(𝑖1,𝑗1),…,(𝑖𝑓,𝑗𝑓),
(4.4)
式(4.8)所示为元组(𝑖,𝑗)从r(𝑖)映射到t(𝑗),f+1是总映射数。D是r与t映射的总消耗它被映射函数d(𝑖,j)定义,d(𝑖,j)代表序列中的元素之间的映射距离的总和。
D= ∑𝑘=0𝑑(𝑖𝑘,𝑗𝑘)
𝑓
(4.5)
函数d(𝑖,j)代表元素r(𝑖)与t(𝑗)之间的距离。
映射也可以被视为在一个I×J大小的二维空间的网格中的路径,(𝑖,𝑗)代表网格中的r(𝑖)与t(𝑗)之间相应的节点。每一个二维网格中的路径都与总的消耗D联系,在式(4.9)中给出。如果一个路径是一个完全路径,如下定义:
(𝑖0,𝑗0)= (0,0) ,(𝑖𝑓,𝑗𝑓)= (0,0)
(4.6)
则一个完全路径与整个序列r与t对齐。
30
杭州电子科技大学硕士学位论文
如果两个序列是最佳对齐的,则二维网格的成本路径最小。一个找到最小成本路径方法是找到最小路径成本消耗,需要测试从左下角到右上角的路径每一种可能。然而,这具有指数复杂性。动态的规划利用Bellman原理降低复杂性(Bellman,1954)。Bellman的最优性原理指出,最优路径从起始节点(𝑖0,𝑗0)到结束节点(𝑖𝑓,𝑗𝑓),通过的一个中间点(𝑖,𝑗)可以表示为从(𝑖0,𝑗0)到(𝑖,𝑗)和(𝑖𝑓,𝑗𝑓)到(𝑖,𝑗)最优路径的串联。这意味着,如果我们给出最优路径(𝑖0,𝑗0)到(𝑖,𝑗),我们只需要搜索(𝑖𝑓,𝑗𝑓)到(𝑖,𝑗)而不是从起始节点(𝑖0,𝑗0)到结束节点(𝑖𝑓,𝑗𝑓)。
根据Bellman算法的原则:总计算机消耗成本最小。我们把最小的消耗放在(𝑖𝑘,𝑗𝑘)节点上,设为𝐷𝑚𝑖𝑛(𝑖𝑘,𝑗𝑘),然后我们可以使用前一个节点要计算𝐷𝑚𝑖𝑛(𝑖𝑘,𝑗𝑘)的值:
𝐷𝑚𝑖𝑛(𝑖𝑘,𝑗𝑘)= min𝑖𝑘−1,𝑗𝑘−1𝐷𝑚𝑖𝑛(𝑖𝑘−1,𝑗𝑘−1)+ 𝑑(𝑖𝑘,𝑗𝑘)
(4.7)
因为所有的元素在时间上是有序的,集合的前身节点在左侧和底部为当前节点。最后,计算出连接两个序列的最小成本路径为𝐷𝑚𝑖𝑛(𝑖𝑘,𝑗𝑘)和测试序列匹配的参考序列,所有参考序列之间的最小成本。虽然式(4.7)输出的最小成本两个序列之间,它没有各出最优路径。最优路径可用于把测试序列的元素映射到参考序列的元素,如果寻找最佳路径就是把整个测试序列映射到整个参考序列,那么你需要回溯最佳路径知道最终的节点。
DTW算法的优点是算法实现简单,具有较强的识别能力,缺点是不能识别未定义的手势,需要在识别前自定义,或者提供模板,DTW本质来说是一种模板匹配算法,模板匹配算法的计算量大所以能以在实际中使用,但是结合Kinect之后,由于有效的提取前景,减少了运算的时间,效果得到增强。
4.3.2 加权DTW动态规划
传统的DTW算法在计算特征之间的距离时对每个特征同等对待,然而,不是所有的骨骼点同等参与手势识别。比如,手势“右手向右移动”中的右手骨骼点的运动是无意义的。同等的计算其运动位移将增加噪声。
该算法在同样的基础距离的两个时间序列与对齐的两个序列之间计算相异点。如果样本序列是多维的,使用欧氏距离来平衡所有维度。在如何把身体关节与一个特定的手势相关联的基础上,我们提出使用一个距离加权成本计算。关联被定义为一个关节运动对这类手势的运动模式的贡献。为了推断该关节对一个手势类的贡献值,我们计算其在一个用户的手势表演中总位移值:
𝑗
𝐷𝑗= ∑𝑁𝑛=2𝐷𝑖𝑠𝑡(𝑓𝑛,𝑓𝑛−1) 𝑔
𝑔
𝑔
(4.8)
式(4.8)中g代表手势种类标志,j代表关节标志和n是骨架帧数𝐷𝑖𝑠𝑡𝑗()计算关节j与是两个连续特征节点𝑓𝑛和𝑓𝑛−1的手势g之间的距离。在总的位移被计算后,我们需要去掉噪音,很多原因会产生噪音,例如颤抖,我们通过阈值过滤掉噪音。这可以防止我们的参数权
31
𝑔
𝑔
杭州电子科技大学硕士学位论文
重模型输出太高或太低的权重。一个关节权重值会根据手势的不同类型而改变,比如,对于左手挥动的手势,则左手关节、左手腕关节、左手臂肩关节的权重会变大。类之间的差异最大化可以实现类内最小变化从而达到耗费最小,比如较少在判断右手手势的时候减少左手的权重,这可以帮助区分不同的手势权重。我们试图这种方法实现这通过最大化判别目标区别比例。
4.3.3 动态规划算法流程
启动程序,系统提示要求载入手势模板,带入模板后,点击开始,程序开始运行,首先Kinect会自动采集彩色图片以及深度图片,循环判断是否有人出现在视频采集区域,如果出现有产生一个用户索引值,因为Kinect可以识别多人,然后Kinect SDK根据获取的深度图计算得到人体全身的骨骼关节点,如果没有检测到骨骼关节,重新回到检测用户的步骤。将骨骼节点的数据转化之后存储到链表中,动态的读取手势动作,根据预先存储的手势模板匹配手势,如果成功匹配的化,输出结果,清空链表。手势模板存储了预先定义的手势动作,不需要是完整的手势链。识别的时候,DTW算法会根据动态手势链表中所有可能的情况同时进行匹配,达到一定的预设长度会识别成功。如果识别不成功,则会刷新一次就把新的帧的链表头去掉,为了保证实时性的要求,本软件每隔两帧进行识别一次。
本系统将利用Kinect SDK提取的人体骨骼特征与DTW算法结合,实现了动态的手势识别,减少了DTW算法由于背景复杂容易出现计算量大的缺点,扩充了Kinect自带SDK的功能,通过人体骨架实习了手势识别。系统流程框图如图4.2所示:
32
杭州电子科技大学硕士学位论文
Kinect否是否检测到人是获取骨骼信息否是否检测到骨骼是DTW识别是否识别响应操作
图4.2 动态手势识别流程图
4.3.4 实验结果
系统的硬件环境主要包括:实验室PC主机一台:CPU是Core(TM)2 Duo E7400,主频为2.8GHz。内存4GB。独立显卡为 NVIDIA 的 GeForce 8600GT。显存 512M。实验采用Kinect for XBOX360,它是微软公司为 XBOX360开发的体感外设。单买一个Kinect摄像头现在最低价在780左右。还有一种是Kinect for Windows,与Xbox360版本不同的它支持近景模式,也就是在距离摄像头比较近的空间也能识别,为了适应在PC机上应用。
系统的软件环境要求:必须是Windows 7以上微软的操作系统,还需要在电脑上安装Visual Studio 2010、Kinect SDK和Kinect develop tool。在安装Kinect SDK之前不要插入Kinect,安装完成后,插入Kinect,系统自动提示安装驱动,等待驱动安装完之后,就可以打开Kinect develop tool自带的例程来测试Kinect是否正常工作。
系统实现很多种手势,作者从中选取右手向右挥动的动作为例。如下图4.3所示,操作者右手慢慢向下挥动,前两张图显示还不能识别,第三张截图显示手势被能正确识别出来,并在Recognised as:行显示Right hand wave,说明我们的识别器是有效工作的。
33
杭州电子科技大学硕士学位论文
图4.3 动态手势识别
为了测试DTW动态规划算法的识别率,通过设计一个实验来测试,本次实验选取6个手势:左手向左挥手、右手向右挥手、左手向上移动、右手向上移动、左手向右挥、右手向左挥手。每种手势重复做100次,为了保证实验的一致性,都是有一个人完成,实验结果如表4.1所示:
表4.1 动态手势识别率
动态手势 左手向左挥手 右手向右挥手 左手向上移动 右手向上移动 左手向右挥手 右手向左挥手
测试个数 100 100 100 100 100 100 传统的DTW 正确个数 82 85 90 84 80 90 识别率% 82 85 90 84 80 90 86 90 95 90 89 96 加权DTW 正确个数 识别率% 86 90 95 90 89 96 实验结果表明基于Kinect骨架提取的加权DTW动态规划算法比传统的DTW算法识别率
高,鲁棒性好,降低了计算量。在不同的手势下都能取得不错的结果,6个手势平均识别率达到了91%。部分手势出错的原因与传感器获取图像的帧速不稳定有关,也与训练的模板不够丰富有关,导致不同人的操作与模板差异较大有关,还有因为实验在实验室操作,收到实验室其他人员的干扰。
34
杭州电子科技大学硕士学位论文
4.4 本章总结
本章主要对动态的手势识别算法做出了深入的研究。针对动态手势的检测,本文首先用Kinect传感器收集彩色图和深度图、通过Kinect SDK获取骨骼特征并进行平滑滤波,由于动态的手势识别根据实际应用场景的需要采用DTW动态规划算法,然后研究DTW动态规划算法的原理,根据识别手势的时候不同的关节点的权重是不同的,提出加权DTW动态规划算法,该算法能有效地用统计方法进行训练,然后通过分析手势轨迹特征与加权的骨骼关节点序列匹配达到识别的功能,从而有效的识别挥手、移动、推动等动作。该方法的优点是训练不需要大量的计算,而且不受背景、距离等的影响,能满足远距离的动态手势识别的需要。本章实现的动态手势识别方法具有识别稳定,鲁棒性好,唯一的缺点是需要大量的计算,从而对计算机的运算速度有较高的要求。
35
杭州电子科技大学硕士学位论文
第五章 总结与展望
5.1 总结
本文首先介绍了手势识别研究的背景及意义、以及目前的发展状况和基于视觉的手势识别的常用方法,并对Kinect传感器的基本原理和OpenNI框架做了较详细的分析。接着对深度图像的获取,包括深度信息的表示、深度信息与实际距离之间的转换、深度图像到RGB图像的配准做了深入的研究,最后对获取的深度图像进行深度中值滤波和形态学的操作,获取效果良好的深度图,为下文进一步的使用奠定了基础。
在上面方法与理论的基础上,接着对基于深度信息的静态手指检测和手势识别做了深入的研究,使用了阈值分割和K均值聚类算法,完整的提取出了手部图像。然后分析了手指检测的三种方法,给出了方法各自的优缺点。最后通过实验以及实验结果的比较分析,表明基于几何的手指检测在算法鲁棒性方面要优于其他几种方法。在手指识别方面,本文提出了一种较好的识别手指名字方法和基于分类器的手势识别方法。
最后考虑到需要识别动态的手势,本文提出基于动态规划算法的动态手势识别方法,并实现加权DTW算法的软件系统,首先用Kinect传感器收集彩色图和深度图、通过Kinect SDK获取骨骼特征并进行平滑滤波,从而有效的获取用户的骨骼信息,动态的手势识别根据实际应用场景的需要采用DTW动态规划算法,研究DTW动态规划算法的原理,根据识别手势的时候不同的关节点的权重是不同的,提出加权DTW动态规划算法,实验证明该算法能有效地用统计方法进行训练,然后通过分析手势轨迹特征与加权的骨骼关节点序列匹配达到识别的功能,能识别挥手、移动、推动等动作。该方法的优点是训练不需要大量的计算,而且不受背景、距离等的影响,能满足远距离的动态手势识别的需要,具有识别稳定,鲁棒性好,唯一的缺点是需要大量的计算,从而对计算机的运算速度有较高的要求。
36
杭州电子科技大学硕士学位论文
第六章 下一步工作
计算机早已普及,人们对传统的人机交互模式已经厌倦,虽然新的交互模式,特别是手势识别一直是学者和专家的研究热点,投入了很大的精力,也取得了相当大的成果,但是以手势作为交互方式的应用没有普及应用,其中有以下两方面原因。第一,目前大多数研究者主要将注意力集中在基于视觉的手势识别上,这种方法在理想环境下的实验中能达到较高的识别率,但是这种环境的背景简单不能在现实中使用,因为现实中环境复杂,光照条件不同,研究者仍然需要继续研究鲁棒性强,识别率高的算法才能商业使用,因为手势识别要商业使用需要很高的稳定性。第二,硬件性能方面有待提高,以前深度传感器的价格很高,所以没有研究人员研究基于深度信息的手势识别,微软推出Kinect传感器后,由于其价格低、性能高,其均衡的能力一下子把市场打开了,不仅是普通游戏用户抢购,学者也开始研究基于Kinect各种理论,比如骨架提取,手势识别,人脸识别。
尽管存在很多问题,但是随着技术的不断完善,手势识别的技术越来越可能普遍的商业化,前几年研究者对手势识别的技术普遍的看法是技术难点多,技术种类繁多但是都难以取得显著的效果,三年前微软公司联合PrimeSence公司推出的Kinect传感器,并与Xbox360游戏机完美的结合,给用户带来了从未有过的人机交互的体验,在短短的时间里游戏机销售一空,一度断货。这件事第一说明了市场对更加贴近自然的手势操作计算机的需求非常强大;第二说明了手势识别技术出现了拐点,有从基于视觉技术的手势识别方法转向基于深度信息的手势识别;第三手势识别的应用不单单局限在操作鼠标等等,可以扩展到虚拟手术,体感广告,虚拟试衣间等等方面的应用,而且未来深度传感器的价格势必将继续下降。
本文从深度信息这个角度,结合基于视觉的手势识别技术,分别研究了基于静态手势识别和动态手势识别技术。针对静态手势识别的研究中,将计算机几何的技术与深度信息结合,获得了不错的检测手势数字和识别手指名字的效果,在后续的研究中将根据前期的手指检测获取了丰富的信息,可以增加识别手势的种类,例如胜利的手势„V‟,“OK”等手语识别,基于这个系统,也可以很方便的在后续研究中开发出各种应用,比如手势控制鼠标,机器手臂,幻灯片播放[39]等等。
针对动态手势识别的研究中,本文将动态规划算法与深度信息结合,实现动态手势的识别,比如左右手的挥动,左右的上下推动。实现加权DTW算法的软件系统,首先用Kinect传感器收集彩色图和深度图、通过Kinect SDK获取骨骼特征并进行平滑滤波,从而有效的获取用户的骨骼信息,动态的手势识别根据实际应用场景的需要采用DTW动态规划算法,研究DTW动态规划算法的原理,根据识别手势的时候不同的关节点的权重是不同的,提出加权DTW动态规划算法,实验证明该算法能有效地用统计方法进行训练,然后通过分析手势轨迹特征与加权的骨骼关节点序列匹配达到识别的功能,能识别挥手、移动、推动等动作。该方法的优点是训练不需要大量的计算,而且不受背景、距离等的影响,能满足远距离的动态手
37
杭州电子科技大学硕士学位论文
势识别的需要,比如孙靖研究在移动终端,借助手机加速度传感器实现DTW算法[40]。唯一的缺点是需要大量的计算,从而对计算机的运算速度有较高的要求。未来可以添加更多的手势,而且应用更加广泛。
38
杭州电子科技大学硕士学位论文
致谢
转眼间,两年半的硕士生活即将过去,在写这篇大论文的同时也感觉到毕业的临近。在这两年半的生活中,点点滴滴都是美好的回忆。从刚入学时的迷茫到渐渐清晰自己的研究生期间所要研究的方向开始,就正式体会到了什么才是真正的研究生生活。这期间我的导师赵辽英教授给了非常大的帮助,不仅是在生活上,尤其在学术的研究上给予我细心的指导。她的渊博的学术知识和对研究领域前沿的清晰的认识,使我在做研究时少走了很多的弯路,节约了我很多宝贵的时间,让我提前完成了毕业所需的小论文。同时,她的严谨的治学态度,开阔活跃的思维方式一直影响着我和激励着我,这将是我一生中最宝贵的经验,让我终身受益。在此表示我最诚挚的敬意和最衷心的感谢。
同时,感谢实验室的全体成员:豆俊锋、李富杰、郑俊鹏、吕步云、刘洋和范明阳,感谢我所有的朋友,在这两年多的时光里一直相伴,在和他们一起相处的日子里,我的研究生生活并不孤单,想运动时,我们会一起打打球锻炼身体。我们一起努力,一起奋斗,向着自己的梦想前进。
最后,感谢我的父母和家人,他们的理解、帮助和支持给了我巨大的信心和动力,在此表示最最诚挚的感谢,祝愿他们身体健康,万事如意。
39
杭州电子科技大学硕士学位论文
攻读硕士期间科研成果
参加了的项目:浙江省自然科学基金项目资助(LY13F020044),浙江省隧道交通视频项目。 发表学术论文:基于Kinect深度信息的手指检测和手势识别[J]. 计算机科学与技术汇刊, 2014年3月发表。
40
杭州电子科技大学硕士学位论文
参考文献
[1] Dan R.O.et al. Where Will We Be Ten Years from Now[A]. UIST2007[C]. USA.2007
[2] Sushmita Mitra, Tinku Acharya. Gesture Recognition: A Survey[J]. IEEE Trans. on Systems,
Man, and Cybernet-ics-Part C: Applications and Reviews, 2007, 37(3): 311-324.
[3] Sturman D J, Zeltzer D. A survey glove-based input. IEEE Computer Graphics and
Applications, 1994,14:30-39.
[4] DJ.Sturman. Hand on interaction with virtual environments[C]. ACM.SIGGERAPH
Symposium on user interface and software Technology, 1989.
[5] Wayne Piekarski, Thomas Bruce H. The tinsmith system:demonstrating new techniques for
mobile augmented reality modeling. In Third Australasian conference on User interfaces, Melbourne, Victoria, Australia, 2002:61-70.
[6] Moeslund, Nrgaard L. A Brief Overview of Hand Gestures used in Wearable Human Computer
Interfaces. Technical Report CVMT 03-02, Computer Vision and Media Technology Lab, Aalborg University, DK, 2003.
[7] Eric Foxlin, Michael Harrington. Weartrack:A Self-referenced Head And Hand Tracker For
Wearable Computers And Portable VR. In International Symposium on Wearable Computing, Atlanta, GA, 2000:155-162.
[8] Norimichi Ukita, Yasuyuki Kono, Masatsugu Kidode. Wearable vision interfaces:towards
wearable information playing in daily life. In 1st CREST Workshop on Advanced Computing and Communicating Techniques for Wearable Information Playing, 2002:47-56.
[9] 江立.基于CAS-GLOVE数据手套的手势识别技术研究[D].北京:北京交通大学,2007. [10] 丁国富,王金诺,黄文培等.基BP神经网络的手套式手势识别技术研究.计算机工程与应用,
1999, 65~67.
[11] 任彧,顾成成. 基于HOG特征和SVM的手势识别[J]. 科技通报,2011,27(2):212-214. [12] 郭康德,张明敏,孙超等.基于视觉技术的三维指尖跟踪算法[J].计算机研究与发展,
2010,46(6):1013-1019.
[13] 程文山.基于 肤色分割和Camshift的手势识别研究[D].湖北:华中师范大学,2009. [14] 常亚南. 基于HMM的动态手势识别[D]. 广州:华南理工大学,2012
[15] Zeller, M., et al.: A Visual Computing Environment for Very Large Scale Biomolecular
Modeling, Proc. IEEE Int. Conf. on Application-specific Systems, Architectures and Processors (ASAP), 1997, 3-12.
41
杭州电子科技大学硕士学位论文
[16] Davis,J., Bobick,A.: Virtual PAT: A Virtual Personal Aerobic Trainer, Proc. Workshop on
Perceptual User Interfaces, 1998, 13-18.
[17] Quek, F.: Unencumbered Gestural Interaction, IEEE Multimedia,1997,13(4),36-47.
[18] Triesch, J., Malsburg, C.A Gesture Interface for Human-Robot-Interaction, IntlConf. On
Automatic Face and Gesture Recognition, 1998, 546-551.
[19] 陈子毫. 基于深度信息的手势检测与跟踪[D].广州省:华南理工大学,2012.
[20] 王艳,张奇志.基于Kinect深度信息的手势识别[J].北京信息科技大学学报
2013,28(1):22-26.
[21] 何小磊.基于深度信息和彩色图像的手势识别[D].湖北省:华中科技大学,2012. [22] 宋康康,陈恳,郭运艳. 深度信息辅助的均值漂移目标跟踪算法[J]. 计算机工程与应用.
2013, 1-5
[23] 王莹. 基于Kinect的Tri-tracking视频跟踪算法研究[D].辽宁:大连理工大学,2012. [24] 王书朋,姬红兵. 利用团块模型进行目标跟踪[J]. 西安电子科技大学学报. 2008,34(3),
123-130.
[25] 况鹰.基于Kinect运动捕获的三维虚拟试衣[D].广州:华南理工大学,2012.
[26] 林海波,梅为林,张毅,罗元.基于Kinect骨骼信息的机械臂体感交互系统的设计与实
现[J].计算机应用与软件,2013,30(2):157-160.
[27] 刘阳,尚赵伟.基于Kinect骨架信息的交通警察手势识别[J].计算机工程与应用,
2013,26(6):1578-1581.
[28] 陈静.基于Kinect 的手势识别技术及其在教学中[D].上海:上海交通大学,2013. [29] 钱鹤庆. 应用Kinect与手势识别的增强现实教育辅助系统[D].电子学报. 2004, 32(5):
750-753.
[30] Wikipedia. (2012, Jul.) Kinect, the free encyclopedia.[Online].Available-http://en.wikipedia.or
-g/wiki/Kinect.
[31] Wikipedia. (2012, Jul.) Wii, the free encyclopedia.[Online].Available-http://http://zh.wikipedi
-a.org/wiki/Wii.
[32] 王明东. 基于Kinect骨骼跟踪功能实现PC的手势控制[J]. 漳州职业技术学院学
报.2012,14(2),12-16.
[33] 邓瑞,周玲玲,应忍冬.基于Kinect深度信息的手势提取与识别研究[J].计算机应用研究
2013,30(4):1263-1274.
[34] R. Graham., “An efficient algorithm for determining the convex hull of a finite planar set,”
Information Processing Letters 1, pp.132–133,1972.
42
杭州电子科技大学硕士学位论文
[35] 陶丽君,李翠华,张希婧等. 基于Kinect传感器深度信息的动态手势识别[J]. 厦门大学学
报. 2013,26(1):17-20.
[36] 雷涛,罗薇薇等. 复杂环境下的运动人体骨架提取算法[J]. 计算机应用研究. 2010,27(8),
3195-3200.
[37] J. Shotton, A. Fitzgibbon, M.Cook, T. Sharp, M. Finocchio, R. Moore, A. Kipman, and A.
Blake, “Real-time human pose recognition in parts from single depth images,” 2011 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2011, pp. 1297 –1304. [38] 黄季冬. 动态手势识别技术研究与实现 [D]. 湖北省:华中科技大学.2012.
[39] 孙靖,艾矫燕. 基于视觉的实时手势识别及其在演示控制中的应用[J]. 计算机应用于自动
化. 2013,32(3),52-59.
[40] 王杰锋,周治平,苗敏敏. 移动终端手势识别中DTW 匹配算法研究[J]. 计算机工程与应用.
2013,42(3),236-271.
43
基于Kinect深度信息的手势识别
作者:
学位授予单位:
郑斌珏
杭州电子科技大学
引用本文格式:郑斌珏 基于Kinect深度信息的手势识别[学位论文]硕士 2014
因篇幅问题不能全部显示,请点此查看更多更全内容