【发布时间】:2012-05-24 20:16:22
【问题描述】:
OpenCV 包含大量对立体相机 3D 重建的支持。就我而言,我有两个相机,我想知道某个点的 3D 坐标。
我有什么:
- 两幅图像上点的像素坐标
- 已知的内部和外部相机参数
我想得到什么: 在 3D 中坐标此点
【问题讨论】:
OpenCV 包含大量对立体相机 3D 重建的支持。就我而言,我有两个相机,我想知道某个点的 3D 坐标。
我有什么:
我想得到什么: 在 3D 中坐标此点
【问题讨论】:
我在另一个post 中回答了同样的问题。
如果你有外部参数,那么你就有了相机姿势。使用相机姿势和 2D 点,您可以预测 3D 点(如果您的 2D 点和外在参数正确,则每个相机的结果应该相同)。您只需要将姿势转换为单应性。我在我链接的帖子中解释了它。
祝你好运!
【讨论】:
我不知道 opencv 是否有这个结构。但是我知道您可以使用正弦定律的角度-侧-角度来构建与相机水平平行的线性距离,使用点->相机->其他相机的内角作为参考点。
然后,一旦获得距离,您就可以使用相同的构造计算垂直定位:角度是从死点计算到该点相对于任一相机的上方或下方多远,到对象的距离在第一步中找到,您可以使用 90 度作为该假想点(与相机水平的物体上方)与物体之间的角度。
【讨论】:
如果您没有从两个视图进行三角剖分的经验,您应该阅读Hartley and Zisserman's book 的书。本书描述了一种线性三角测量方法,该方法非常容易实现,具有二维点对应、相机位姿和相机校准。
此方法的示例代码为here。它是基于上面提到的书。
然而,必须满足一些非常重要的条件。首先,测量点的对应关系必须相对于极线约束x*E*x' = 0 是正确的。其次,光线之间的夹角应该大于几度,例如2度。
【讨论】: