我有一个彩色图像及其深度图,两者均由Kinect捕获。我想将其投影到另一个位置(从另一个 Angular 看它的外观)。由于我没有Kinect的固有参数(相机参数),如何实现?

附注:我正在用C++编写代码。

最佳答案

使用深度框和颜色框,您应该有足够的数据来实现与您想要的操作类似的操作。

在颜色框中,您具有每个像素的颜色。
在深度框中,您具有每个像素的距离。

(请注意,由于每个传感器的位置,深度框和颜色框中的数据之间存在很小的间隙。请查看映射帮助器方法:MapDepthFrameToColorFrame)

如果同时获取深度和颜色框中的所有数据,则可以将每个像素绘制为3维世界中的一个点。假设您的分辨率为640x480。您将以640(x =宽度),480(y =高度),〜3000(z =深度)的矩形绘制场景。然后就可以改变观点了!

唯一的问题是您的Z轴比例尺不合适。如果您想要更好的结果,则还应该使用SkeletonFrame。因此,您将获得实际的X,Y和Z值(以米为单位)。再次可以使用辅助方法(MapDepthToSkeletonPoint)获取每个深度点的对应骨架点!

如果您查看this post,则会发现一个显示结果的视频,C#中的一些代码以及可以重用的项目示例。

07-24 09:38
查看更多