【问题标题】:ColorSpacePoint to DepthSpacePoint颜色空间点到深度空间点
【发布时间】:2015-12-09 22:12:53
【问题描述】:

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

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

但是,我无法确定 CoordinateMapper 中的哪个函数会接收特定的 ColorSpacePoint 并返回关联的 DepthSpacePoint。

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

谢谢!

【问题讨论】:

  • 向我们展示您的尝试。
  • 谢谢拉法夫,我需要的是相反的操作……
  • @Pol 我也有同样的问题。我想要彩色图像中特定坐标的深度。我正在做的是我正在使用opencv跟踪彩色图像中的球,它给了我彩色框架中球的中心坐标,现在我想得到球的中心坐标的深度。到目前为止我所做的是, MapColorFrameToDepthSpace() 然后得到与球的颜色坐标对应的深度坐标,然后从映射坐标得到深度帧的深度值。但是我得到的结果在某种程度上是不正确的。
  • @Pol 如果你能完成这件事,你能把它贴在这里吗?

标签: c# c++ kinect kinect-sdk


【解决方案1】:

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

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

因此,如果您确实需要朝那个方向发展,则需要使用CoordinateMapper.MapColorFrameToCameraSpace 映射整个图像。

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

编辑:

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

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

如果对象不存在,彩色相机的相同像素将注视背景(蓝色虚线箭头),该像素将映射到深度相机中的不同像素(红色虚线箭头 - 不同方向箭头表示不同的像素)。

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

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

【讨论】:

  • 如果我错了,请原谅我,但到目前为止我知道...ColorSpacePointDepthSpacePoint 只是二维平面中的二维点。他们只是在宽度和高度上有不同的比例。如果这是真的,那么,应该可以绘制那些考虑到他们的比例的人。另外,DepthSpacePointCameraSpacePoint 也不一样。
  • 当然,这些比率之间的映射不是问题。但是深度和色彩空间之间的映射不仅仅是一个直接的像素映射。由于相机位置不同,深度在映射中起着一定的作用,必须加以考虑。
  • 是的,DepthSpacePointCameraSpacePoint 是不同的数据结构。但它们是直接相关的。对于每个DepthSpacePoint(以及对应的深度值),可以直接计算出匹配的CameraSpacePoint。它们基本上包含相同的信息,只是格式不同。
  • @HenningJ 我知道这两个空间略有错位,因为它们来自不同的相机。但是,如果有办法从 DepthSpace 映射到 ColorSpace,为什么不能有办法朝相反的方向发展?
  • 因为DepthSpace有3D信息,而ColorSpace只有2D信息。并且 3D 信息对于正确的映射是必要的。我在答案中添加了一张图片,希望能更好地解释它。
猜你喜欢
  • 1970-01-01
  • 2022-11-29
  • 2019-11-21
  • 2016-08-20
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多