6

目前,我正在开发一个 C# 项目,以合并可以使用 Kinect SDK 从 Kinect-v2 设备检索的颜色和深度信息,以及可以从 3 维对象文件(.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-array,我首先使用 Kinect-SDK 的MultiSourceFrameReader类来获取一个MultiSourceFrame..

MultiSourceFrame multiSourceFrame = e.FrameReference.AcquireFrame();

..这样我就可以在此之后获取颜色/深度帧:

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

通过这些方法.CopyConvertedFrameDataToArray().CopyFrameDataToArray()我得到了 RGB 和深度信息的帧数据,然后使用's方法将其映射到一个CameraSpacePoint[]数组,以提取相机空间内的 X/Y/Z 坐标。使用这个数组和帧数据,我可以设置包含“Kinect-pointcloud”所有信息的数组。CoordinateMapper.MapColorPointsToCameraSpace()Pixel[]

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

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

我的问题

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

附加信息
Kinect 点云中的坐标如下所示:
- X:1.4294..
- Y:0.9721..
- Z:2.1650..


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

4

0 回答 0