基于深度图的启发式手指检测方法与流程

文档序号:13983289阅读:346来源:国知局
基于深度图的启发式手指检测方法与流程

本公开涉及智能人机交互和手势识别技术,更具体而言,本公开涉及一种基于深度图的启发式手指检测方法、检测设备以及计算机可读存储介质。



背景技术:

随着人机交互技术的快速发展,人机交互的手段越来越多,从最开始通过键盘和鼠标实现人与计算机设备之间的人机交互,然后演变到使用手写板、触摸屏,乃至发展到采用手势来实现人机交互。人机交互的方式朝着越来越直观、越来越简便的方向发展,而且这些方式变得越来越符合人的自然习惯。

在许多智能设备系统中,例如在ar(增强现实)眼镜、vr(虚拟现实)头显、智能电视等中,都有自动检测手指动作的需求,利用手指动作来实现与设备的交互。在这些交互中,通常使用普通的rgb摄像头来采集图像并检测手指动作。但是这种方法容易受到背景图像的干扰,导致检测准确度不高。近年来随着深度摄像头的逐渐普及,越来越多的研究机构和公司开始使用深度图来检测手指动作,使用深度图的方法的检测正确率比基于rgb摄像头的方法高。

现有的基于深度图的手指检测方法通常采用轮廓曲率极大值检测指尖。该方法首先提取手区域的边界轮廓,然后逐点计算轮廓点的曲率,选择曲率极大指点作为指尖候选点。但是,在背景图像较为复杂的条件,这种方法仍然有相当大的检测错误率。



技术实现要素:

为了解决或缓解上述现有技术中的至少一个缺陷,期望提供一种新的手指检测技术,该技术能够实现更高的检测正确率和更快的检测速度。

根据一个方面,提供了一种手指检测方法,包括:从用户的深度图中获取手联通域;计算手联通域的中心点;计算手联通域中与所述中心点具有3d测地线距离极大值的多个极远点;从计算的多个极远点中检测手指指尖和手指区域;和输出指尖位置及手指区域。

在一个实施例中,从用户的深度图中获取手联通域进一步包括:用图像生长的方法检测用户的深度图中所有的联通域;和从检测到的联通域中选择深度最小的联通域作为手联通域。

在一个实施例中,从用户的深度图中获取手联通域进一步包括:确定检测到的联通域中每一个联通域的最小深度作为所述联通域的深度。

在一个实施例中,所述图像生长方法进一步包括:对于每一个联通域,执行如下步骤:

建立一个fifo队列,并选择所述联通域中的一个像素点作为初始像素点放入所述fifo队列中;

针对所述fifo队列迭代执行如下操作,一直到所述fifo队列中没有像素点需要处理为止:

取出所述fifo队列中的当前像素点;

比较所述当前像素点的深度以及它的4个相邻像素点中没有加入任何联通域的每一个相邻像素点的深度;和

如果相邻像素点与所述当前像素点之间的深度差小于第一阈值th1,则将所述相邻像素点添加到所述联通域中以及所述fifo队列中;以及

输出所述联通域。

在一个实施例中,所述图像生长方法进一步包括:对于每一个联通域,检测所述联通域的上、下、左、右边界。

在一个实施例中,所述第一阈值th1取值范围参考值为10-15毫米。

在一个实施例中,计算手联通域的中心点进一步包括:计算所述手联通域中所有像素点的x坐标的平均值作为中心点的x坐标;和计算所述手联通域中所有像素点的y坐标的平均值作为中心点的y坐标。

在一个实施例中,计算手联通域的中心点进一步包括:如果所述计算得到的中心点不在所述手联通域上,则适当调整所述中心点的位置以便所述中心点位于所述手联通域上。

在一个实施例中,如果所述计算得到的中心点为所述深度图像中的空值点,则所述计算得到的中心点不在所述手联通域上,其中所述空值点为用户的深度图中深度为0的点。

在一个实施例中,计算手联通域中与所述中心点具有3d测地线距离极大值的多个极远点进一步包括:

s301:构造一个与手联通域同样大小的距离矩阵,该距离矩阵具有与手联通域的像素一一对应的元素;

s302:对于与深度值不为0的像素对应的元素,将该元素的距离值设置为最大值,对于与深度值为0的像素对应的元素,将该元素的距离值设置为一个负数,表示这些点的距离值不需要计算;

s303:将所述中心点作为初始极远点,

s304:将初始极远点在距离矩阵中的对应距离值设置为0,用手联通域中每一个像素点与所述初始极远点和计算出的所有极远点的3d测地线距离中的最小值来更新所述距离矩阵;

