手势跟踪论文学习:Realtime and Robust Hand Tracking from Depth(四)Hand Initialization

论文阅读原创,转载请标明出处:http://blog.csdn.net/ikerpeng/article/details/39251373

在多次的阅读这篇论文以后才明白文章的结构为什么这样安排:将Hand Initialization这部分放在文章的所有的优化算法的最后,说明整个算法即便是不要这一部分的优化也是可以的。我们从文章中的Table 2可以看到,不使用Hand Initialization得到的结果比使用到Initialization的结果差2mm。若是你对于最终的结果要求不是很高的话,其实可以忽略这一部分了。

我们从Hand Initialization开头的部分发现若是你使用Initialization,那应该是对每一帧都要进行:re-Initialization的(其实这一点我不知道为什么不用上一帧的结果作为下一帧的初始化)。

1. 回顾

我们先回顾一下,没有做初始化我们的输入数据是什么。首先我们通过Intel的Creative Gesture Camera得到的数据,经过中值滤波,去除噪声点,形态学处理填补好空洞。然后将数据投影为3D的点云。从这些点云当中随机的取出256个点。这样就得到而来输入数据。

输出数据为我们的一个48球的模型的参数。我们就是通过解那个Cost Function得到模型的参数解。

2.反思

我们来思考一下那样存在的问题。首先,我们从里面随机的选取了256个点云;这样少量的数据已经使得求出的解的可靠性不是很大。其次,当你手势存在很多的遮挡弯曲的时候,那么得到的点云数据本来就很集中,这样去和一个神展开的48模型区匹配本来就不是很合理。因此这样做初始化是比较有必要的(这是我的猜测)。

3. 初始化方法

本文采用的初始化的方法是: Part Detection的方法。具体就是先检测到手指,有手指来初始化手的Pose。所以接下来分为两个部分来讲解。

Finger Detection:

文中采用了一种比较巧妙的做法就是:将一个3D的Finger拆成一个X-Y Finger和一个Z-Finger来做的。

X-Y Finger也就是平行于x-y平面的手指。那么我们从深度图进行二值化处理就可以得到一个手的mask(也就是去除掉了冗余信息,比如我们将Depth小于0.5m的设为0,大于0.5m,小于1.5m的认为是1.也就是去掉了在这个范围以外的点)。这个时候,我们从这个mask上面初始化一个极值点作为起点,然后计算测地线距离(我的理解是曲面上面两点最近的距离线)。当测地线的距离最远,但是又基本上又和一个手指的距离差不多的时候我们就认为这是一个手指,我们在对其Size进行扩展,直到得到一个手指的形状。

Z-Finger被认为是一个垂直于摄像头的点。我们从深度图像中找到里面的局部最小值。然后我们通过flood fill(泛洪填充算法)填充这个深度图直到达到一个指尖的距离。这个时候我们画两个圆(外面的比这个球体的半径大3个像素,角度60度)来看两个圆构成的Ring(环形区域)中包括的像素在90%以上我们就认为这是一个Z-Finger。

Hand Initialization:

得到了Finger以后,我们就利用已知的Finger来初始化Hand Pose了(具体的就是解文章中的那个方程)。

时间: 2024-08-03 11:06:35

手势跟踪论文学习:Realtime and Robust Hand Tracking from Depth(四)Hand Initialization的相关文章

手势跟踪论文学习:Realtime and Robust Hand Tracking from Depth

本文介绍的方法主要是用到了深度信息.提出了一种新的手指检测以及手型初始化的方法.具有很好的鲁棒性.在不使用GPU的情况下,速度就可以达到25FPS.准确率还相当的高.可以说是现在手势识别中最好的方法了. 当前的很多方法要不就是很慢,要不就是使用了GPU,再或者就是需要非常复杂的初始化.而本文提出的方法重新定义了手势的模型,结合了现在通用的两种方法的优势,并且加上一个约束方程,得到了很好的效果. 1.模型的重新定义 每一只手,定义了一个自由度(DOF)为26 的手的模型,其中的6个自由度代表全局的

手势跟踪论文学习:Realtime and Robust Hand Tracking from Depth(三)Cost Function

iker原创.转载请标明出处:http://blog.csdn.net/ikerpeng/article/details/39050619 Realtime and Robust Hand Tracking from Depth中的Cost Function 学习 首先,我们应该知道,输入的数据是什么:3D 点云数据. 3D点云给我的感觉应该是这种 输出的是:拟合好的手模型(48球体模型). 而这里的的3D 点云数据用p表示,每个球体用Sx 表示. Ci 第i个球体的中心:D表示深度图( 区分还

