基于Kinect骨骼信息与深度图像的指尖点检测
2019-03-19,,
,,
(河南理工大学 机械与动力工程学院,河南 焦作 454000)
0 引言
手势识别作为人机交互中的一项关键技术,是当前计算机视觉领域的研究热点。其中的指尖检测是该技术的一个重要基础组成部分,已在多个领域得到广泛应用,如智能家居、人机协同、机器人智能控制等。早期的手势识别技术多采用普通摄像头获取图像信息,该技术采集的图像易受到不同光照条件和复杂背景的影响,采用光电传感器等设备采集图像成本高、约束条件多[1-2]。传统的基于数据手套的手势识别方法识别率虽然不受光照和复杂背景影响,但是需要用户穿戴复杂设备影响交互的自然特性;基于肤色模型在YCrCb或HSV颜色空间的聚类特性分割出手势区域易受光照的影响[3];Simen Andresen, Stokkeland等人利用HSV颜色阈值分割提取手掌部分,循环遍历每一个像素点的深度值,检测矩阵中突变的像素点,但是受复杂环境影响较大。针对上述问题,提出了一种基于Kinect骨骼信息和深度图像的指尖点检测方法,重点研究内容如下:
1)在DRVI平台创建Kinect接口控件;
2)深度图像跟踪手部区域;
3)对不同手势凸包点进行K-曲率计算,生成相应的HOG特征描述子。
1 系统结构及原理
手势识别系统的结构包括图像的采集、手势跟踪与定位、手势分割与预处理、手势特征提取和指尖检测五个部分,其中手势特征提取和指尖检测是识别系统的关键,该部分的主要功能是分析设备采集的图像,提供原始图像数据,并根据不同用户对输入参数进行实时调整。
目前,国内采集深度图像的设备主要有两种,一种是因特尔的RealSense,具有体积小,方便携带但深度图的质量较差,噪声非常大;另一种是采用PrimeSense公司技术的体感摄像头,此摄像头芯片价格便宜,能耗低,而且其微小的体型适用于笔记本以及智能手机等终端。Kinect最初作为XBOX 360主机的外设,旨在让用户脱离控制器,通过语音或手势来操作XBOX的系统界面,是以PrimeSense1080系统级芯片技术为核心的图像采集装置,由彩色摄像头、深度摄像头等部件构成,还搭配追焦技术,底座马达会随着对焦物体移动跟着转动,内建阵列式麦克风,由四个麦克风同时收音比对后消除杂音,并通过其采集声音进行语音识别和生源定位,如图1所示。
图1 Kinect结构
Kinect传感器的主要功能就是可以产生三维数据,获取深度图像的方法是将结构光投射至场景,对获取的红外数据进行计算处理,并由传感器捕获相应的带有结构光的图案,采集的深度图像如图2(a)所示;微软将侦测到的3D深度图像转换到骨架追踪系统,骨骼追踪技术是Kinect的核心技术,它可以准确标定人体的20个关键点,并能对这20个点的位置进行实时追踪。利用这项技术,可以开发出各种基于体感人机交互的有趣应用如图2(b)所示。Kinect捕获的骨骼数据属于三维空间数据,将坐标信息映射到所获取的深度图像上,关节点用圆形显示,需要采用坐标映射的方法将节点从骨骼数据三维空间转换到深度数据的二维空间,根据手掌节点的坐标确定手势的大致范围,如图2(c)所示。
图2 Kinect采集的图像
2 手势分割
手势分割作为手势识别的前提,手势分割的好坏直接影响手势识别的识别率。一般的分割方法大致分为基于直方图的分割、 基于局部区域信息的分割、基于颜色等一些物理特征的分割方法,但这些分割技术大都需要对背景、用户以及视频采集加以约束,受背景复杂度和光照变化的影响较大。传统的视觉的手势提取算法主要有基于肤色的手势提取、基于运动的手势提取及基于轮廓的手势提取等,手部区域的提取通常包括手势分割、手势建模、特征匹配等过程[4]。为了更好地检测手势区域掌心点和指尖点,首先需要把手掌从复杂的背景中分离出来,在深度图中利用骨骼追踪系统确定手部、腕部坐标及灰度值,然后搜索手腕节点的端点,采用最近邻法则和阈值法则从深度图像中分离出手部区域[5]。Kinect捕获到的腕坐标(Xw,Yw,Zw)和手部关节点坐标(Xh,Yh,Zh)是骨骼空间数据,根据骨骼空间数据计算手部、腕部在深度图的坐标(Dh,Dh)和(Dw,Dw),可以得到相应的深度值dh、dw,对深度图2维数据可表示为addr(Mij)=M.data+M.step[0]*i+M.step[1]*j;M.step[]表示元素地址(i0,…iM.dims-1), 其中0≪ik (1) 式中,i表示深度图像手势区域的行数,j表示深度图像手势区域的列数,maxv表示深度图中轮廓像素的最大值。 本文在DRVI平台上做了XBOX的接口控件,DRVI是采用软件总线开放结构和COM/DCOM组件的即插即用特性来设计的具有计算机硬件模块化组装特点的面向用户的可在线编程、调试和重组的新型虚拟仪器技术。从深度图分割出来的手势区域边缘存在很多图像缺陷影响手势识别的结果,需要对手势区域进行高斯滤波处理,如图3所示。 图3 高斯滤波处理 图4(a)中被黑色矩形框圈出来的深度图像为手部区域,图4(b)是用最近邻法则分离出来的深度手势图像。然后采用形态学处理中的开闭运算对其进行去除噪声处理,能有效的消除和抑制噪声,达到图像平滑的效果[6],经过滤波和形态学处理后的手势图像边缘锯齿状明显减少,如图4(c)所示。 图4 手部区域图 在计算机科学和人机交互领域中,手势识别是通过数学算法来识别人类手势的一个议题。手势识别可以来自人的身体各部位的运动,但是一般是指手的运动或者手形识别,根据交互功能的要求有动态的识别,比如左右挥手,还有静态的手形识别,比如识别伸出手指个数,用户可以使用简单的手势来控制或与设备交互,让计算机理解人的意图,此手势识别系统主要研究研究静态手形的识别。 在连续情况下,矩特征主要表现了图像区域的几何特性,具有旋转、平移、尺度等特性的不变特征,可以据此特征来对图像进行分类。图像函数为f(x,y),那么图像的p+q阶中心矩和p+q阶几何矩分别定义为:如式(2)所示: (2) (3) 利用二阶和三阶归一化中心距构造了7个不变矩M1~M7:如式(4)所示: 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)(δ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+δ03)[3(δ30+δ12)2-(δ21+δ03)2] (4) HOG通过计算和统计图像局部区域的梯度方向直方图,如图5所示。 图5 标准图像直方图 与Hu矩的7个特征构成一组特征向量,每一种手形对应一个XML文件,生成对应的标签。根据SVM分类思想训练出一个分割超平面,即分类的决策边界,当Kinect场景内出现与预定义手形最相近的特征,即被贴上对应的标签,如图6所示。 图6 识别效果图 稳定的指尖检测算法可以应用在人机交互系统中,提升交互技术的灵活性,用 Graham Scan Algorithm扫描算法寻找边缘轮廓点中横坐标(纵坐标)最小的点作为第一个点; 1)其他的点按照极角大小顺时针排列,如果有共线的取最近的那一个,依次将P0,P1,P2三个坐标压入栈; 图7 点集P的凸包 边缘是指图像局部强度变化最显著的部分,边缘主要存在目标与目标、目标与背景、区域与区域之间。多次实验得阈值为200效果最好,如果T1<200则判定为伪轮廓,本文采用Canny边缘检测算法是对信噪比和定位之乘积的最优化逼近算子,用于手势边缘的双阈值算法检测和连接边缘[8-9],如图8(a)是手部区域的轮廓图。为去除手腕信息的干扰,首先用ApproxpolyDP逼近多边形算法只找到轮廓上的关键点,目的就是缩小指尖点所在轮廓上的范围,只是此轮廓粗犷一些[10-11];可以通过扫描图像法找到手势图像最上面的点top,以top为基点沿逼近多边形轮廓点顺时针逆时针各区30个像素点,以Ptop、Ptop+30、Ptop-30三点作圆,如图8(b)所示。从实验结果可以看出,这两种约束条件可以很好的去除冗余的手腕信息。 图8 手势轮廓图 指尖检测的一个关键问题就是掌心点提取,掌心点包含手势许多重要的信息,比如指尖点的位置、方向以及手势的种类等。目前,在图像处理中寻找掌心点有图像矩和距离变换等两种常用算法。在图像处理、计算机视觉和相关领域中,通过图像矩可以轻易得到图像质心和关于其方向的信息,图像矩是沿x、y方向对轮廓边界像素的积分,利用零阶矩和一阶矩求重心,深度图中的手部区域可以用手部节点粗略表示手势位置但不能准确代表手掌掌心,手势骨骼节点根据人体姿态不同发生抖动[12-13];距离变换的基本思想就是计算图像中像素点到最近零像素点的距离,象棋格距离(Chessboard Distance),公式(5)如下: D=max(|x2-x1|,|y2-y1| (5) 此距离变换减少了计算量,将二值化手掌图像内的手掌部分设为白色,外部区域设为黑色,该算法可以精确找到手掌掌心,如图9所示。 图9 距离变换掌心图 计算一个图像中非零像素点到最近的零像素点距离,通过合理的阈值限制可以得到去除手指的图像,手部质心即为该图像的几何中心,如图10所示手势的质心及坐标。 图10 手势质心及坐标 指尖检测的效果影响交互的丰富度、灵活性。Lee等人通过计算掌心与轮廓的边缘距离检测单个指尖的位置实现虚拟交互[14]。本文采用手势轮廓凸包的缺陷和轮廓点曲率结合的方法检测指尖点,计算不同手势指尖点的HOG特征描述子,并识别0~5的数字手势。利用计算机视觉库函数convexityDefects检测出手势轮廓与逼近多边形围成的凹缺陷和凸包,在此创建一个迭代器对顺序或关联容器类型中的每个元素进行连续访问,如图11所示convexity hull与手掌之间的部分为convexity defects。每个convexity defect区域有四个特征量:起始点(startPoint),结束点(endPoint),距离convexity hull最远点(farPoint),最远点到convexity hull的距离(depth),A~F区域为检测出的缺陷,则startPoint、endPoint为指尖候选点。基于曲率的指尖检测法主要依靠计算手部区域中类指尖点的近似K曲率,蓝色折线是手指细化的结果,目的就是为了让图像信息的特征更加突出,细化算法一定要满足收敛性、保持原图的基本形状及减少笔画相交处的畸变等,式(6)所示: y=p0*20+p1*21+p2*22+p3*23+p4*24+…, (6) 图11 手势缺陷图 (7) 图12 K曲率算法 一般在指尖点位置的曲率达到最大,曲率K的取值范围(-1,1),在其范围中设定阈值T,K≫T此点才可能是类指尖点[15-16],需要满足式(8): (8) 目前检测出来的点称为“类指尖点”可能是指尖点、手指之间的凹槽点或者手掌末端与手臂连接处的点,需要添加一个过滤条件排除凹槽点: 1)由图12所知,以轮廓上任意一点P(i)前后相隔m个像素点形成的夹角,如果夹角25°<α<35°,则此点为指尖点,如果夹角γ接近180°则此点在手指轮廓上;如果夹角β大于50°则判断为指尖凹槽点; 2)如图13所示可以比较单指尖点到掌心点的距离,如果指尖点的到掌心的距离大于1.5倍相邻凹槽点到掌心点距离,则此点为指尖点,否则没有手指伸出,此方法既可以检测单指尖又可以检测多指尖; 图13 重心距离法 3)由图11知凹缺陷深度应该大于掌心圆半径,但小于手部轮廓最小外接圆半径,经过五指伸开近似正方形这一条件过滤掉手腕干扰,如果类指尖点符合公式,则此点为凹槽点,如图14所示。 (9) 图14 凹槽点检测法 把检测到的凸轮廓的凸包点储存在hullpoint向量容器中,遍历窗口中所有轮廓,算法中定义ofstream类型,把.txt里面的坐标点导入origin数据处理软件中生成散点图,如图15(a)所示,在一幅图像中,HOG利用梯度或边缘的方向密度分布能够很好地描述局部目标区域的特征的思想,对凸包点集的梯度信息作出统计,生成HOG特征描述,图像的梯度针对的是每一个像素计算得到,水平边缘梯度算子:[-1,0,1], 垂直边缘算子[-1,0,1]T, 图像中像素点(x,y)的梯度为: (10) 式中,gx(x,y),gy(x,y),h(x,y)分别表示输入图像像素点(x,y)处的水平方向梯度、垂直方向梯度和像素值。 由式(10)得,类指尖点(x,y)的幅值和梯度方向分别为: (11) 然后在cell中进行方向梯度直方图的构建,统计局部图像信息并进行编码,如图15(b)所示: 图15 HOG手势特征图 为了验证本文指尖检测和手势提取算法的可靠性和准确性,实验采用微软Kinect XBOX 360一代摄像头采集深度图像和骨骼数据,深度图像分辨率为320×240。基于Microsoft Visual Studio 2010环境,通过配置计算机开源视觉库OpenCV2.4.9、Kinect SDK1.8,DRVI4.5控件接口,用C++进行编程。本文对指尖数目0~5的6种情况进行测试,识别效果如图16所示。 图16 不同数目指尖识别效果 针对图16所示的6种数字手势进行识别,识别邀请5位实验者进行试验测试,每位实验者在不同光照下对每个手势分别做10次,总共采集300张样本图像,根据测试的结果每种手势的识别率如表1所示: 表1 6种数字手势检测结果 由图16和表1可以看出,数字手势0和数字手势5识别率最高,对于数字5五指伸开时各手指之间间距较大相互不影响,数字手势0无指尖特征;数字手势2只有两个缺陷起始点和一个凹槽点识别率也比较高;数字手势3和4容易识别混淆手势发生抖动时检测不到指尖点导致错检漏检;由于数字手势1无轮廓缺陷点无法使用曲率算法根据中心距离法求得,所以漏检率较高。图17(a)和图17(b)是在不同光照和复杂环境下检测的结果。 图17 不同光照和复杂环境识别结果 本文首先分析了手势识别研究的背景和意义,重点对手势分割和指尖检测的方法和关键技术做了深入研究,主要工作为:在静态手势识别方面利用Kinect骨骼数据快速定位手势在深度图的位置;在DRVI平台创建XBOX接口控件快速处理图像,减小运算量,利用设定阈值去除为轮廓,距离变换处理寻找掌心点;利用凸包和K-曲率结合方法寻找指尖点,生成相应的特征描述算子。本文的研究内容可以解决不同光照和复杂背景下手势识别的难题,避免采用肤色转换算法中的类肤色区域的干扰。当人距离Kinect较远或者坐着的时候手掌节点发生抖动可能会导致跟踪失败,而且对预定义的手势种类有限,所以该算法还需进一步深入研究。研究成果可以将基于视觉的指尖检测这一新型技术融入到机器人控制之中,简化机器人控制的复杂度,提高人与机器人之间的交互性。3 手势识别
4 指尖检测
4.1 手部区域边缘检测
4.2 计算手势区域掌心点位置
4.3 指尖点检测
5 实验结果与分析
6 结语