s305:确定已更新距离矩阵中距离值最大的点作为计算出的极远点,并将计算出的极远点作为新的初始极远点;。

重复执行步骤s304-s305,计算出5-9个极远点。

在一个实施例中,步骤s304中更新所述距离矩阵进一步包括:

建立一个fifo队列,将初始极远点添加到该fifo队列中,针对该fifo队列迭代执行如下操作,一直到所述fifo队列中没有像素点需要处理为止:

从所述fifo队列中取出当前像素点,对于该当前像素点8个邻域点中的每一个邻域点,计算邻域点与该当前像素点之间的三维距离d,如果该邻域点的距离值大于该当前像素点的距离值与所述三维距离d之和,则将该邻域点的距离值设置为该当前像素点的距离值与所述三维距离d之和,并将该邻域点添加到fifo队列中。

在一个实施例中,所述最大值为100000毫米。

在一个实施例中,从计算的多个极远点中检测手指指尖和手指区域进一步包括:

将所述多个极远点确定为多个指尖候选点p;以及

对于每一个指尖候选点p,执行如下迭代过程:

从所述指尖候选点p出发从内到外逐步检测所述指尖候选点p的周围点与所述指尖候选点p的3d测地线距离,如果所述3d测地线距离小于预定距离阈值,则将所述邻域点加入手指点集;

如果手指点集宽度小于第二阈值th2,将所述预定距离阈值增加一个步长,否则,判断是否仍有未处理的指尖候选点p;和

如果还有未处理的指尖候选点p,则选择下一个未处理的指尖候选点p重复所述迭代过程,如果没有未处理的指尖候选点p,退出所述迭代过程。

在一个实施例中,从所述指尖候选点p出发从内到外逐步检测所述指尖候选点p的周围点与所述指尖候选点p的3d测地线距离进一步包括:

构造一个与手联通域同样大小的距离矩阵,该距离矩阵具有与手联通域的像素一一对应的元素;

对于与深度值不为0的像素对应的元素,将该元素的距离值设置为最大值,对于与深度值为0的像素对应的元素,将该元素的距离值设置为一个负数,表示这些点的距离值不需要计算;

将与所述指尖候选点p对应的距离值设置为0;

建立一个fifo队列,将指尖候选点p添加到该fifo队列中,针对该fifo队列迭代执行如下操作,一直到所述fifo队列中没有像素点需要处理为止:

从所述fifo队列中取出当前像素点,对于该当前像素点8个邻域点中的每一个邻域点,计算邻域点与该当前像素点之间的三维距离d,如果该邻域点的距离值大于该当前像素点的距离值与所述三维距离d之和,则将该邻域点的距离值设置为该当前像素点的距离值与所述三维距离d之和,并将该邻域点添加到fifo队列中;和

从所述指尖候选点p出发从内到外逐步检测所述指尖候选点p的周围点在更新的距离矩阵中的距离值。

在一个实施例中,所述第二阈值th2参考值为35mm。

在一个实施例中,所述步长参考值为3mm。

在一个实施例中,从计算的多个极远点中检测手指指尖进一步包括:比较手指点集的长度与第三阈值th3;如果手指点集的长度大于或等于第三阈值th3,则确定所述指尖候选点p为真实的指尖;以及如果手指点集的长度小于第三阈值th3,则确定所述指尖候选点p为非真实的指尖。

在一个实施例中,所述第三阈值th3参考值为40mm。

根据另一个方面,提供了一种手指检测设备。该手指检测设备包括:手联通域获取单元,被配置用于接收用户的深度图并从所述深度图中获取手联通域;中心点确定单元,被配置用于计算所述手联通域的中心点;极远点计算单元,被配置用于计算手联通域中与所述中心点具有3d测地线距离极大值的多个极远点;手指检测单元,被配置用于从计算的多个极远点中检测手指指尖和手指区域;和输出单元,被配置用于输出指尖位置及手指区域。

根据另一个方面,提供了一种计算机可读存储介质,其上存储了计算机可读指令,所述指令在被计算设备执行时导致计算设备执行如上所述的任何一种方法。

根据另一个方面,提供了一种手指检测设备。该手指检测设备包括:存储器,被配置用来存储计算机可读指令和数据;以及耦合到所述存储器的处理器,被配置用来执行所述计算机可读指令从而执行如上所述的任何一种方法。

本公开的实施例可以实现如下有益效果中的至少一个有益效果和/或其它有益效果:

