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

Posted

技术标签:

【中文标题】如何在没有来自 Kinect Window SDK 的 Coordinatemapper 的情况下将 3D 骨骼关节映射回 2D 彩色图像【英文标题】:How to map the 3D skeleton joints back to 2D color image without Coordinatemapper from Kinect Window SDK 【发布时间】:2018-05-08 14:18:05 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

嗨 Levko,你的意思是深度和红外图像共享相同的“深度”空间而不是颜色空间吗?实施后,我认为 Color 2D 和 depth 2D 共享相同的 3D Camera-space(在某些方面,实际上 depth 和 color 是两个不同的相机 --> 他们应该有不同的 3D camera-space)。因此,在没有坐标映射功能的情况下,我成功地将 3D 点映射为 2D 颜色(我使用了从 Matlab 工具箱中找到的投影矩阵)。一开始,我认为3D点在3D深度空间,我需要改为3D色彩空间。不过好像没必要。 深度和红外共享相同的“深度”空间。它们由相同的尺寸表示,但是,它们的每个坐标或像素的值将不同。在您的情况下,投影矩阵正在执行坐标映射,而不是 Kinect API 中的 CoordinateMapper 类。 是的。我明白了你的想法。总结一下:Kinect 有 3 个空间:2-2D 空间 Depth 和 Color,以及 1-3D 空间 CameraSpace(真实深度信息)。骨架位于 3D 空间(真实深度)中。正如我们所知,要将 3D 映射回 2D,我们需要相机的 Intrinsic-matrix(如果我们不想使用坐标映射函数)。

以上是关于如何在没有来自 Kinect Window SDK 的 Coordinatemapper 的情况下将 3D 骨骼关节映射回 2D 彩色图像的主要内容,如果未能解决你的问题,请参考以下文章

Kinect帮助文档翻译之一 入门

Azure Kinect SDK Ubuntu18.04安装使用

Azure Kinect SDK Ubuntu18.04安装使用

kinect概述

如何将 Kinect 2.0 的深度数据转换为距离值?

Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