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

Parameters Kinect:将深度数据从2D取消投影到3D,parameters,camera,kinect,Parameters,Camera,Kinect,我回顾了其他讨论,但我不清楚,我为我的无知道歉,并提前向您表示感谢 我正在使用kinect处理深度流和骨骼关节。我想将Kinect提供的深度图像从2D取消投影到3D,以便在空间中构建曲面 这个过程很简单,我从Daniel Herrera Toolkit获得了Kinect的内在参数,并制定了一个转换公式: % Set 1000 to convert the raw depth value to meters. zw = z_w / 1000; xw = (xv - cx) * zw / fx

我回顾了其他讨论,但我不清楚,我为我的无知道歉,并提前向您表示感谢

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

这个过程很简单,我从Daniel Herrera Toolkit获得了Kinect的内在参数,并制定了一个转换公式:

% 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)
xv
yv
对应于二维图像坐标,
xw
yw
zw
对应于以米为单位的对象坐标,原点位于传感器位置(0,0,0)

但并非所有的结果都是好的

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

根据3D骨骼跟踪器
头部=[-0.0047,0.3932,1.4592]
(三维坐标,单位为米)

根据我的职能:

xv =  313

yv =  115

zw = 1360

unproject(xv, yv, zw)  
POS3D=[-0.4809 0.1794 1.3500]
(以米为单位的三维坐标)

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

  • 我的问题是公式是否错误,或者我使用的任何参数是否过大。 如果是这样的话,你能和我分享一下这个功能吗

  • 另一个问题是,骨架3D数据是否需要后处理才能使用

  • 谢谢

  • 虽然这个公式看起来是正确的,但有些地方出了问题,因为如果我将它与提供的值一起使用,我会得到完全不同的结果。但即使它是正确的,也可能与您从MSSDK骨架跟踪中获得的位置不同

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


  • 因为z坐标也不同,这不仅仅是因为你的公式。你没有告诉任何框架(NITE?Kinect SDK?…),因此很难猜测到底发生了什么。嗨,Simson,很抱歉,我忘了说我使用MS Kinet SDK,而且颜色和深度图像之前已注册。谢谢