相对于传统的采用轮廓曲率极大值检测指尖的方法,本公开提出的启发式检测方法指尖检测准确率比更高,对噪声的鲁棒性更强。

具体而言,本公开的上述实施例使用深度图来检测手指,通过提取手联通域有效去除背景图像的干扰;使用3d地测线距离检测联通域极远点,对图像噪声和手势变化具有很好的鲁棒性;将联通域极远点作为指尖的候选点,检测手指点集,并用手指最大宽度和最小长度判断候选点是否是真实指尖,能够更快速、准确地确定真实的手指指尖和手指区域。通过以上方式达到了准确和快速检测手指的效果,大幅度提高了手指检测对噪声的鲁棒性。本公开的技术达到更高的检测正确率,并且检测速度达到300帧/秒。

附图说明

为了更清楚地说明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。应当意识到,下面描述中的附图仅仅涉及一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图,所述其它的附图也在本发明的范围内。

图1为根据本发明一个实施例的手指检测方法的流程图。

图2为根据本发明一个实施例的获取手联通域的方法的流程图。

图3为根据本发明一个实施例的深度图以及手联通域的示意图。

图4为根据本发明一个实施例计算手联通域的中心点的方法的流程图。

图5为根据本发明一个实施例的手联通域的中心点的示意图。

图6为根据本发明一个实施例的计算手联通域的极远点的方法的流程图。

图7为根据本发明一个实施例的手联通域的极远点的示意图。

图8为根据本发明一个实施例的检测手指指尖和手指区域的方法的流程图。

图9为根据本发明一个实施例的手指指尖的示意图。

图10示意性示出了根据本发明一个实施例的检测结果的示意图。

图11为根据本发明一个实施例的手指检测设备的结构示意图。

图12图示了可以被用于实现一个或多个实施例的示例计算设备。

具体实施方式

为了能够更清楚地理解一些实施例的目的、技术方案和优点,下面结合附图和具体实施方式对这些实施例作进一步详细描述。

图1为根据本发明一个实施例的手指检测方法的流程图。所述手指检测方法是一种基于深度图的启发式手指检测方法,该方法通过分析深度摄像头拍摄到的深度图,采用启发式方法来检测手指。该方法通过获取手联通域、计算联通域中心点、计算联通域极远点、检测手指指尖和输出指尖位置及手指区域共五个步骤检测手指指尖位置和手指点集合。本文所使用的术语“联通域”是指深度图中相互联通的非空值像素点构成的集合,其中相邻像素点的深度值差异比较小。相互联通是指该像素点集合中任意两个像素点能够直接连接或者能够通过集合中的其它像素点连接。

如图1所示,所述手指检测方法包括如下五个步骤。首先在步骤s1,从用户的深度图中获取手联通域。然后在步骤s2,计算所述手联通域的中心点。然后在步骤s3,计算手联通域中与所述中心点具有3d测地线距离极大值的多个极远点。接着在步骤s4,从计算的多个极远点中检测手指指尖和手指区域。最后在步骤s5,输出指尖位置及手指区域。该方法具有手指检测正确率高,计算速度快的优点。

下面,参照图2-10具体解释上述手指检测方法的各个步骤的示例实现方式。

图2为根据本发明一个实施例的获取手联通域的方法的流程图。在获取手联通域之前,首先需要使用深度摄像机拍摄用户的深度图,拍摄的深度图是一种二维图像,与普通rgb摄像机获取图像中各点的红色、绿色和蓝色分量强度不同,深度摄像机获取图像中各点距离摄像机的距离深度值。图3中左图示出了深度摄像机拍摄的原始深度图像的一个示例图。

深度图中一般包含多个联通域。在手势操作场景中,由于在手势操作时手通常会在最前面,距离摄像机的距离最近,因此手所在的联通域通常是深度值较小的联通域。因此,可以用图像生长的方法检测所有的联通域,然后选择深度最小的联通域作为手联通域,手联通域点集合可以记为sh。

下面,结合图2来介绍一种获取手联通域的示例方法。如图2所示,可以通过如下过程来检测深度图像中的所有联通域以及手联通域sh。首先,对于输入的二维深度图像,确定图像宽度,高度。然后在步骤s101执行初始化,包括将已确定的联通域总数设为初始值0,将标记矩阵中的每一个元素的值初始化为0,表明目前图像中的任何一个像素点均没有加入任何联通域。同时指定一个指示联通域搜寻进度的锚点,将该锚点的坐标x和y均设为初始值0,即图像左上角的像素点。也就是说,这种方式将从图像的左上角开始搜寻联通域。此时,可以在深度图像中按照从左到右,从上到下的顺序来执行搜寻。但是在其它实施例中,也可以从其它位置开始搜寻联通域,例如可以从右上角、左下角、右下角等位置按照不同的搜寻顺序开始搜寻联通域。本发明不局限于任何特定的搜寻位置和搜寻顺序。

