如何将Kinect rgb和深度图像转换为真实世界坐标xyz?

时间:2015-04-08 17:32:02

标签: computer-vision kinect matlab-cvst

我最近使用kinect找到一些标记的距离,所以我坚持将像素中的kinect rgb和深度图像转换为以米为单位的真实世界坐标xyz。

2 个答案:

答案 0 :(得分:1)

请注意,在Kinect SDK 1.8(Kinect 1)中,无法将RGB图像空间转换为世界空间:仅从深度图像空间转换为世界空间。其他可能的转换是:

  • 深度 - > RGB
  • 世界 - >深度
  • 世界 - > RGB

因此,要进行转换,请使用SDK中包含的坐标映射器(我假设您使用的是Microsoft SDK,而不是OpenNI,AS3NUI或EuphoriaNI)。以下是有关如何从世界空间转换为RGB空间的示例,取自here

_sensor.CoordinateMapper.MapCameraPointToColorSpace(worldCoordinate);

此示例位于C#for Kinect SDK 2.0中。要查看SDK 1.8的另一个示例,以及有关使用坐标映射器的简短讨论,您可以看到以下文章:Understanding Kinect Coordinate Mapping

要从RGB图像空间转换为世界坐标空间(仅限Kinect 2和SDK 2.0),您可以使用this method

_sensor.CoordinateMapper.MapColorFrameToCameraSpace(depthFrame, resultArray);

你必须传递整个深度帧(不是彩色帧!!)和一个数组,它将返回每个颜色帧像素的世界坐标。当然,这个数组必须足够大以包含所有点(最大分辨率为1920 * 1080 = 2 073 600个条目),然后使用简单公式找到点的坐标:

worldCoordinate = resultArray[imageCoordinate.Y * rgbImageWidth + imageCoordinate.X];

答案 1 :(得分:0)

您可以使用计算机视觉系统工具箱中的depthToPointCloud功能进行MATLAB。

相关问题