c# - 颜色空间点到深度空间点

标签 c# c++ kinect kinect-sdk

我正在尝试将单个 ColorSpacePoint 映射到 Kinect SDK 2.0 中的 DepthSpacePoint。

如果了解 Kinect 提供的三种坐标系,这应该是一个非常简单的映射。色彩空间和深度空间都是二维空间,它们只是具有不同的分辨率和纵横比。

但是,我无法弄清楚 CooperativeMapper 中的哪个函数将接收特定的 ColorSpacePoint 并返回关联的 DepthSpacePoint。

有人能解释一下这个问题吗?

谢谢!

最佳答案

SDK 中没有方法将单个 ColorSpacePoint 映射到 DepthSpace(或 CameraSpace)。而且不可能有!为了获得正确的映射,您不仅需要像素坐标,还需要该特定像素的深度。而在 RGB 图像中,您没有该信息。

要实现从颜色空间到深度或相机空间的正确映射,您首先必须将完整深度图像映射到彩色图像,以获得每个颜色像素的深度值。然后很容易将单个像素从颜色空间映射到深度空间。但到那时你就已经拥有了完整的映射。

因此,如果您确实需要朝这个方向前进,则需要使用 CoordinateMapper.MapColorFrameToCameraSpace 来映射整个图像。 .

另一方面,当您处于深度或相机空间时,您已经拥有每个像素所需的所有信息,因此映射单个像素很容易。这就是这些方法存在的原因(例如 CoordinateMapper.MapDepthPointToCameraSpace )。

编辑:

我希望一点图可以帮助解释为什么需要深度来获得颜色和深度空间之间的正确映射:

enter image description here

彩色相机的一个像素正在观察蓝色物体(实线蓝色箭头)。该像素映射到深度相机的特定像素(红色实心箭头)。

如果物体不存在,彩色相机的相同像素将看着背景(蓝色虚线箭头),这将被映射到深度相机中的不同像素(红色虚线箭头 - 不同的方向)箭头表示不同的像素)。

但是彩色相机不知道它是在看物体还是背景。它只知道那里有哪种颜色。不是那种颜色有多远。这就是为什么仅靠彩色相机无法确定深度相机中哪个像素是正确的。

另一方面,深度相机知道每个像素的距离,因此它可以计算出彩色相机中相应的像素。

关于c# - 颜色空间点到深度空间点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34189980/

相关文章:

c# - Doxygen 不会生成指向没有显式类名的方法的链接

c# - 无法将 ASP.NET MVC 5 Controller 添加到 VS2013 中的简单 ASP.NET MVC 项目

C++ 信号不会在 QML 端被捕获

c# - Kinect模式识别

matlab - 如何在 Matlab 中对齐来自 Kinect 的 RGB 和深度图像

c# - XMLSerializer 并使用属性创建 XML 数组

c# - WPF:最适合显示大量文本的 UI 元素?

c++ - 模板 模板参数

c++ - 使用 printf 函数

c++ - OpenGL + Kinect SDK - 如何从单个像素获取深度值?