在执行完初始化之后,进行到步骤s102,判断当前锚点的深度值是否大于零,即,判断该点是否是空值点。如果深度值大于零,则进行到步骤s103,否则,跳转到步骤s111。在步骤s103,判断锚点的标记是否等于0。如果标记等于0,则进入步骤s104,否则跳转到步骤s111。

如果当前锚点的深度值大于零,并且该点的标记等于0,表明找到了一个新的联通域。因此,在步骤s104,联通域总数增加1,设新增加的联通域为s(n),将所述当前锚点加入联通域(n),同时将该点标记设为1,表明该像素点已经被加入一个联通域s(n)。在这个实施例中,所述当前锚点作为检测该新联通域s(n)的初始点。需要指出的是,尽管在这个实施例中所述方法将联通域的最上面一行像素点中最左边一个像素点作为检测联通域s(n)初始点,但是本领域技术人员能够理解,如下检测联通域s(n)的过程可以适用于将联通域中任何一个像素点作为初始点的情形。

在完成步骤s104之后,进行到步骤s105,以便确定新找到的联通域s(n)的完整点集。在步骤s105中,先初始化一个先入先出(fifo)类型的空队列,然后将初始点(即,坐标点)加到中。然后进入步骤s106。在步骤s106,判断队列是否为空,如果为空,则表明已确定这个联通域s(n)的完整点集,跳转到步骤s111,否则进行到步骤s107。在步骤s107中,从中取出当前的坐标点。然后进行到步骤s108,检查坐标点的上、下、左、右4个邻域,获得4个邻域中深度大于0且标记等于0的所有邻域点。然后在步骤s109中比较所有获得的邻域点的深度与像素点的深度。然后进入步骤s110,如果深度值的差值小于阈值th1,那么将该邻域点加入队列和联通域s(n)。同时将该点标记设为1。在一个实施例中,所述阈值th1取值范围参考值为10–50mm。此外,本领域技术人员能够理解,在步骤s108-s110中既可以一次处理4个邻域点,即同时对4个邻域点依次执行步骤s108-s110,也可以一次处理一个邻域点,即依次对每一个邻域点执行步骤s108-s110。在4个邻域点都检测完毕后,返回步骤s106,继续判断队列q是否为空。通过采取这种图像生长的方式,迭代执行步骤s106-s110,直到队列q为空。队列q为空表明已经确定了联通域s(n)的完整点集,然后跳转到步骤s111,继续搜寻下一个联通域。可选地,在确定联通域s(n)之后,可以顺便检测该联通域s(n)的上、下、左、右边界。例如,在检测完联通域s(n)的所有像素点集合之后,检测联通域中最上、最下、最左、最右端的像素点坐标,分别作为联通域s(n)的上、下、左、右边界。在一个实施例中,所述方法还可以包括确定该联通域s(n)的最小深度或者平均深度作为该联通域s(n)的深度。

在步骤s111,将锚点x坐标增加1,即x=x+1。如果x等于图像宽度w,那么表明需要换行,因而将x重置为0并且将y增加1。所述步骤s111实际上是按照从左到右,从上到下的顺序移动锚点。然后在步骤s112判断y是否等于图像高度h。如果y不等于图像高度h,返回步骤s102,继续寻找并确定下一个联通域。否则,如果y等于图像高度h,表明所有像素点已经被处理完,进行到步骤s113。在步骤s113,判断联通域总数n是否大于0。如果n大于0,则表明检测到了n个联通域,进行到步骤s114。在步骤s114中选择n个联通域中深度最小的联通域作为手联通域sh。当以该联通域s(n)的最小深度最为该联通域s(n)的深度时,能够更准确地确定手联通域sh,因为手一般会距离摄像机最近,深度图中具有最小深度的非空值点在手联通域上的概率最高。如果在步骤s113中n不大于0,则表明没有检测到联通域,拍摄到的深度图是空白图像,无需进行是手指检测,在步骤s115退出该方法。