手势跟踪论文学习:Realtime and Robust Hand Tracking from Depth(二)

论文细节 手势识别或者说手的跟踪在人机交互中非常重要,已经有几十年的研究.但是它存在的难点还是很多的:手的动作是由很多的复杂的手指的活动构成的,同时,在可变的大视角下面的快速移动. 目前做出来比较好的效果的做法有几种,一种使用了非常复杂的网格模型(mesh model,具体不知道是怎么做的),但局限性在于它的局部最优的方法速度也很差:另一种则是采用多边形模型(polygonal model),可以达到实时的效果,但是需要GPU来处理. 以上提到的方法局部最优的方法,也就说一旦找到一个局部最优值的

手势跟踪论文学习:Realtime and Robust Hand Tracking from Depth(五)Hand Initialization 2

论文阅读原创,转载标明出处: 回顾: 上一节我们说到了,作者通过自己定义的X-Y Finger和 Z-Finger来进行手指的检测,然后来初始化Hand Pose.其实勒,手指经常都会死斜着的.也就是说不会是标准的X-Y Finger和或者Z-Finger.那作者是如何的处理的勒? 手指的检测: 对于手指的检测,先进行X-Y Finger的检测.然后分割出去:再进行Z-Finger的检测.但是如果再进行Z-Finger的检测的时候,触及到X-Y Finger的分割区域以后就停止,不再检测了. 为

【论文学习记录】PTAM:Parallel Tracking and Mapping for Small AR Workspaces

论文地址:链接: http://pan.baidu.com/s/1kTAcP8r 密码: djm4 这是一篇可手持单目相机进行定位与制图方法的文章.它与传统slam的方法不一致的地方在于将定位跟踪与制图分离出了两个单独过程. 双线程机制: 一个线程用于鲁棒跟踪手持相机运动,另一个线程用于从之前观测到的视频帧中产生三维地图点特征 .  系统允许batch techniques复杂的计算,但不在实时操作下.. 这篇文章的研究目的是:  不需要任何模板与初始目标,跟踪校正的手持相机,并且绘制环境地图.

学习OpenCV——hand tracking手势跟踪

这几日,岛上风云突变,我这个倒霉孩子终究木有躲过感冒的魔掌,中枪鸟~~~ 这几天只写了个简单的手势跟踪的代码. 原理是:背景差分+肤色检测. 背景差分:取前30帧图像取平均值,计算前30帧之差的和,再求均值.在背景平均值上下浮动的阈值之外的被检测出来. 肤色检测:利用YCrCb空间. 两个结果相与操作. 这种方式的优点:1.有效解决了肤色检测结果中总是检测到人脸的情况: 2.解决背景差分检测结果杂乱的情况: 缺点:背景要求相对稳定,反差越大越好,鲁棒性差. 注意事项:差分法由于涉及到累加图像,编

【 论文学习记录】A flexible and scalable slam system with full 3d motion estimation 一种灵活可扩展带有3D运动估计的slam系统

A flexible and scalable slam system with full 3d motion estimation   论文学习记录 这篇论文系统框架,栅格多阈值,更新同步与伪数据,扫描匹配起始点,协方差交叉融合的思想还是值得借鉴的. 摘要 关注于搜救机器人建图定位与导航的框架性文章. 低计算资源的在线快速获取栅格地图: 结合鲁棒的激光扫描匹配方法和惯性传感器姿态估计系统. 快速地图梯度近似与多分辨率(类似图像金字塔)栅格地图,精确而不需要闭环检测. 介绍 2D slam 子系

基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统)

转自网络:http://blog.csdn.net/zouxy09/article/details/17913745 基于meanshift的手势跟踪与电脑鼠标控制(手势交互系统) [email protected] http://blog.csdn.net/zouxy09 一年多前开始接触计算机视觉这个领域的时候,年幼无知,倍感吃力.当年惶恐,从而盲从.挣扎了不少时日,感觉自己好像还是处于领域的门外汉一样,在理论与实践的鸿沟中无法挣脱,心里空落落的.在这种挥之不去的烦忧中,某个时候豁然开朗,觉

学习IOS开发UI篇--UI知识点总结(四) UITabelView/UITableViewCell

UITabelView:常用属性 @property (nonatomic)          CGFloat    rowHeight;             // will return the default value if unset @property (nonatomic)          CGFloat     sectionHeaderHeight;   // will return the default value if unset @property (nonatom