Kinect:从2D到3D取消投影深度数据

时间:2014-06-10 01:16:21

标签: parameters camera kinect

我回顾其他讨论,但对我来说并不清楚,我为我的无知而道歉,并提前感谢你。

我正在使用深度流和骨架关节的kinect。我想将Kinect提供的深度图像从2D投影到3D,以便在空间中构建曲面。

程序很简单,我得到了我的Kinect的内在参数(来自Daniel Herrera Toolkit)并制定了一个转换公式:

% Set 1000 to convert the raw depth value to meters.

zw = z_w  / 1000;

xw = (xv - cx) * zw / fx;

yw = (yv - cy) * zw / fy;

具有深度相机焦距,来自Daniel Herrera的Kinect工具箱

fx = 579.83; % in axis x

fy = 586.73; % in axix y

cx = 321.55;  % optical center x

cy = 235.01;  % optical center y

zw = depth by kinect (mm)

xvyv对应于2D图像坐标,而xwywzw对应于以米为单位的对象坐标,其原点为在传感器位置(0,0,0)。

但所有结果都不好。

我评估一个单点将我的结果与Kinect在我的应用程序中提供的Head 3D坐标进行比较:

根据3D骨架跟踪器
Head = [-0.0047, 0.3932, 1.4592](以米为单位的3D坐标)

根据我的职能:

xv =  313

yv =  115

zw = 1360

unproject(xv, yv, zw)  

POS3D = [-0.4809 0.1794 1.3500](以米为单位的3D坐标)

你可以观察到这两个结果是不同的,主要是在x分量上。

  1. 我的问题是配方是否错误,或者我使用的任何参数都过大。 如果是这种情况,你可以与我分享这个功能吗?

  2. 另一个问题是,骨架3D数据是否需要使用后期处理?

  3. 谢谢,

1 个答案:

答案 0 :(得分:1)

  1. 虽然公式似乎是正确的,但出现了问题,因为如果我将它与提供值一起使用,我会得到一个完全不同的结果。但即使它是正确的,也可能与it uses filtering per default以来从MS SDK骨架跟踪中获得的位置不一样。

  2. 这取决于用例。你例如如果你不过滤结果,可能会产生强烈的抖动(见上文)。但是对于某些情况(例如找到ROI),不需要进行后处理。