我有一个使用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)联系起来的明确方法。有人可以指导我完成这个过程吗?
我感谢任何帮助。
答案 0 :(得分:9)
如果您校准了立体摄像机,则每台摄像机应具有内在的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)。