一种基于深度图的手部特征点检测方法

xiaoxiao2020-10-23  24

一种基于深度图的手部特征点检测方法
【技术领域】
[0001] 本发明属于计算机模式识别和计算机视觉的技术领域,具体地涉及一种基于深度 图的手部特征点检测方法。
【背景技术】
[0002] 手势交互是新型人机交互研宄中一种重要的交互方式,这种交互是非接触性的、 自然的交互,更符合人的自然行为,因此基于手势的交互方式将是未来人机交互发展的趋 势。手势识别技术涉及人工智能、模式识别、机器学习、计算机图形学等众多学科。另外手 势的研宄设计到数学、计算机图形学、机器人运动学、医学等诸多学科。因此,手势识别的研 宄具有非常重要的研宄价值与研宄意义。当前基于手势交互的研宄主要集中在基于RGB光 学图像的处理上,包括人手检测、目标跟踪、手势识别三部分。
[0003] 手势检测用于检测获取控制权的手势,主要分为静态手势与动态手势两种方式, 静态手势的检测应用的是基于区域特征的目标检测方法,比如Haar特征、H0G特征、肤色特 征、形状特征等,动态手势的检测主要是基于运动的检测算法,根据运动区域的特征检测某 种预定义的手势。目前手势检测研宄较为成熟,但受光照、背景等的影响。
[0004] 目标跟踪分为非变形目标的跟踪与变形目标的跟踪。非变形目标跟踪主要基于形 状、轮廓、模板等特征,结合粒子滤波等目标搜索算法,叠加目标小角度旋转、缩放、平移等 仿射变换实现跟踪,跟踪较好且能准确判断目标是否跟踪丢失。变形目标跟踪主要基于颜 色等区域特征,结合Camshift、MeanShift等搜索算法实现区域的跟踪。
[0005] 手势识别部分与传感器无关,主要是针对跟踪结果生成的目标序列进行轨迹、时 间序列等的识别,主要算法有HMM、DTW、模板匹配等,根据对序列的切分与分类结果识别其 中的有效手势并交由系统后端进行处理。
[0006] 但由于RGB图像无法获取物体在三维空间中的信息,相关的算法受到周围环境、 光照、背景等因素的影响,在目标检测与跟踪上鲁棒性交叉,难以实现复杂场景下的任意目 标检测和在线跟踪,应用收到很大的限制。因此,越来越多的研宄者开始利用深度图像来进 行目标的检测和跟踪,从而将目标于背景分离开来,提高目标检测与跟踪的准确率。现有的 深度程序应用研宄主要集中在基于人体控制的研宄,通过对人体骨骼提取实现体感控制与 行为识别,这些检查算法要求人体的大部分出现在场景中,并且不能与其他目标连接,应用 范围受到了限制。

【发明内容】

