我最近使用kinect找到一些标记的距离,所以我坚持将像素中的kinect rgb和深度图像转换为以米为单位的真实世界坐标xyz。
答案 0 :(得分:1)
请注意,在Kinect SDK 1.8(Kinect 1)中,无法将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。