Kinect点云到颜色空间变换

时间:2017-01-27 18:38:12

标签: opencv kinect openkinect

现在,我正在尝试确定Kinect V2.0框架中的转换矩阵。我的最终目标是最终得到将我的点云(相对于深度传感器)转换为相对于彩色相机的点云所需的平移和旋转矩阵。

我知道我可以手动校准(通过OpenCV等)来确定变换,但我想要实际的相机矩阵。我使用调用MapDepthFrameToCameraSpaceUsingIntPtr,所以我知道深度空间和颜色空间之间存在内部理解(也就是矩阵变换)。

  

有人知道如何提取,或者Kinect v2 API中是否存在矩阵,它们是否在内部用于MapDepthFrameToCameraSpaceUsingIntPtr调用?或者,如果有办法将点云图像帧转换为彩色相机空间?

2 个答案:

答案 0 :(得分:0)

他们可能知道旋转和平移矩阵以及彩色摄像机参数。不幸的是,就您使用Microsoft SDK而言,它们不会公开这些数据(只有深度相机参数是公开的)。您可以校准相机或使用提供的查找表。

答案 1 :(得分:0)

您要做的事情(转化)称为注册I have explained here very clearly how to do the Registration.

  

我知道我可以手动校准(通过OpenCV等)来确定   转换,但我想要实际的相机矩阵。

校准相机是获得Kinect传感器最精确相机矩阵的唯一方法,因为每个Kinect传感器的相机矩阵都有很小的余量。但是,一旦你构建了点云,它就会产生重大影响。

  

有人知道如何提取,或者内部是否存在矩阵   Kinect v2 API,它们在内部用于   MapDepthFrameToCameraSpaceUsingIntPtr调用?

您可以提取部分矩阵,但不是全部。在您的CPU中没有处理MapDepthFrameToCameraSpaceUsingIntPtr非常无能为力的东西。 在kinect硬件本身的芯片内计算。矩阵的值嵌入芯片本身。这样做的原因是,考虑一下这个API调用需要进行多少计算。例如。 Kinect帧速率为每秒30帧,每个颜色帧具有1920 x 1080像素,深度帧具有512 x 424像素。至少

每秒

30 x 512 x 424 = 6,512,640次计算。

您无法在不知道相机矩阵的情况下在真实世界坐标空间中构建点云。如果使用深度图像坐标直接构建点云,则在深度空间中构建点云。

我开发了一个用于实时点云可视化的3D交互原型。

You can check out my repository VRInteraction

Demo video

Calibrated color and depth camera matrix

正如您可以看到视频的右侧,它是一个实时3D点云。我通过将深度帧注册到彩色帧并构建RGBXYZ点云,使用CUDA(GPU加速)实现了这一目标。