一种基于kinect2的动态手势识别方法技术领域
本发明涉及一种基于kinect2的动态手势识别方法。
背景技术
随着信息技术的发展,人机交互的方式也在发生着变化,手势作为一种人们日常
生活中自然的一种交互方式也被运用到人机交互中。近年来基于视觉技术的手势识别是人
机交互领域的研究热点,微软kienct2体感设备能够在获得二维图像的同时也可以获得环
境的深度信息,大大方便了对手势识别的研究,目前对动态手势的研究大多数是只对目标
的轨迹进行识别,而忽略了手势运动过程中的手型的变化。
因此,需要提供一种新的动态手势识别方法以解决上述问题。
发明内容
为解决现有技术的不足,本发明的目的在于提供一种基于kinect2的动态手势识
别方法。
为了实现上述目标,本发明采用如下的技术方案:
一种基于kinect2的动态手势识别方法,将动态手势的轨迹特征和手型特征分别
建立隐马尔科夫模型,并利用朴素贝叶斯分类将手型识别结果和轨迹识别结果作为输入特
征进行手势识别。
更进一步的,包括以下步骤:
步骤1、利用kinect2的骨骼跟踪技术得到手掌心的三维位置并映射到深度图像中
得到手势深度图像;
步骤2、对手势深度图像和运动轨迹分别进行预处理,提取得到手型特征和运动轨
迹方向角特征;
步骤3、分别对手型特征和运动轨迹方向角特征建立不同的隐马尔科夫模型,得到
手型隐马尔科夫模型和轨迹隐马尔科夫模型;
步骤4、将步骤3得到的手型隐马尔科夫模型和轨迹隐马尔科夫模型的输出作为特
征,利用朴素贝叶斯分类器进行手势识别。
更进一步的,步骤1中利用kinect2的骨骼跟踪技术得到手掌心的三维位置并映射
到深度图像中得到手势深度图像包括以下步骤:
步骤S11:利用kinect2获得Depth数据、Body index数据、Body数据;
步骤S12:根据Body index数据:如果人体有多个,根据深度信息,选择距离
kinect2最近的人体作为目标,提取其右手掌心骨骼点和右手腕部骨骼点的空间坐标;
步骤S13:利用kinect2SDK中的MapCameraPointToDepthSpace函数将相机坐标系
中的掌心点和手腕点转换到深度空间,得到掌心和手腕骨骼点在深度图像中的位置;
步骤S14:以掌心点为圆心,掌心与手腕点距离的1.5倍为半径画圆进行手势的分
割,得到手部的图像,然后以手腕点的深度作为阈值,将大于此深度值的像素去除,得到完
整的手势深度图像。
更进一步的,所述步骤2中对手势深度图像和运动轨迹分别进行预处理,提取得到
手型特征和运动轨迹方向角特征包括以下步骤:
步骤S21:对步骤1)得到的手势深度图像进行二值化,对得到的二值化图像进行中
值滤波,去除椒盐噪声,并进行形态学的腐蚀膨胀操作去除空洞杂点;
步骤S22:提取手势图像的Hu不变矩作为手型特征;对手心的三维运动进行卡尔曼
滤波跟踪得到处理过的手心运动轨迹,提取手心运动轨迹的方向角特征得到运动轨迹方向
角特征。本发明在动态手势特征提取中加入了经过量化的手型特征,加轨迹与手型分开建
立隐马尔科夫模型(HMM)。
更进一步的,步骤S22中提取手势图像的Hu不变矩作为手型特征,手型特征包括如
下所述的七个不变矩:
M1=η20+η02
M2=(η20-η02)2+4η112
M3=(η30-3η12)2+(3η21-η03)2
M4=(η30+η12)2+(η21+η03)2
M5=(η30-3η12)2(η30-η12)[(η30+η12)2-3(η21+η03)2]
+(3η21-η03)(η21+η03)[3(η30+η12)2-(η21+η03)2]
M6=(η20-η02)[(η30+η12)2-(η21+η03)2]+4η11(η30+η12)(η21+η03)
M7=(3η21+η03)(η30+η12)[(η30+η12)2-3(η21+η03)2]
+(η30-3η12)(η21+η30)[3(η30+η12)2-(η21+η03)2]
其中,归一化的中心矩为ηpq=μpq/(μ00ρ)
式中,ρ=(p+q)/2+1,
N和M分别是图像的高度和
宽度,
和
分别代表图像的重心,![]()
![]()
更进一步的,步骤S22中对手心的三维运动进行卡尔曼滤波跟踪得到处理过的手
心运动轨迹,提取手心运动轨迹的方向角特征得到运动轨迹方向角特征,其中,方向角通过
下式计算得到:
![]()
θ表示相邻轨迹点之间的角度,(xi,yi)和(xi+1,yi+1)分别为相邻轨迹点的坐标。
更进一步的,对于得到的方向角,进行12方向矢量量化编码,如下式:当θ>=15°
时
其中,f=13-k
当θ<15°时
其中,f=(k+7)%12
f的值就是量化后的角度的特征值,取值为1~12的整数。
更进一步的,所述步骤3中分别对手型特征和运动轨迹方向角特征建立不同的隐
马尔科夫模型,得到手型隐马尔科夫模型和轨迹隐马尔科夫模型,包括以下步骤:
步骤S31:对于手型特征提取值Hu矩,采用k-means向量量化方法,将特征向量转化
成离散特征标号序列,作为隐马尔科夫模型的输入;
步骤S32:提取一个训练样本,分别对手型隐马尔科夫模型和轨迹隐马尔科夫模型
进行参数初始化;
步骤S33:利用Baum-Welch算法分别对手型隐马尔科夫模型和轨迹隐马尔科夫模
型进行参数的训练,重复步骤S32,对每种手势进行训练得到每种手势的手型隐马尔科夫模
型和轨迹隐马尔科夫模型。
更进一步的,所述步骤4中将步骤3得到的手型隐马尔科夫模型和轨迹隐马尔科夫
模型的输出作为特征,利用朴素贝叶斯分类器进行手势识别包括以下步骤:
步骤S41:对于训练好的手型隐马尔科夫模型和轨迹隐马尔科夫模型,输入另一部
分训练样本,分别得到手型隐马尔科夫模型的输出和轨迹隐马尔科夫模型的输出;
步骤S42:将步骤S41得到的输出作为2维特征向量X={x1,x2},x1和x2分别对应与
手型和轨迹对应识别结果的编号,识别手势的结果为n个类,分别计算
![]()
其中,sk表示在编号Ak上具有值的类Ci的训练样本数,si为Ci上的总样本数;
步骤S43:对于输入特征量X,根据贝叶斯定理:
![]()
其中,
选出最大的概率值的手势类
别即为识别结果。
有益效果:本发明的基于kinect2的动态手势识别方法将复杂的动态手势过程分
解为手型变化和轨迹运动变化,避免使用高维特征对手势进行描述,降低了运算的复杂度;
由于加入了手型的特征,因此可以识别更多的手势,同时也进一步提高了识别手势的精确
度。
附图说明
图1是本发明基于kinect2的动态手势识别方法的流程图;
图2是本发明方向角量化编码示意图;
图3是本发明使用的HMM模型结构图。
具体实施方式
以下结合具体实施例对本发明作具体的介绍。
实施例1:
请参阅图1所示,基于kinect2的动态手势识别方法,利用kinect2深度摄像头追踪
人的手,通过对动态手势的手型特征和运动轨迹特征分别建立隐马尔科夫模型(HMM),并结
合朴素贝叶斯分类器进行手势的识别,该方法包括以下步骤:
步骤1:利用kinect2的骨骼跟踪技术得到手掌心的三维位置并映射到深度图像中
得到手势深度图像,具体为:
步骤S11:利用kinect2获得Depth数据、Body index数据、Body数据;
步骤S12:根据Body index数据,若人体有多个,根据深度信息,选择距离kinect2
最近的人体作为目标,提取其右手掌心骨骼点和右手腕部骨骼点空间坐标;
步骤S13:利用kinect2 SDK中MapCameraPointToDepthSpace函数将相机坐标系中
的掌心点和手腕点转换到深度空间,得到掌心和手腕骨骼点在深度图像中的位置;
步骤S14:以掌心点为圆心,掌心与手腕点距离的1.5倍为半径画圆进行手势的分
割,得到手部的图像,然后以手腕点的深度作为阈值,将大于此深度值的像素去除,从而将
多余的手臂部分去除,得到完整的手势图像。
步骤2:对手势深度图像以及运动轨迹进行预处理,并提取手型特征以及轨迹方向
角特征,具体为:
步骤S21:对得到的手势图像进行二值化,对得到的二值化图像进行中值滤波,去
除椒盐噪声,并进行形态学的腐蚀膨胀操作去除空洞杂点;
步骤S22:手势图像提取它的Hu不变矩作为手型特征,对于图像f(x,y),它的p+q阶
几何矩(标准矩)定义为:
![]()
p+q阶中心矩定义为:
![]()
其中
和
代表图像的重心,
![]()
![]()
对于离散的数字图像,用求和代替积分
![]()
![]()
其中N和M分别是图像的高度和宽度,归一化的中心矩定义为:
ηpq=μpq/(μ00ρ) (7)
其中ρ=(p+q)/2+1。
利用二阶和三阶中心距可以定义七个不变矩,可以保持图像在平移、缩放和旋转
时保持不变,具体定义:
M1=η20+η02 (8)
M2=(η20-η02)2+4η112 (9)
M3=(η30-3η12)2+(3η21-η03)2 (10)
M4=(η30+η12)2+(η21+η03)2 (11)
![]()
M6=(η20-η02)[(η30+η12)2-(η21+η03)2]+4η11(η30+η12)(η21+η03) (13)
![]()
由此我们可以计算出手势图像的Hu矩,这七个不变矩就作为手势图像的特征值;
步骤S23:对手心的三维运动进行卡尔曼滤波跟踪得到处理过的手心运动轨迹,并
相隔10mm提取一次点的坐标值并保存;
步骤S24:提取轨迹的方向角特征来作为运动轨迹的特征,轨迹点的运动方向用相
邻点的之间的方向矢量(r,θ)来表示,其中r表示方向矢量的大小,即相邻轨迹点之间的距
离,θ表示相邻轨迹点之间的角度,我们取角度作为轨迹的运动特征,角度的计算公式为
![]()
结合图2,对于得到的角度值,进行12方向矢量量化编码,具体的公式为
当θ>=15°时
![]()
当θ<15°时
![]()
f的值就是量化后的角度的特征值,取值为1~12的整数;
步骤3:分别对手型特征以及方向角特征建立不同的隐马尔科夫模型,具体过程
为:
步骤S31:对于手型特征提取值Hu矩,采用k-means向量量化方法,将特征向量转化
成离散特征标号序列,作为HMM模型的输入;
步骤S32:一个HMM完整的参数集合可用一个五元组λ=(N,M,A,B,π)来表示,其中N
为HMM的隐含状态的个数,M为HMM观察值的个数,A={aij}为N×N状态转移概率分布矩阵,B
={bj(k)}为N×M的观察概率分布矩阵,π={π1,π2,π3...πN}为初始状态分布,模型初始化阶
段,N为HMM的隐含状态的个数可以自己定义,对于手型HMM,M为所需要识别的手型的个数,
对于轨迹HMM,为量化的方向角矢量个数即为12,转移矩阵A由下式确定:
![]()
其中aii的值与平均每个隐藏状态的持续时间d有关
![]()
为平均样本长度,观察概率分布矩阵B由下式确定:
![]()
初始状态π为第一个状态,因此确定为:
π=[1 0...0]T (21)
至此,完成模型的各个初始参数的确定;
步骤S33:利用Baum-Welch算法分别对手型HMM模型和轨迹HMM模型进行参数的训
练,Baum-Welch算法具体过程如下:
首先用到后验概率函数和概率函数可以分别得到:
γt(i)=P(qt=si|o,λ) (22)
![]()
具体的参数重构公式:
πi=P(qt=si)=γt(i) (24)
![]()
![]()
由此可以得到新的模型参数![]()
步骤4:将手型隐马尔科夫模型和轨迹特征隐马尔科夫模型的输出作为特征,利用
朴素贝叶斯分类器进行手势的识别,具体为:
步骤S41:对于训练好的手势HMM模型和轨迹HMM模型,输入另一部分训练样本,分
别得到手型HMM模型的输出和轨迹HMM模型的输出;
步骤S42:将步骤S41得到的输出作为2维特征向量X={x1,x2},x1、x2分别对应与手
型和轨迹对应识别结果的编号,识别手势的结果为n个类
分别计算
![]()
其中sk表示在编号Ak上具有值的类Ci的训练样本数,si为Ci上的总样本数;
步骤S43:对于一个新的输入特征量X,根据贝叶斯定理:
![]()
其中
由此选出最大的概率值的手
势类别即为识别结果。