首页 文章

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

提问于
浏览
2

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

2 回答

  • 1

    您可以在Computer Vision System Toolbox for MATLAB中使用depthToPointCloud功能 .

  • 0

    请注意,在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];
    

相关问题