现在,我正在试图确定Kinect V2.0框架中的转换矩阵。我的最终目标是将与深度传感器相关的点云转换为相对于彩色摄像机的点云所需的平移和旋转矩阵。
我知道,我可以手动校准(通过OpenCV等),以确定转换,但我想要的实际相机矩阵。我使用调用MapDepthFrameToCameraSpaceUsingIntPtr,因此我知道在深度空间和颜色空间之间存在一个内部理解(也称为矩阵转换)。
有谁知道如何提取,或者如果在Kinect v2 API中存在一个矩阵,他们会在内部用于
MapDepthFrameToCameraSpaceUsingIntPtr调用吗?或者,如果有办法将点云图像帧转换成彩色相机空间?
发布于 2017-07-11 08:13:14
可能他们知道旋转和平移矩阵,以及彩色相机的参数。不幸的是,只要您使用Microsoft,它们就不会公开这些数据(只有深度摄像机参数是公开的)。要么你校准相机,要么你使用所提供的查表。
发布于 2017-07-11 09:46:27
您所要做的(转换)被称为注册。我在此已清楚解释如何办理登记手续。
我知道,我可以手动校准(通过OpenCV等),以确定转换,但我想要的实际相机矩阵。
校准相机是获得最精确的相机矩阵的唯一方法,因为每个Kinect传感器的相机矩阵彼此之间没有什么差别。但是,一旦构建了点云,它将产生很大的不同。
有谁知道如何提取,或者如果在Kinect v2 API中存在一个矩阵,他们会在内部用于MapDepthFrameToCameraSpaceUsingIntPtr调用吗?
你可以提取矩阵的一部分,但不能全部提取。一些非常重要的事情是MapDepthFrameToCameraSpaceUsingIntPtr没有在您的CPU中处理。--它是在kinect硬件本身的芯片内计算的。矩阵的值被嵌入到芯片本身中。这样做的原因是,想想这个API调用需要做多少计算。例如,Kinect帧速率以每秒30帧为单位,每个彩色帧有1920 x 1080像素,深度帧有512 x 424像素。至少
每秒30 x 512 x 424 = 6,512,640计算。
如果不知道摄像机矩阵,就无法在现实世界的坐标空间中构建点云。如果直接使用深度图像坐标构建点云,则点云在深度空间中。
我已经开发了一个与实时点云可视化的三维交互原型。
因为你可以看到视频的右边,它是一个实时的三维点云。我使用CUDA (GPU )实现了这一点,通过将深度帧注册到彩色框架,并建立RGBXYZ点云。
https://stackoverflow.com/questions/41900823
复制相似问题