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

Computer vision 如何将Kinect rgb和深度图像转换为真实世界坐标xyz?,computer-vision,kinect,matlab-cvst,Computer Vision,Kinect,Matlab Cvst,我最近使用kinect查找一些标记的距离,所以我一直在将kinect rgb和深度图像(以像素为单位)转换为现实世界坐标xyz(以米为单位) 请注意,在Kinect SDK 1.8(Kinect 1)中,无法从RGB图像空间转换到世界空间:只能从深度图像空间转换到世界空间。其他可能的转换为: 深度->RGB 世界->深度 世界->RGB 因此,要转换,您需要使用SDK中包含的坐标映射器(我假设您使用的是Microsoft SDK,而不是OpenNI、AS3NUI或Ephoriani)。以下是

我最近使用kinect查找一些标记的距离,所以我一直在将kinect rgb和深度图像(以像素为单位)转换为现实世界坐标xyz(以米为单位)

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

  • 深度->RGB
  • 世界->深度
  • 世界->RGB
因此,要转换,您需要使用SDK中包含的坐标映射器(我假设您使用的是Microsoft SDK,而不是OpenNI、AS3NUI或Ephoriani)。以下是如何从世界空间转换为RGB空间的示例,摘自:

\u sensor.CoordinateMapper.MapCameraPointToColor空间(世界坐标);
此示例为Kinect SDK 2.0的C#格式。要查看SDK 1.8的另一个示例,以及关于坐标映射器使用的简短讨论,您可以查看以下文章:

要将RGB图像空间转换为世界坐标空间(仅适用于Kinect 2和SDK 2.0),可以使用:

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

worldcordinate=resultArray[imageCoordinate.Y*rgbImageWidth+imageCoordinate.X];
您可以使用MATLAB计算机视觉系统工具箱中的函数