如何使用立体对合成新的相机视图?

Posted

技术标签:

【中文标题】如何使用立体对合成新的相机视图?【英文标题】:How to synthesize a new camera view using a stereo pair? 【发布时间】:2016-07-11 05:24:41 【问题描述】:

我想使用我已经拥有的一对立体相机从任意视点合成虚拟视图。我已经校准了我的立体装置,所以我知道两个相机的内在和外在。我合成新视图的方法是基于 3x4 相机矩阵计算,该矩阵计算基于使用从立体对获得的深度图计算的 [X, Y, Z] 点。然后我使用来自新视图(x, y) 的多点对应关系,并使用方程[x y 1]' = C * [X Y Z 1]' 找出相机矩阵C。我的问题:

    这是生成任意视图的正确方法吗? 推荐多少点对应关系以及在哪些平面上计算相机矩阵?因为我使用 6-8 分并没有得到好的结果。我不能使用 SIFT/SURF,因为图像没有特色,我必须手动标记点。 即使我得到了相机矩阵,由于相机矩阵是不可逆的,如何进行前向翘曲。

如果您需要更多信息,请发表评论。

谢谢!

【问题讨论】:

【参考方案1】:

简短回答:

    不,因为您已经有了深度图并且您的装备已经过校准。 无关 无关

您需要做的就是从深度图上构建一个 3D 网格(实际上是一个网格)。根据定义,这将在立体对的任一相机中都没有遮挡。然后,您可以使用来自任一立体相机的视图(或两者,使用基于更复杂的纹理选择算法,例如,哪个视图与每个面更平行,以最大限度地减少拉伸)对网格进行纹理处理。然后,您可以将网格渲染到您希望的任何其他视图中。

【讨论】:

3D 网格是唯一的方法吗?基于图像的渲染和 3D 变形技术怎么样,即不需要完整的 3D 重建。我想在实时场景中进行,因此整个 3D 网格生成可能会非常昂贵。 好吧,您想要“准确”(特别是根据您的重建结果提供准确的遮挡),还是只是“合理”?请注意,严格来说,您不需要完整的网格拓扑,只需要一个局部邻接网格,因为深度图与一个视图垂直(即在该视图中它是 z = f(x,y))。但在实践中,无论如何都会出现一些拓扑问题,因为通常深度图中即使在遮挡物旁边也会有洞。

以上是关于如何使用立体对合成新的相机视图?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何计算两个立体相机的旋转和平移以在 opencv StereoRectify(r,t argument) 中使用

无目标非重叠立体相机校准

单目全向立体相机的标定(一种新的相机形式)

使用立体相机从视差图进行深度重建

如何在 Xamarin 表单中创建半屏相机视图

OpenCV - 立体视觉的倾斜相机和三角测量地标