我有一个使用 OpenCV 和 Python 校准的立体校准相机系统。我试图用它来计算图像点的 3D 位置。我收集了内在和外在矩阵,以及 E、F、R 和 T 矩阵。我对如何将 2D 图像点三角测量为 3D 对象点感到困惑。我已阅读以下帖子,但我对过程( In a calibrated stereo-vision rig, how does one obtain the "camera matrices" needed for implementing a 3D triangulation algorithm? )感到困惑。有人可以解释如何从 2D 到 3D 吗?通过阅读,我觉得基本矩阵(F)很重要,但我还没有找到一种明确的方法将它与投影矩阵(P)联系起来。有人可以指导我完成这个过程吗?
我很感激我能得到的任何帮助。
最佳答案
如果您校准了立体相机,您应该拥有每个相机的内在函数 K1、K2,以及从第一个相机到第二个相机的旋转 R12 和平移 t12。从这些中,您可以形成相机投影矩阵 P1 和 P2,如下所示:
P1 = K1 * [I3 | 0]
P2 = K2 * [R12 | t12]
这里,I3 是 3x3 单位矩阵,符号 [R | t] 表示水平堆叠 R 和 t。
然后,您可以使用函数
triangulatePoints
( documentation ),它从两个相机矩阵实现稀疏立体三角剖分。如果你想要密集三角测量或深度图估计,有几个函数可以实现。您首先需要使用
stereoRectify
( documentation ) 校正两个图像,然后执行立体匹配,例如使用 StereoBM
( documentation )。