从多个 2D 点重建 3D 点?

Posted

技术标签:

【中文标题】从多个 2D 点重建 3D 点?【英文标题】:Reconstruction a 3D point from multiple 2D points? 【发布时间】:2012-02-09 20:17:14 【问题描述】:

OpenCV 包含大量对立体相机 3D 重建的支持。在我的例子中,我有 六个 校准的相机(内部和外部),我想获取常见的 2D 点(例如,测试球体)并获得相应的 3D 位置。关于如何做到这一点的任何想法?

我有什么: 1) 多台相机的标定参数 2) 测试球体的二维位置(在每个图像平面上)

我想得到什么: 1) 测试球体对应的3D点

【问题讨论】:

答案在对极几何领域,都可以在开创性书籍中找到:计算机视觉中的多视图几何robots.ox.ac.uk/~vgg/hzbook - 你甚至不应该考虑冒险进入 CV 世界至少读过那本书一次。 感谢 Xander 的提示。很久以前看过这本书,但后来忘记了。一个很好的资源。 如果图像对之间存在 2D 点对应关系,请查看 Bundle Adjustment 方法 【参考方案1】:

您的校准参数将为每个相机的每个 2D 点提供一条光线。如果您已经确定了哪些光线对应于您的测试球体,您想要为您的目标点做一个least squares 拟合。 (虽然该链接使用最小二乘法进行线性回归,但您可以使用相同的方法找到 3D 点,使所有 2D 点的平方误差之和最小。)

【讨论】:

【参考方案2】:

你知道相机之间的位置关系吗?

然后,每个图像都会为您提供水平和垂直角度 - 来自相机矩阵和极线模型。这为每个相机提供了一条进入空间的直线 - 只需求解所有这些相交的点。

【讨论】:

以上是关于从多个 2D 点重建 3D 点?的主要内容,如果未能解决你的问题,请参考以下文章

界面重建——Marching cubes算法

从多个 2D 点构造线并测量这些线之间的距离

从多个视图进行 3D 重建

使用opencv从深度重建位置

投影3D网格的2D轮廓算法

3D,点云重建