1

我想在不使用坐标映射器的情况下将 CameraSpace 中的 3D 骨架映射回 Kinect 中的 2D 彩色图像。我需要从深度相机转换为彩色相机吗?

在我看来,骨骼关节是从深度图像中获得的。因此,为了获得彩色图像中的关节位置,我应该通过以下 3 个步骤:

1)3D关节在深度相机3D空间,我需要转换到彩色相机3D空间(旋转/平移)。我不知道如何得到这个变换矩阵!

2)找到彩色相机内在参数(使用matlab校准工具箱)将3D映射回2D

3) 与失真系数相乘。

我在这里发现了一个类似的问题:How to convert points in depth space to color space in Kinect without using Kinect SDK functions? 然而,关于如何找出将深度相机映射到彩色相机的变换矩阵的问题没有得到解答。

编辑: 实施后,我认为 Color 2D 和 depth 2D 共享相同的 3D 相机空间(在某些方面,实际上深度和颜色是两个不同的相机——>它们应该有不同的 3D 相机空间)。因此,在没有坐标映射功能的情况下,我成功地将 3D 点映射为 2D 颜色(我使用了从 Matlab 工具箱中找到的投影矩阵)。3D 相机空间 -> 投影回 2D 像素颜色

一开始,我认为 3D 点在 3D 深度空间中,3D 深度和 3D 色彩空间是不同的。(输入:3D 深度空间中的 3D 点,输出:2D 彩色像素),我需要将 3D depthcamera ->3D colorcamera -> 投影回 2D 像素颜色)。但是,步骤3D depthcamera ->3D colorcamera不需要实现。

4

1 回答 1

1

是的,您绝对需要从深度相机空间转换为彩色相机空间。Kinect 有两个摄像头 - IR 和 RGB 以及三个“空间” - 摄像头、深度和颜色。深度和红外图像共享相同的色彩空间。骨架关节在 3D 中位于相机空间中,因此为了在深度或颜色空间中具有对应点,您需要进行适当的转换(当然,在此过程中您会丢失 Z 坐标)。

坐标映射过程在 API 调用之后被抽象出来是有充分理由的。它取决于摄像机的 FOV(视野)和它们之间的物理距离。这些在传感器的每个型号之间可能会有所不同。因此,最好检查您的特定传感器的这些值。它们是恒定的,所以如果你能保证你的代码只会在那个特定的 Kinect 模型上运行 - 你会没事的。

之后,请参阅以下有关您需要进行的计算的帖子:手动坐标映射

于 2018-05-09T17:46:02.077 回答