[0007] 本发明的技术解决问题是:克服现有技术的不足,提供一种基于深度图的手部特 征点检测方法,其克服基于RGB光学图像以及深度图像手部检测算法等在实际手势交互场 景中的局限性,能够基于深度图像进行手部特征点识别。
[0008] 本发明的技术解决方案是:这种基于深度图的手部特征点检测方法,包括以下步 骤:
[0009] (1)手部分割:利用Kinect采集到人体运动视频序列来提取手部,通过深度图利 用0PENNI得到人体手部位置信息,通过设定搜索区域及深度阈值方法,初步获得手心点; 利用0PENCV的find_contours函数得到手部轮廓;通过找到手轮廓内最大内接圆圆心,精 确确定手部手心点,通过计算所有手部内部点到轮廓点之间的最短距离m,在最短距离中找 到最大值M,M所代表的手部内部点为手心点,内接圆半径R=M;
[0010] (2)特征点提取:设计实现了一种改进的基于CSS曲率图进行手部特征点(指尖 点及指谷点)检测的方法。通过不断对手部轮廓进行高斯平滑,并结合曲率阈值从而得到 CSS曲率图,根据图中CSS轮廓分析极限值得出手部指尖点及指谷点坐标,同时需要补全根 据CSS曲率图无法得到的手部指谷点;
[0011] (3)补全缺失手指,提出一种利用角度阈值和深度跳变结合的方式来补全缺失手 指的方法,从而找到弯曲手指的指尖点。
[0012] 本发明采用微软公司的Kinect传感器,通过Kinect获取人体运动深度图像与彩 色图像,通过深度图利用0PENNI得到人体骨架点信息,通过0PENCV的find_contours函数 得到手部轮廓,通过找到手轮廓内最大内接圆圆心,确定手部手心点,从而克服基于RGB光 学图像以及深度图像等手部检测算法在实际手势交互场景中的局限性,能够基于深度图像 进行手部特征点识别。
【附图说明】
[0013] 图1根据本发明的一种基于深度图的手部特征点检测方法的流程图。
[0014] 图2根据本发明的裁剪手腕的流程图。
[0015] 图3根据本发明的获取指尖CSS曲线流程图
[0016] 图4根据本发明的补全指谷点流程图。
【具体实施方式】
[0017] 这种基于深度图的手部特征点检测方法,包括以下步骤:
[0018] (1)手部分割:利用Kinect采集到人体运动视频序列来提取手部,通过深度图利 用0PENNI得到人体手部位置信息,通过设定搜索区域及深度阈值方法,初步获得手心点; 利用0PENCV的find_contours函数得到手部轮廓;通过找到手轮廓内最大内接圆圆心,精 确确定手部手心点,通过计算所有手部内部点到轮廓点之间的最短距离m,在最短距离中找 到最大值M,M所代表的手部内部点为手心点,内接圆半径R=M;
[0019] (2)特征点提取:设计实现了一种改进的基于CSS曲率图进行手部特征点(指尖 点及指谷点)检测的方法。通过不断对手部轮廓进行高斯平滑,并结合曲率阈值从而得到 CSS曲率图,根据图中CSS轮廓分析极限值得出手部指尖点及指谷点坐标,同时需要补全根 据CSS曲率图无法得到的手部指谷点;
[0020] (3)补全缺失手指,提出一种利用角度阈值和深度跳变结合的方式来补全缺失手 指的方法,从而找到弯曲手指的指尖点。
[0021] 本发明采用微软公司的Kinect传感,通过Kinect获取人体运动深度图像与彩色 图像,通过深度图利用0PENNI得到人体骨架点信息,通过0PENCV的find_c〇nt〇urs函数得 到手部轮廓,通过找到手轮廓内最大内接圆圆心,确定手部手心点,从而克服基于RGB光学 图像以及深度图像人体检测算法等在实际手势交互场景中的局限性,能够基于深度图像进 行手势分割。
[0022] 优选地,所述步骤(1)中在计算手部内部点到每一个手部轮廓点的最小距离m时, 如果当前最小距离比当前的最大距离M小,假设这一点并不是处在中心点位置,忽略计算 此点到其他手部轮廓点的距离。
[0023] 优选地,所述步骤(1)中在手部内部和手部轮廓的N个连续的点中,只计算一个 点,N彡1〇
[0024]优选地,N= 8。
[0025] 优选地,所述步骤(2)包括以下分步骤:
[0026] (2. 1)根据公式(1)计算手部轮廓每一点的曲率,设轮廓每一点(x(t),y(t)),t= 0, ? ?N-l
[0028] 其中雄),.)>(0和邱),KO表示轮廓中位置为t的点的一阶导和二阶导,曲率阈值 为g,计算出轮廓中每一点曲率经过g的点,并记录到css曲线图;
[0029] (2. 2)根据公式(2)利用高斯平滑,对手部轮廓不断进行平滑处理
[0031] 其中?表示卷积,g(t,0)表示高斯函数,不断对手部轮廓进行高斯平滑,直到所 有点的曲率都经过指定阈值;获取CSS曲线(t,〇 ),其中〇代表使得参数点t对应卷积曲 线曲率位于2~2. 5之间的取值;在不断平滑过程中,每点曲率范围跳变在0. 5以内,保证 所有点的曲率都位于2~2. 5之间;通过寻找CSS曲线图中的局部极大值点,找到手指 指尖 点集;
[0032] (2.3)指谷点的计算与步骤(2.2)中指尖点计算相同,但对应卷积曲线曲率位 于-1. 5~-1之间;
[0033] (2. 4)遗漏指谷点补充:若第一个指尖点位置比第一个指谷点位置靠前,则此指 尖点之前缺失一个指谷点,根据第一个指尖点和指谷点在手部轮廓中的相对位置的距离, 在指尖点前方估算出对应指谷点坐标,并将新指谷点放入指谷点集合中;若当最后一个指 尖点位置比第最后指谷点位置靠后,则此指尖点之后缺失一个指谷点,则根据最后一个指 尖点和指谷点在手部轮廓中的相对位置的距离,在指尖点后方估算出对应指谷点坐标,并 将新指谷点放入指谷点集合中;
[0034] (2. 5)估算手指关节点:先判断大拇指指尖是否已被检测,点列的前15% -25% 内,若已检测出指尖点,则判断为大拇指指尖,否则认为大拇指指尖未被检测;两个指谷点 中点为指根,结合指尖点,利用其平均得到手指的关节点,大拇指为两个关节点,其它手指 为三个关节点。
[0035] 优选地,所述步骤(3)包括以下分步骤:
[0036] (3. 1)若大拇指已被检测:设定另外四指中的指根与大拇指指根以及掌心连 线的余弦argcos的范围:0? 8+g~1. 4+g, 1. 4+g~1. 7+g,1. 7+g~2+g,>2+g,g= (45-depth) *0. 03,depth表示当前深度;根据此范围判断CSS未检测到的手指类型:计算CSS已检测到的手指指根同掌心以及大拇指指根的角度,如果没有角度落入之前设定好的 角度阈值内,则认为对应手指类型的指尖点缺失;以手掌心为起点,取该手指对应搜索范围 的中值角度,搜索在此直线上深度跳变最大的点,取为由于手指弯曲而丢失的手指指尖点 坐标;
[0037] (3. 2)若大拇指未被检测:搜索手部轮廓内所有点当中深度最小的点集合,在该 集合当中,以手轮廓15%~25%排序点的中点,朝掌心方向,找到集合当中沿此方向距离 最远的点,作为大拇指指尖点,最近的点作为大拇指指根点。
[0038] 以下更详细地说明本发明。
[0039] 如图1所示,本发明包括以下步骤:
[0040] (I)开始;
[0041](II)获取深度图像及彩色图像;
[0042](III)获取人体骨架点并提取出手部位置;
[0043](IV)在手附近利用深度及彩色信息阈值划分出手部区域;
[0044] (V)中值滤波;
[0045] (VI)找出手型轮廓;
[0046] (VII)分割手腕;
[0047] (VIII)结束。
[0048] 或者,本发明按照手部分割、特征点提取、补全缺失手指三个步骤来进行处理:
[0049] (1)手部分割。一般情况下,手势识别第一步是手部定位,本文是基于Kinect采 集到的人体运动视频序列来提取手部,视频序列每一帧图像分为深度图和彩色图,即先 通过深度图,利用0PENNI得到人体骨架点信息.返回人体手部位置信息(openNI.hand_ points),在手心点周围划出矩形搜索区域。在搜索区域内通过设定深度阈值(depth±5) 方式,得到与手部点深度相近点,标定为手部点。通过0PENCV的find_contours函数得 到手部轮廊。
[0050] 由于OPENNI手部点并不能正确反映手部手掌中心位置,通过找到手轮廓内最大 内接圆圆心,确定手部手心点。通过计算所有手部内部点到轮廓点之间的最短距离m,在最 短距离中找到最大值M。M所代表的手部内部点,即为手心点,内接圆半径R=M。
[0051] 为提高效率需要以下两步:
[0052] 1 :在计算手部内部点到每一个手部轮廓点的最小距离m时,如果当前最小距离已 经比当前的最大距离M要小,我们可以假设这一点并不是处在中心点位置,没有必要再计 算此点到其他手部轮廓点的距离。
[0053] 2:由于在手部内部和手部轮廓的一系列点中,连续的点在手内部非常相近,所以 在N个连续的点中,只需要计算一个点(N> = 1),所造成的误差可以忽略不计,同时性能可 提高1AN*N)。通过测试,N= 8对于结果来说是最合适。
[0054]OPENNI同时可提供手肘点坐标(openNI.elbow_point),沿着手肘与手心点方向, 在长度为1. 5R处切割手腕(如图2)。
[0055] (2)特征点提取。利用CSS曲线图像完成手部指尖、指谷点特征提取。CSS曲线图 是一个表现轮廓拐点的多尺度集合(或经过曲率为某一阈值的点的集合)。为了计算CSS 曲线图,首先计算手部轮廓每一点的曲率,设轮廓每一点(X(t),y(t)),t= 0, . .N-l
[0057] ⑴和.V(/),.i明表示轮廓中位置为t的点的一阶导和二阶导。设曲率阈值为 g,计算出轮廓中每一个曲率经过g的点,并记录到CSS曲线图。接下来利用高斯平滑,对手 部轮廓不断进行平滑处理。
[0059] 其中?表示卷积,g(t,〇)表示高斯函数。随着〇数值上升,手部轮廓会变得越 来越平滑。不断对手部轮廓进行高斯平滑,直到所有点的曲率都经过某一阈值。下一步获 取CSS曲线(t,〇 ),,其中〇代表使得参数点t对应卷积曲线曲率位于2~2. 5之间的取 值。在不断平滑过程中,每点曲率范围跳变在0.5以内,所以会保证所有点的曲率都位于 2~2. 5之间。通过寻找CSS曲线图中的局部极大值点,即可找到手指指尖点集。
[0060] 指谷点的计算同指尖点计算类似,使得对应卷积曲线曲率位于-1. 5~-1之间。
[0061] 遗漏指谷点补充:
[0062] 由于CSS只计算手部轮廓中较为尖锐的点,所以,经常会漏掉指谷点,这不利于后 续手指关节点的估算,所以接下来要补全指谷点,判断方法为:
[0063]若第一个指尖点位置比第一个指谷点位置靠前,则此指尖点之前缺失一个指谷 点,则根据第一个指尖点和指谷点在手部轮廓中的相对位置的距离,在指尖点前方估算出 对应指谷点坐标。并将新指谷点放入指谷点集合中。
[0064]若当最后一个指尖点位置比第最后指谷点位置靠后,说明此指尖点之后缺失一个 指谷点,则根据最后一个指尖点和指谷点在手部轮廓中的相对位置的距离,在指尖点后方 估算出对应指谷点坐标。并将新指谷点放入指谷点集合中。
[0065]估算手指关节点:
[0066] 两个指谷点中点算为指根,结合指尖点,利用其平均估算手指三个关节点,大拇指 为两个。其中需要判断大拇指指尖是否已被检测,检测方法:以右手为例,逆时针点列的前 15%-25%内,若已检测出指尖点,则判断为大拇指指尖,否则认为大拇指指尖未被检测。
[0067] (3)补全缺失手指:
[0068] 1、若大拇指已被检测:设定另外四指中的指根与大拇指指根以及掌心连线的余弦 argcos的范围:0? 8+g~1. 4+g, 1. 4+g~1. 7+g,1. 7+g~2+g,>2+g。g= (45-depth) *0? 03〇 depth表示当前深度。根据此范围判断CSS未检测到的手指类型,方法为:计算CSS已检 测到的手指指根同掌心以及大拇指指根的角度,如果没有角度落入之前设定好的角度阈值 内,则认为对应手指类型的指尖点缺失。以手掌心为起点,取该手指对应搜索范围的中值角 度,搜索在此直线上深度跳变最大的点,取为由于手指弯曲而丢失的手指指尖点坐标。
[0069] 2、若大拇指未被检测,直接搜索手部轮廓内所有点当中深度最小的点集合,在该 集合当中,以手轮廓% 15-% 25排序点的中点,朝掌心方 向,找到集合当中沿此方向距离最 远的点,作为大拇指指尖点,最近的点作为大拇指指根点。确定大拇指所在位置,结合方法 1,可确定之后其他手指弯曲时指尖点位置。
[0070]本文通过实现多边形拟合、K-COS、CSS三种利用手部轮廓提取特征点方法,对CSS提取手部特征点方法同其它两种方法进行了对比实验。在实验中,一共读入24种随机手部 轮廓,将同一手部轮廓分别按照上述三种方法进行特征点提取。CSS方法能够较好的剔除手 部轮廓中凸起并不明显的点,将其不算入手指指尖点,而多边形拟合和K-C0S两种方法常 常会将凸起的手腕点误算为指尖点。同时,对于凸起相对不明显的手指,CSS和K-C0S方法 可得到五指指尖,而多边形拟合方法无法只根据轮廓得到手指指尖点。
[0071] 接下来,对于全部手型轮廓集合,分别按照三种方法提取手部指尖点,统计每种方 法均方根误差、最大误差、缺失手指、算错手指四种指标。
[0072] 实验结果如表1~4所示,可以看出CSS方法检测手指指尖特征点正确率较好(如 表1,表1示出了三种方法各个手指指尖点均方根误差),同时最大误差同另外两种方法相 比较低(如表2,表2示出了三种方法各个手指指尖点最大误差)。对于完全弯曲的手指, 三种方法都不能只根据轮廓很好的检测出全部手指(如表3,表3示出了三种方法丢失手指 数量),对于弯曲手指指尖点的检测,需要根据角度阈值方法得到指尖点坐标。在排除手部 轮廓凸点中非指尖点的效果上,CSS方法有良好的排除能力(如表4,表4示出了三种方法 算错手指数量)。
[0073]表1
[0079]
[0080]表 4
[0082] 以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,凡是依 据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属本发明 技术方案的保护范围。
【主权项】
1. 提出一种基于深度图的手部特征点检测方法,包括以下步骤: (1) 手部分割:利用Kinect采集到人体运动视频序列来提取手部,通过深度图利用 OPENNI得到人体手部位置信息,通过设定搜索区域及深度阈值方法,初步获得手心点;利 用OPENCV的find_contours函数得到手部轮廓;通过找到手轮廓内最大内接圆圆心,精确 确定手部手心点,通过计算所有手部内部点到轮廓点之间的最短距离m,在最短距离中找到 最大值M,M所代表的手部内部点为手心点,内接圆半径R = M ; (2) 特征点提取:通过不断对手部轮廓进行高斯平滑,并结合曲率阈值从而得到CSS曲 率图,根据图中CSS轮廓分析极限值得出手部指尖点及指谷点坐标,同时需要补全根据CSS 曲率图无法得到的手部指谷点; (3) 补全缺失手指,利用角度阈值和深度跳变结合的方式来补全缺失手指,从而找到弯 曲手指的指尖点。2. 根据权利要求1所述的基于深度图的手部特征点检测方法,其特征在于:所述步骤 (1)中在计算手部内部点到每一个手部轮廓点的最小距离m时,如果当前最小距离比当前 的最大距离M小,假设这一点并不是处在中心点位置,忽略计算此点到其他手部轮廓点的 距离。3. 根据权利要求2所述的基于深度图的手部特征点检测方法,其特征在于:所述步骤 (1) 中在手部内部和手部轮廓的N个连续的点中,只计算一个点,N多1。4. 根据权利要求3所述的基于深度图的手部特征点检测方法,其特征在于:N = 8。5. 根据权利要求4所述的基于深度图的手部特征点检测方法,其特征在于:所述步骤 (2) 包括以下分步骤: (2. 1)根据公式(1)计算手部轮廓每一点的曲率,设轮廓每一点(x(t),y(t)),t = 0, · · N-I Ho=(mm - myu)) / (-^2 (〇+>·2 (〇) (ι) 其中仍和冲),KO表示轮廓中位置为t的点的一阶导和二阶导,曲率阈值为g, 计算出轮廓中每一点曲率经过g的点,并记录到CSS曲线图; (2.2) 根据公式(2)利用高斯平滑,对手部轮廓不断进行平滑处理 x'(t) = .\it)(E)g(t,a) y'(t)= y(t)<S)g(t,a) (2) 其中表示卷积,g(t,〇)表示高斯函数,不断对手部轮廓进行高斯平滑,直到所有点 的曲率都经过指定阈值;获取CSS曲线(t,σ ),其中σ代表使得参数点t对应卷积曲线曲 率位于2~2. 5之间的取值;在不断平滑过程中,每点曲率范围跳变在0. 5以内,保证所有 点的曲率都位于2~2. 5之间;通过寻找CSS曲线图中的局部极大值点,找到手指指尖点 集; (2.3) 指谷点的计算与步骤(2.2)中指尖点计算相同,但对应卷积曲线曲率位 于-1. 5~-1之间; (2. 4)遗漏指谷点补充:若第一个指尖点位置比第一个指谷点位置靠前,则此指尖点 之前缺失一个指谷点,根据第一个指尖点和指谷点在手部轮廓中的相对位置的距离,在指 尖点前方估算出对应指谷点坐标,并将新指谷点放入指谷点集合中;若当最后一个指尖点 位置比第最后指谷点位置靠后,则此指尖点之后缺失一个指谷点,则根据最后一个指尖点 和指谷点在手部轮廓中的相对位置的距离,在指尖点后方估算出对应指谷点坐标,并将新 指谷点放入指谷点集合中; (2.5)估算手指关节点:先判断大拇指指尖是否已被检测,点列的前15%~25%内,若 已检测出指尖点,则判断为大拇指指尖,否则认为大拇指指尖未被检测;两个指谷点中点为 指根,结合指尖点,利用其平均得到手指的关节点,大拇指为两个关节点,其它手指为三个 关节点。6.根据权利要求5所述的基于深度图的手部特征点检测方法,其特征在于:所述步骤 (3)包括以下分步骤: (3. 1)若大拇指已被检测:设定另外四指中的指根与大拇指指根以及掌心连线的余弦 argcos 的范围:0· 8+g ~I. 4+g, I. 4+g ~I. 7+g,I. 7+g ~2+g,>2+g,g = (45-depth) *0· 03, depth表示当前深度;根据此范围判断CSS未检测到的手指类型:计算CSS已检测到的手指 指根同掌心以及大拇指指根的角度,如果没有角度落入之前设定好的角度阈值内,则认为 对应手指类型的指尖点缺失;以手掌心为起点,取该手指对应搜索范围的中值角度,搜索在 此直线上深度跳变最大的点,取为由于手指弯曲而丢失的手指指尖点坐标; (3.2)若大拇指未被检测:搜索手部轮廓内所有点当中深度最小的点集合,在该集合 当中,以手轮廓15%~25%排序点的中点,朝掌心方向,找到集合当中沿此方向距离最远 的点,作为大拇指指尖点,最近的点作为大拇指指根点。
【专利摘要】本发明公开了一种基于深度图的手部特征点检测方法,包括步骤:(1)利用Kinect采集到人体运动视频序列来提取手部,通过深度图利用OPENNI得到人体手部位置信息,通过设定搜索区域及深度阈值方法,初步获得手心点;利用OPENCV的find_contours函数得到手部轮廓;通过找到手轮廓内最大内接圆圆心,精确确定手部手心点,通过计算所有手部内部点到轮廓点之间的最短距离m,在最短距离中找到最大值M,M所代表的手部内部点为手心点,内接圆半径R=M;(2)通过不断对手部轮廓进行高斯平滑,并结合曲率阈值从而得到CSS曲率图,根据图中CSS轮廓分析极限值得出手部指尖点及指谷点坐标,补全根据CSS曲率图无法得到的手部指谷点;(3)补全缺失手指。
【IPC分类】G06T7/20, G06K9/62
【公开号】CN104899600
【申请号】CN201510282688
【发明人】孔德慧, 李淳, 王少帆, 尹宝才
【申请人】北京工业大学
【公开日】2015年9月9日
【申请日】2015年5月28日

最新回复(0)