oRo*_*ole 7 c# 3d wpf 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; }
}
Run Code Online (Sandbox Code Playgroud)为了获得颜色和深度信息以及设置Kinect数组,我首先使用Kinect-SDK的MultiSourceFrameReader类来获取MultiSourceFrame...
MultiSourceFrame multiSourceFrame = e.FrameReference.AcquireFrame();
Run Code Online (Sandbox Code Playgroud)
..所以我可以在那之后获取颜色/深度框架:
DepthFrame depthFrame = multiSourceFrame.DepthFrameReference.AcquireFrame();
ColorFrame colorFrame = multiSourceFrame.ColorFrameReference.AcquireFrame();
Run Code Online (Sandbox Code Playgroud)
通过这些方法.CopyConvertedFrameDataToArray(),.CopyFrameDataToArray()我获得RGB和深度信息的帧数据,然后CameraSpacePoint[]使用CoordinateMapper's .MapColorPointsToCameraSpace()方法将其映射到数组,以提取相机空间内的X/Y/Z坐标.使用此数组和帧数据,我可以设置Pixel[]包含"Kinect-pointcloud"的所有信息的数组.
为了设置3D对象的"pointcloud",我使用第三方库来加载对象并提取其X/Y/Z坐标和颜色信息.
下一步
我的下一步是合并这两个pointcloud,但那是我被卡住了.我不知何故必须映射或调整一个pointcloud的3D信息(X/Y/Z),以便它适合其他pointcloud的3D信息,因为它们的缩放方式不同.这引出了我的问题:
我的问题
附加信息
Kinect-pointcloud内的坐标如下:
- X:1.4294 ..
- Y:0.9721 ..
- Z:2.1650 ..
3D对象内的坐标如下所示:
- X:0.8331 ..
- Y:-16.0591 ..
- Z:26.8001 ..