目前我正在开发一个C#项目来合并可以使用Kinect SDK从Kinect-v2设备检索的颜色和深度信息,其中包含可以从三维对象文件(.obj ,. stl,依此类推..)因此,我想创建一个像素点 Cloud ,其中包含两者的信息 - 来自Kinect设备的坐标和颜色信息以及来自目标文件的信息 .

What I've done so far?

  • 我设法设置了两个像素数组 Pixel[] ,它们包含所需的数据(X / Y / Z坐标,以及相关的颜色信息RGB) .

  • 一个数组包含Kinect数据,而另一个数组包含
    对象文件的数据 .

public class Pixel 
{
     public double X { get; set; }
     public double Y { get; set; }
     public double Z { get; set; }
     public byte R { get; set; }
     public byte G { get; set; }
     public byte B { get; set; }
}

为了获得颜色和深度信息以及设置Kinect数组,我首先使用Kinect-SDK的 MultiSourceFrameReader 类来获取 MultiSourceFrame ..

MultiSourceFrame multiSourceFrame = e.FrameReference.AcquireFrame();

..所以我可以在那之后获取颜色/深度框架:

DepthFrame depthFrame = multiSourceFrame.DepthFrameReference.AcquireFrame();
ColorFrame colorFrame = multiSourceFrame.ColorFrameReference.AcquireFrame();

使用 .CopyConvertedFrameDataToArray().CopyFrameDataToArray() 方法获取RGB和深度信息的帧数据,然后使用 CoordinateMapper.MapColorPointsToCameraSpace() 方法将其映射到 CameraSpacePoint[] 数组,以提取相机空间内的X / Y / Z坐标 . 使用此数组和帧数据,我可以设置 Pixel[] 数组,其中包含"Kinect-pointcloud"的所有信息 .

为了设置3D对象的“pointcloud”,我使用第三方库来加载对象并提取其X / Y / Z坐标和颜色信息 .

Next step
我的下一步是合并这两个点 Cloud ,但那是我被卡住了 . 我不知何故必须映射或调整一个pointcloud的3D信息(X / Y / Z),以便它适合其他pointcloud的3D信息,因为它们的缩放方式不同 . 这引出了我的问题:

My Questions

  • 如何缩放对象pointcloud以使其适合Kinect-pointcloud?

  • 如何找出对象的哪个像素覆盖Kinect-pointcloud中的像素? (生成的pointcloud不应改变其1920 * 1080像素的大小)

  • 有没有能够做到这一点的图书馆?

Additional Information
Kinect-pointcloud中的坐标如下所示:

  • X:1.4294 ..
  • Y:0.9721 ..
  • Z:2.1650 ..

3D对象中的坐标如下所示:

  • X:0.8331 ..
  • Y:-16.0591 ..
  • Z:26.8001 ..