从两个 2D 点重建一个 3D 点?

Posted

技术标签:

【中文标题】从两个 2D 点重建一个 3D 点?【英文标题】:Reconstruction a 3D point from two 2D points? 【发布时间】:2012-05-24 20:16:22 【问题描述】:

OpenCV 包含大量对立体相机 3D 重建的支持。就我而言,我有两个相机,我想知道某个点的 3D 坐标。

我有什么:

    两幅图像上点的像素坐标 已知的内部和外部相机参数

我想得到什么: 在 3D 中坐标此点

【问题讨论】:

【参考方案1】:

我在另一个post 中回答了同样的问题。

如果你有外部参数,那么你就有了相机姿势。使用相机姿势和 2D 点,您可以预测 3D 点(如果您的 2D 点和外在参数正确,则每个相机的结果应该相同)。您只需要将姿势转换为单应性。我在我链接的帖子中解释了它。

祝你好运!

【讨论】:

据我所知,您的回答处理的情况与此不同。【参考方案2】:

我不知道 opencv 是否有这个结构。但是我知道您可以使用正弦定律的角度-侧-角度来构建与相机水平平行的线性距离,使用点->相机->其他相机的内角作为参考点。

然后,一旦获得距离,您就可以使用相同的构造计算垂直定位:角度是从死点计算到该点相对于任一相机的上方或下方多远,到对象的距离在第一步中找到,您可以使用 90 度作为该假想点(与相机水平的物体上方)与物体之间的角度。

【讨论】:

【参考方案3】:

如果您没有从两个视图进行三角剖分的经验,您应该阅读Hartley and Zisserman's book 的书。本书描述了一种线性三角测量方法,该方法非常容易实现,具有二维点对应、相机位姿和相机校准。

此方法的示例代码为here。它是基于上面提到的书。

然而,必须满足一些非常重要的条件。首先,测量点的对应关系必须相对于极线约束x*E*x' = 0 是正确的。其次,光线之间的夹角应该大于几度,例如2度。

【讨论】:

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

界面重建——Marching cubes算法

使用opencv从深度重建位置

根据相互距离对 2D/3D 点数组进行排序的启发式方法

三维环境搭建丨每周一点 canvas 动画

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

重建我的3D世界代码开源连载-1