图3中右图示出了获得的手联通域sh的一个示例图。如图所示,通常检测得到的手联通域sh不仅包含手指和手掌,还包括手臂部分。后续步骤将以该手联通域sh为基础检测手指。在一些实施例中,为了方便表示联通域s(n),可以将联通域s(n)表示为一个矩阵,该矩阵需要涵盖手联通域的所有像素点。在该矩阵中,与手联通域的像素点对应的元素的深度为该对应像素点的深度值,其它元素的深度值可以设置为0。例如,所述矩阵可以如图3中右图所示,涵盖了比手联通域更大的范围,其中例如手区域(即浅色区域)中每个点的深度为对应像素点的深度值,而手以外的区域(即黑色或深色区域)中每个点的深度为0。当然了,也可以通过手联通域的上、下、左、右四个边界来确定所述矩阵,这样所确定的矩阵更小,对所述手联通域进行处理所需的运算量更小,所以处理速度更快。

图4为根据本发明一个实施例计算手联通域的中心点的方法的流程图。如图4所示,计算手联通域的中心点包括如下步骤:

在步骤s201,计算所述手联通域sh中所有像素点的x坐标的平均值作为中心点的x坐标xc。需要指出的是,这里的手联通域sh是指原始确定的手联通域,而不是指前面提到的用来表示手联通域的矩阵。

在步骤s202,计算所述手联通域中所有像素点的y坐标的平均值作为中心点的y坐标yc。同样地,这里的手联通域sh是指原始确定的手联通域,而不是指前面提到的用来表示手联通域的矩阵。

上述过程可以表示为:

考虑到深度图像中可能存在噪声,计算得到的中心点可能位于深度图像中的空值点上(所述空值点例如可以是用户的深度图中深度为0的点)。当出现这种情况时,需要从上、下、左、右方向适当调整xc和yc,使中心点位于手联通域sh上。因此,计算手联通域的中心点还可以包括步骤s203:如果所述计算得到的中心点不在所述手联通域上,则适当调整所述中心点的位置以便所述中心点位于所述手联通域上。在一个示例实现方式中,所述调整步骤可以包括:先检查计算中心点上方1像素点是否在手联通域上,如果在手联通域上则将中心点调整到上方1像素点处并结束操作;否则继续检查下方1像素点、左方1像素点、右方1像素点,直到找到手联通域上的点。如果上、下、左、右方向1像素处的点全部都不在手联通域上,则继续寻找2像素处的点。依此类推,直到找到手联通域上的点为止。

图5示意性示出了根据本发明一个实施例计算出的手联通域的中心点。如图5所示,手联通域的中心点在白色点处示出。

图6为根据本发明一个实施例的计算手联通域的极远点的方法的流程图。在这个实施例中,所述极远点基于3d测地线距离来计算。空间中两点之间的“3d测地线距离”是指联通域上连接两点的最短曲线长度,曲线上的点必须全部都在该联通域上。与指示两点之间直线距离(直线上的点可以不在联通域上)的普通欧氏距离相比,采用3d测地线距离的方案对手势变化的鲁棒性更高,可以检测出更为稳定的极远点。从附图所示的手联通域可以清楚地看出,两个相邻手指指尖的“欧氏距离”比较小,但是“3d测地线距离”却比较大。如果使用“欧氏距离”构成距离矩阵的话,指尖不一定是距离极大值点,而使用“3d测地线距离”构成距离矩阵的话,指尖总是距离极大值点。因此,用“3d测地线距离”构成距离矩阵,并检测距离极大值点作为指尖候选点,具有更高的鲁棒性。

在一些实施例中,计算手联通域的极远点的方法包括三个阶段:初始化距离矩阵、更新距离矩阵以及根据距离矩阵选择极远点。

如图6所示,计算手联通域中与所述中心点具有3d测地线距离极大值的多个极远点包括步骤s301-s307。其中,步骤s301-s302属于第一阶段:初始化距离矩阵,步骤s303-s304属于第二阶段:更新距离矩阵,步骤s305属于第三阶段:根据距离矩阵选择极远点。

首先在步骤s301,构造一个与手联通域同样大小的距离矩阵d,该距离矩阵具有与手联通域的像素一一对应的元素。然后可以在步骤s302中初始化距离矩阵。对于与深度值不为0的像素对应的元素,将该元素的距离值设置为最大值,对于与深度值为0的像素对应的元素,将该元素的距离值设置为一个负数,表示这些点的距离值不需要计算。所述最大值可以是任何对于人类手掌来说不可能达到的极远距离值,在一个实施例中,所述最大值可以是100000mm。可以将所述负数设置为-1。

