姓名:黄姣蕊
学号:21011110244
嵌牛导读三维深度点云数据采集之不同传感器参数对比
嵌牛鼻子三维点云数据采集,传感器,Microsoft推出,计算机视觉
嵌牛提问Microsoft推出的Kinect系列传感器参数性能
嵌牛正文
一、Kinect XBOX 360
利用深度相机对运动人体进行扫描,以获得运动人体的点云数据。我们采用Microsoft公司推出的Kinect XBOX 360,其内部配置同Kinect v2相同。
参考文献:Péter Fankhauser, Bloesch M , Rodriguez D , et al Kinect v2 for Mobile Robot Navigation: Evaluation and Modeling[C]// International Conference on Advanced Robotics (ICAR) IEEE, 2015
二、Azure Kinect DK
采用Microsoft在2019年2月最新推出的Azure Kinect DK来进行数据的获取。
获取数据的场景如下:
Azure Kinect DK相机的内部构造:
深度相机的相关参数:
彩色相机的相关参数:
点云数据的获取:
外部同步
该设备利用35mm音频线实现同步,可用于将多个单元连接在一起,实现相机的协调触发。在设备上有特定的同步输入和同步输出插孔,支持简单的链接。兼容电缆不包括在盒子里,必须单独购买,电缆要求:
• 35mm头公对公电缆(“35mm音频电缆”);
• 最大电缆长度< 10m;
• 支持立体声和单声道电缆。
同步场景:
下一步工作计划:
连接方式:
菊花链配置(最多能连接9台):
星型链配置(最多能连接3台):
三、Azure Kinect DK与Kinect V2相关参数的对比
KinectFusion是一种利用kinect相机的深度数据进行实时三维重建的技术。本文学习一篇比较早的论文(见参考文献),并对其进行详细地讲述。这篇文章构建了KinectFusion的雏形,被后来者争相follow。
KinectFusion的过程可以分为四个模块:
首先对原始深度数据做双边滤波处理,对处理后的深度图做反投影(back-project) *** 作,得到vertex map。
向量之间的叉乘可以得到法向量,具体运算可以见图3。
surface construction的核心是TSDF及其更新。
TSDF全程Truncated Signed Distance Function。它将空间场景模型化为一个立方体栅格,每个栅格中都存有两个值,一个是距离值F,另一个是权重值W。
如图4所示,TSDF模型中存储的距离值,surface处值为零,传感器一侧的值为正,距离表面越远值越大,另一侧值为负,距离表面越远值越小。而权重值则与表面测量的不确定度有关。
而在实际的测量中,接近零的位置的值才是有效的,因此需要设定一个阈值u,将与surface距离大于u置为无效,不予考虑,而小于u的值进行归一化截断。
图5给出了当前帧TSDF距离值的计算方法。
全局的TSDF是由每一帧单个的TSDF加权平均得来的,如图6所示。
虽然理论上权重值和表面测量的不确定度有关,即与顶点光线方向和法线方向夹角的余弦值成正比,与相机中心和顶点的距离值成反比。但是在实际中,权重恒等于1可以得到很好的结果,并且权重的累积不是一直增大,而是设置了最大值阈值,如图7所示。
上文提到过,在TSDF模型中距离值F=0的位置就是surface的位置,因此利用ray casting,从相机中出发,逆着光线走,直到TSDF体元中的距离值由正变负或者由负变正,即确定为surface的位置。
但是有一个问题,在逆着光线方向走的时候,以多长距离为间隔呢?这里由于场景中很大一部分都是没有物体的无效位置,每个体元都去判断正负值显然很费时间。这里就根据TSDF每个体元中存储的距离值来确定步长,当走到TSDF体元存储着正距离值的时候,步长要设定为小于u值,而在此之前,就以u值作为步长,这样就可以快速找到正负变化的位置。
好像还是哪里有问题。对,虽然正负变化的体元位置找到了,但是哪里才是表面确定位置,毕竟表面是一个值而不是一个有厚度的区域。所以我们采用图8的式子近似找到一个合理的位置。
找到surface的坐标后,预测的法向量可以由这一点的梯度得到,如图9,并在不同尺度上计算以适应不同的体元精度。
相机的pose通过ICP算法求解。和一般的ICP不同,这里的ICP不是通过两帧之间的对应点进行求解,而是将当前帧的点与上一帧得到的predicted surface点进行匹配。在建立measured surface和predicted surface之间点的对应关系时,作者没用使用过ICP中的最近点,而是将measured surface上的点投影到上一帧相机的位置,得到的图像平面上的坐标对应的predicted surface上的点就是要找的对应点。如图10所示。
在度量measured surface和predicted surface之间的误差时,作者使用的是ICP中的点面误差度量,如图11。
以上为算法全部内容。
持续更新,欢迎提出质疑或与作者就相关问题进行讨论。
参考文献
[1]KinectFusion: Real-Time Dense Surface Mapping and Tracking
[2]A Volumetric Method for Building Complex Models from Range Images
析:身体以及各个关节点的位置定义了一个姿势。更具体的来说,是某些关节点相对于其他关节点的位置定义了一个姿势。 姿势的类型和复杂度决定了识别算法的复杂度。 通过关节点位置的交叉或者关节点之间的角度都可以进行姿势识别。
通过关节点交叉进行姿势识别就是对关节点进行命中测试。
我们可以确定某一个关节点的位置是否在 UI 界面上某一个可视化元素的有效范围内。我们可以对关节点做同样的测试。 但是需要的工作量要少的多,
因为所有的关节点都是在同一个坐标空间中, 这使得计算相对容易。 例如叉腰动作(hand-on-hip) ,
可以从骨骼追踪的数据获取左右髋关节和左右手的位置。然后计算左手和左髋关节的位置。如果这个距离小于某一个阈值,就认为这两个点相交。那么,这样就变得
简单多了。
但是,由于Kinect的精度问题,但即使通过一些平滑参数设置,从 Kinect
中获取的关节点数据要完全匹配也不太现实。另外,不可能期望用户做出一些连贯一致的动作, 或者保持一个姿势一段时间。 简而言之,
用户运动的精度以及数据的精度使得这种简单计算不适用。 因此, 计算两个点的长度, 并测试长度是否在一个阈值内是唯一的选择。角度原理也与之类似。
当两个关节点比较接近时, 会导致关节点位置精度进一步下降,
这使得使用骨骼追踪引擎判断一个关节点的开始是否是另一个关节点的结束点变得困难。比如,很难将手放在脸的前面,手放在头上,
和手捂住耳朵这几个姿势区分开来。 要摆出一个确切的姿势也很困难, 用户是否会按照程序显示的姿势来做也是一个问题。
一些姿势使用其他方法识别精度会更高。例如,用户伸开双臂和肩膀在一条线上这个姿势,称之为 T
姿势。可以使用节点相交技术,判断手、肘、以及肩膀是否在 Y
轴上处于近乎相同的位置。另一种方法是计算某些关节点连线之间的角度。骨骼追踪引擎能够识别多达20个关节点数据。任何三个关节点就可以组成一个三角形。使用三角几何就可以计算出他们之间的角度。
以上就是关于Kinect XBOX 360 &Azure Kinect DK两传感器性能参数对比全部的内容,包括:Kinect XBOX 360 &Azure Kinect DK两传感器性能参数对比、KinectFusion 论文精析、C#编程 人体关节坐标获取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)