从两个 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 点?的主要内容,如果未能解决你的问题,请参考以下文章