Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv Kinect点云到颜色空间的变换_Opencv_Kinect_Openkinect - Fatal编程技术网

Opencv Kinect点云到颜色空间的变换

Opencv Kinect点云到颜色空间的变换,opencv,kinect,openkinect,Opencv,Kinect,Openkinect,现在,我正在尝试确定Kinect V2.0框架中的变换矩阵。我的最终目标是得到必要的平移和旋转矩阵,以将我的点云(相对于深度传感器)转换为相对于彩色相机的点云 我知道我可以手动校准(通过OpenCV等)来确定变换,但我想要实际的相机矩阵。我使用调用MapDepthFrameToCameraSpaceUsingIntPtr,因此我知道深度空间和颜色空间之间存在内部理解(也称为矩阵变换) 是否有人知道如何提取,或者Kinect v2 API中是否存在一个矩阵,用于MapDepthFrameToCam

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

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

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


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

您尝试执行的操作(转换)称为注册

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

校准相机是获得Kinect传感器最精确的相机矩阵的唯一方法,因为每个Kinect传感器的相机矩阵彼此不同,几乎没有余量。但一旦你建立了点云,它将产生重大的变化

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

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

30 x 512 x 424=6512640
每秒计算次数

在不了解摄影机矩阵的情况下,无法在真实坐标空间中构建点云。如果直接使用深度图像坐标构建点云,则该点云将位于深度空间中

我开发了一个与实时点云可视化进行三维交互的原型

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