如何在没有来自 Kinect Window SDK 的 Coordinatemapper 的情况下将 3D 骨骼关节映射回 2D 彩色图像

How to map the 3D skeleton joints back to 2D color image without Coordinatemapper from Kinect Window SDK

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

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

1) 3D关节在depth camera 3D space, 我需要转换成color camera 3D space (rotation/translation)。 我不知道如何得到这个变换矩阵!

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 Camera-space(在某些方面,实际上depth和color是两个不同的camera --> 他们应该有不同的3D camera-space).因此,我在没有坐标映射功能的情况下成功地将 3D 点映射为 2D 颜色(我使用了从 Matlab 工具箱中找到的投影矩阵)。 3D 相机space -> 投影回 2D 像素颜色

一开始我觉得3D点在3D深度space,3D深度和3D颜色space是不一样的。 (输入:3D 深度中的 3D 点 space,输出:2D 彩色像素),我需要转换 3D 深度相机 ->3D 彩色相机 -> 投影回 2D 像素颜色 ) .但是,步骤3D depthcamera ->3D colorcamera不需要实现。

是的,您绝对需要从深度相机 Space 转换为彩色相机 Space。 Kinect 有两个摄像头——IR 和 RGB 以及三个 "spaces"——摄像头、深度和颜色。深度和红外图像共享相同的颜色 space。骨骼关节在 Camera Space 中以 3D 形式出现,因此为了在 Depth 或 Color space 中有对应的点,您需要适当地转换(当然,在此过程中您会丢失 Z 坐标) .

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

之后,请参阅以下 post 您需要进行的计算:Manual coordinate mapping