3D重建的步骤?

Steps for 3D Reconstruction?

这个问题已经以不同的方式被问过很多次,许多人以不同的方式解决这个问题。这就是为什么我不确定我的方法,如果有人能告诉我我做的事情是否正确,那就太好了。

我遵循的步骤是-

  1. 设置立体相机对。
  2. 分别校准两个摄像头以获得它们的摄像头 矩阵,失真系数,使用 calibrateCamera
  3. 然后我们计算R、T、E、F 使用 stereoCalibrate
  4. 使用 stereoRectify
  5. 计算 R1、R2、P1、P2 和 Q
  6. 因为我想找到我的特定点的 3D 坐标 场景,我在两个图像中提取该点的坐标, 然后我使用 triangulatePoints 来获取 3D 点 齐次坐标.

我遵循的步骤是否正确?我一直在使用 OpenCV 文档时遇到问题,所以我花了一些时间来制定步骤,仔细阅读文档。人们以不同的方式解决了 OpenCV 中的这个问题,有些人甚至使用 OpenCV 文档中的一些辅助函数构建了基本矩阵和基本矩阵,但我认为 stereoCalibratestereoRectify 使用这些辅助函数他们自己。

这些步骤在理论上是正确的。使用它们不会获得任何好的结果。

我的建议是买一个现成的立体相机(想到 ZED 或 RealSense),它已经有了你需要的一切,所以你不必校准或计算,只需使用他们的库并获得一些结果。这不会是完美的,但它会给你一个好的开始。

一旦你对立体相机玩够了,你就会更好地理解问题最多的地方,以及如何解决它们。

正如你所说,每个人都有自己的方式。我尝试的方法是,前 4 个步骤是相同的​​,但是为了计算 3d 点,我使用了 OpenCV 中存在的立体匹配算法。 StereoBM、StereoSGBM 等算法在 OpenCV 中实现,它提供了易于使用的 APIs。

因此,一旦我们从立体匹配函数中获得了视差图,我们就可以使用 reprojectImageTo3D API 获得 3d 坐标。它需要视差图和Q矩阵作为输入。