如何通过立体三角测量从2D图像点计算3D物体点?
我有一个用OpenCV和Python校准的立体相机系统。我想用它来计算图像点的3D位置。我已经收集了内参矩阵和外参矩阵,还有E、F、R和T矩阵。但我对如何将2D图像点三角化为3D物体点感到困惑。我看过以下的帖子,但对这个过程还是不太明白(在一个经过校准的立体视觉系统中,如何获得实施3D三角测量算法所需的“相机矩阵”?)。有人能解释一下如何从2D转换到3D吗?我在阅读过程中感觉基础矩阵(F)很重要,但我还没有找到一个清晰的方法将它与投影矩阵(P)联系起来。有人能带我一步步走过这个过程吗?
我非常感谢任何帮助。
1 个回答
15
如果你已经对你的立体相机进行了校准,那么你应该有每个相机的内参 K1 和 K2,以及从第一个相机到第二个相机的旋转矩阵 R12 和位移 t12。根据这些信息,你可以形成相机的投影矩阵 P1 和 P2,具体如下:
P1 = K1 * [I3 | 0]
P2 = K2 * [R12 | t12]
在这里,I3 是一个 3x3 的单位矩阵,而 [R | t] 的表示方式是把 R 和 t 水平拼接在一起。
接下来,你可以使用 triangulatePoints
这个函数(文档链接),它可以根据这两个相机的矩阵来实现稀疏的立体三角测量。
如果你想要进行更精细的三角测量或者深度图估计,有几个函数可以做到这一点。你首先需要使用 stereoRectify
(文档链接)来校正这两张图片,然后再进行立体匹配,比如使用 StereoBM
(文档链接)。