我有一张彩色图像及其深度图,两者都是由Kinect拍摄的。我想把它投射到另一个位置(看看它在另一个视点中的样子)。因为我没有Kinect的内在参数(相机参数);我该如何实施呢?
P.S:我用C ++编写代码。
答案 0 :(得分:1)
使用深度框和颜色框,你应该有足够的数据来实现类似于你想要做的事情。
在颜色框中,您拥有每个像素的颜色。 在深度框架中,您可以获得每个像素的距离。
(请记住,由于每个传感器的位置,深度帧和颜色帧之间的数据之间存在小的差距。请查看映射辅助方法:MapDepthFrameToColorFrame)
如果同时获取深度和颜色框中的所有数据,则可以将每个像素绘制为三维世界中的一个点。假设您的分辨率为640x480。您将在640(x =宽度),480(y =高度),~3000(z =深度)的矩形中绘制场景。然后你可以改变观点!
唯一的问题是你没有适合Z轴的比例。如果您想要更好的结果,还应该使用SkeletonFrame。多亏了你将拥有实际的X,Y和Z值(以米为单位)。您可以再次使用辅助方法(MapDepthToSkeletonPoint)获取每个深度点的相应骨架点!
如果查看this post,您会找到一个显示结果的视频,C#中的一些代码,以及可以重复使用的项目示例。