接下来,需要对该距离矩阵进行更新以得到一个极远点。在此之前,需要设置一个初始极远点以便启动距离矩阵的更新。在步骤s303,将所述中心点作为初始极远点。然后在在步骤s304,将初始极远点在距离矩阵中的对应距离值设置为0,用手联通域中每一个像素点与所述初始极远点和已经计算出的所有极远点的3d测地线距离中的最小值来更新所述距离矩阵。

在一个实施例中,步骤s304中更新所述距离矩阵的步骤进一步包括如下步骤:

建立一个fifo队列,将初始极远点添加到该fifo队列中,针对该fifo队列迭代执行如下操作,一直到所述fifo队列中没有像素点需要处理为止:

从所述fifo队列中取出当前像素点,对于该当前像素点的上、下、左、右、左上、右上、左下、右下8个邻域点中的每一个邻域点,计算邻域点与该当前像素点之间的三维距离d,如果该邻域点的距离值大于该当前像素点的距离值与所述三维距离d之和,则将该邻域点的距离值设置为该当前像素点的距离值与所述三维距离d之和,并将该邻域点添加到fifo队列中。在这个过程中,距离值为负值的邻域点是不需要处理的,因为它并不属于手联通域上的像素点。另外,作为一种更快捷的运算方式,可以先比较邻域点的距离值与当前像素点的距离值。如果邻域点的距离值小于当前像素点的距离值,那么就不需要再计算所述三维距离d和更新该邻域点了。

在完成包含上述迭代过程的矩阵更新步骤之后,进行到步骤s305。在步骤s305,确定已更新距离矩阵中距离值最大的点作为计算出的极远点,并将计算出的极远点作为新的初始极远点。需要指出的是,每次更新之后,距离矩阵中的距离值即为手联通域中各点到中心点以及已经计算的极远点的3d测地距离中的最小值,找到距离矩阵中距离值最大的点作为新的极远点。

在步骤s306,判断计算的极远点的数目是否满足要求,即除了中心点之外是否得到k个极远点。在一个实施例中,k的范围为5-9。如果数目满足要求,则在步骤s307中结束所述计算,所计算出的这些极远点即为手指指尖的候选点。如果数目不满足要求,则返回步骤s304,重复执行步骤s304-s305,计算出除了中心点之外的5-9个极远点。

图7示意性示出了根据本发明一个实施例的手联通域的极远点。第一幅图示出了初始极远点,即中心点。第二到第七幅图示出了依次检测到的第一到第六个极远点。

图8为根据本发明一个实施例的检测手指指尖和手指区域的方法的流程图。如图8所示,从计算的多个极远点中检测手指指尖和手指区域的过程包括如下步骤。首先,在步骤s401,将所述多个极远点确定为多个指尖候选点p。然后在步骤s402,选择一个指尖候选点p并且初始化预定距离阈值,也就是设置预定距离阈值的初始值。然后在步骤s403,从所述指尖候选点p出发从内到外逐步检测所述指尖候选点p的周围点(即,所述指尖候选点p在手联通域内部的周围点)与所述指尖候选点p的3d测地线距离,如果所述3d测地线距离小于预定距离阈值,则将所述邻域点加入手指点集。接下来在步骤s404,判断手指点集宽度是否小于第二阈值th2。在一个实施例中,所述第二阈值th2参考值为35mm。如果手指点集宽度小于第二阈值th2,则前进到步骤s405,将所述预定距离阈值增加一个步长并返回步骤s403,继续检查指尖候选点p的周围点与所述指尖候选点p的3d测地线距离。在一个实施例中,所述步长参考值为3mm。如果在步骤s404中手指点集宽度不小于第二阈值th2,则前进到步骤s406。在步骤s406中,判断是否仍有未处理的指尖候选点p。如果还有未处理的指尖候选点p,则返回步骤s402,选择下一个未处理的指尖候选点p重复所述迭代过程。如果没有未处理的指尖候选点p,则在步骤s407中退出所述迭代过程。

为了检测手指点集或手指区域,步骤s403中从所述指尖候选点p出发从内到外逐步检测所述指尖候选点p的周围点与所述指尖候选点p的3d测地线距离需要重新计算到p点的距离矩阵d。在一个实施例中,从所述指尖候选点p出发从内到外逐步检测所述指尖候选点p的周围点与所述指尖候选点p的3d测地线距离进一步包括如下步骤。首先,构造一个与手联通域sh同样大小的距离矩阵d,该距离矩阵d具有与手联通域sh的像素一一对应的元素。然后,对于距离矩阵d中与深度值不为0的像素对应的元素,将该元素的距离值设置为最大值,对于与深度值为0的像素对应的元素,将该元素的距离值设置为一个负数,表示这些点的距离值不需要计算。在一个实施例中,所述最大值可以是100000mm。可以将所述负数设置为-1。设候选点的坐标为,然后将与所述指尖候选点p对应的距离值设置为0,并按照下列步骤更新距离矩阵d。

