C#和Kinect v2:将Kinect-pointcloud与3D对象的pointcloud合并

时间:2018-03-17 00:41:30

标签: c# wpf 3d point-clouds kinect-v2

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

到目前为止我做了什么?

  • 我设法设置两个像素数组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和深度信息的帧数据,然后将其映射到CameraSpacePoint[]的{​​{1}}数组CoordinateMapper {1}}提取相机空间内的X / Y / Z坐标的方法。使用此数组和帧数据,我可以设置.MapColorPointsToCameraSpace()数组,其中包含“Kinect-pointcloud”的所有信息。

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

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

我的问题

  • 如何缩放对象pointcloud以使其适合Kinect-pointcloud?
  • 如何找出对象的哪个像素覆盖Kinect-pointcloud中的像素? (得到的pointcloud不应改变其1920 * 1080像素的大小)
  • 是否有任何图书馆能够做到这一点?

其他信息
Kinect-pointcloud中的坐标如下所示:
  - X:1.4294 ..
  - Y:0.9721 ..
  - Z:2.1650 ..


3D对象内的坐标如下所示:
  - X:0.8331 ..
  - Y:-16.0591 ..
  - Z:26.8001 ..

0 个答案:

没有答案