建立一个fifo队列,将指尖候选点p的坐标添加到该fifo队列中,针对该fifo队列迭代执行如下操作,一直到所述fifo队列中没有像素点需要处理为止:从所述fifo队列中取出当前像素点,对于该当前像素点的上、下、左、右、左上、右上、左下、右下8个邻域点中的每一个邻域点,计算邻域点与该当前像素点之间的三维距离d,如果该邻域点的距离值大于该当前像素点的距离值与所述三维距离d之和,即,则将该邻域点的距离值设置为该当前像素点的距离值与所述三维距离d之和,即,并将该邻域点添加到fifo队列中。在这个过程中,距离值为负值的邻域点是不需要处理的,因为它并不属于手联通域上的像素点,当然也就不属于手指区域了。另外,作为一种更快捷的运算方式,可以先比较邻域点的距离值与当前像素点的距离值。如果邻域点的距离值小于当前像素点的距离值,那么就不需要再计算所述三维距离d和更新该邻域点了。

在通过上述迭代过程更新距离矩阵之后,可以从所述指尖候选点p出发从内到外逐步检测所述指尖候选点p的周围点在更新的距离矩阵中的距离值。也就是说,更新的距离矩阵使得能够基于距离阈值确定手指点集或手指区域。

在一个实施例中,为了判断指尖候选点p是否是真实指尖,我们设置一个手指长度下限th3。如果停止生长时的手指集合长度达到th3以上则判断该候选点为真实“指尖”,记录“指尖”坐标,否则判断指尖候选点p为“非指尖”。具体而言,从计算的多个极远点中检测手指指尖进一步包括如下步骤:比较手指点集的长度与第三阈值th3;如果手指点集的长度大于或等于第三阈值th3,则确定所述指尖候选点p为真实的指尖;如果手指点集的长度小于第三阈值th3,则确定所述指尖候选点p为非真实的指尖。在一个实施例中,所述第三阈值th3参考值为40mm。

图9分别在上部和下部示意性示出了根据本发明一个实施例真实指尖点的手指检测过程和虚假指尖点的手指检测过程。如图9所示,利用重新计算的距离矩阵d从p点出发开始检测手指,到p点的距离值小于某个预定距离阈值的点集被认为是手指点集。逐渐增大该距离阈值,每次增大一个步长,手指区域也逐渐增大。如图9所示,从左到右每次增大距离阈值时,新增的手指像素点用白色表示。检查手指集合的形状大小,当手指集合宽度超过手指宽度上限th2时,停止生长过程。

在通过上述方法确定了真实的手指指尖以及手指区域之后,最后输出上述方法检测并记录的全部手指指尖坐标以及对应手指的像素点集合。图10示意性示出了根据本发明一个实施例的检测结果示例的示意图。

图11为根据本发明一个实施例的手指检测设备1100的结构示意图。如图11所示,该手指检测设备1100可以包括:手联通域获取单元1101,可以被配置用于接收用户的深度图并从所述深度图中获取手联通域;中心点确定单元1102,可以被配置用于计算所述手联通域的中心点;极远点计算单元1103,可以被配置用于计算手联通域中与所述中心点具有3d测地线距离极大值的多个极远点;手指检测单元1104,可以被配置用于从计算的多个极远点中检测手指指尖和手指区域;和输出单元1105,可以被配置用于输出指尖位置及手指区域。

需要指出的是,手指检测设备1100可以执行上述任何一种手指检测方法。由于发明原理与所述手指检测方法相同,在此就不再重复描述手指检测设备1100以及其组件执行上述方法及其步骤的功能和操作了。

图12图示了可以被用于实现一个或多个实施例的示例计算设备1200。特别地,根据一些实施例的设备可以在所述示例计算设备1200实现。如图所示,示例计算设备1200包含一个或多个处理器1210或处理单元,可以包含一个或多个存储器1222的一个或多个计算机可读介质1220,一个或多个用于向用户显示内容的显示器1240,一个或多个用于输入输出(i/o)设备的输入/输出(i/o)接口1250,一个或多个用于与其它计算设备或通信设备通信的通信接口1260,以及允许不同的组件和设备彼此通信的总线1230。

计算机可读介质1220、显示器1240和/或一个或多个i/o设备可以被包含来作为计算设备1200的一部分,或者可替换地可以被耦合到计算设备1200。总线1230表示一个或多个若干类型的总线结构,其包含存储总线或存储控制器、外围总线、加速图形端口、以及使用各种各样总线架构的任何结构的处理器或局部总线。总线1230可以包含有线的和/或无线的总线。

一个或多个处理器1210在形成它们的材料或其中采用的处理机制方面没有任何限制。例如,处理器可以由一个或多个半导体和/或晶体管(例如电子集成电路(ic))组成。在这样的背景下,处理器可执行指令可以是电学可执行的指令。存储器1222表示与一种或多种计算机可读介质相关联的记忆/存储容量。该存储器1222可以包含易失性介质(诸如随机存取存储器(ram)之类)和/或非易失性介质(诸如只读存储器(rom)、闪速存储器、光盘、磁盘等等之类)。该存储器1222可以包含固定介质(例如,ram、rom、固定硬盘驱动等等)以及可移动介质(例如,闪速存储器驱动、可移动硬盘驱动、光盘等等)。

一个或多个输入/输出接口1250允许用户输入命令和信息到计算设备1200,并且同样允许将信息呈现给该用户和/或使用不同的输入/输出设备呈现给其它组件或设备。输入设备的示例包含键盘、触摸屏显示器、光标控制设备(例如鼠标)、麦克风、扫描仪等等。输出设备的示例包含显示设备(例如监视器或投影仪)、扬声器、打印机、网卡等等。

通信接口1260允许与其它计算设备或通信设备进行通信。通信接口1260在其采用的通信技术方面没有任何限制。通信接口1260可以包括诸如局域网通信接口和广域网通信接口之类的有线通信接口,也可以包括无线通信接口,例如红外线、wi-fi或者蓝牙通信接口。

本文中各种技术是在软件、硬件(固定逻辑电路)、或程序模块的一般环境下描述的。一般地,所述程序模块包含执行特定任务或实现特定抽象数据类型的例程、程序、对象、元素、组件、数据结构等等。这些模块和技术的实现可以被存储在某种形式的计算机可读介质上或经由该计算机可读介质而被传输。计算机可读介质可以包含多种可以由计算设备访问的可用媒介或介质。

本文描述的特定的模块、功能、组件和技术可以被实现在软件、硬件、固件和/或其组合中。计算设备1200可以被配置成执行对应于实现在计算机可读介质上的软件和/或硬件模块的特定指令和/或功能。该指令和/或功能可以由制造产品(例如,一个或者多个计算设备1200和/或处理器1210)执行/操作以便实现本文所述的技术。这样的技术包含但不限于本文所描述的示例过程。因此,计算机可读介质可以被配置成当由本文所描述的一个或者多个设备访问时存储或提供用于实现上述不同技术的指令。

尽管上面参考附图对本发明的一些实施例进行了具体的描述,但是本领域普通技术人员可以理解,以上的具体描述仅仅是为了解释本发明,本发明绝不仅仅局限于上述具体的实施方式。基于本文对这些实施例的具体描述和教导,本领域普通技术人员可以对这些具体实施方式进行各种修改、增加、置换以及变型而不脱离本发明的保护范围,也就是说,这些修改、增加、置换以及变型都应涵盖在本发明的保护范围内。本发明的保护范围应所述以权利要求的保护范围为准。上文中描述的具体特征和行为是作为实现权利要求的示例形式而被公开的。

需要说明的是,上述实施例仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要将上述功能分配给不同的功能模块完成。可以将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述一个模块的功能可以由多个模块来完成,上述多个模块的功能也可以集成到一个模块中完成。

本申请使用了诸如“第一”、“第二”、“第三”等之类的措词。在无附加上下文时,使用这样的措词并不旨在暗示排序,实际上它们仅仅用于标识目的。例如短语“第一阈值”和“第二阈值”未必意味着在时间上第一阈值在第二阈值之前被生成、接收或处理。实际上,这些短语仅仅用来标识不同的阈值。

在权利要求书中,任何置于括号中的附图标记都不应当解释为限制权利要求。术语“包括”或“包含”并不排除除了权利要求中所列出的元件或步骤之外的元件或步骤的存在。元件前的词语“一”或“一个”并不排除存在多个这样的元件。在列举了若干装置的设备或系统权利要求中,这些装置中的一个或多个能够在同一个硬件项目中体现。仅仅某个措施记载在相互不同的从属权利要求中这个事实并不表明这些措施的组合不能被有利地使用。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1