1

我正在尝试使用 OpenCV 示例文件从立体配置执行 3D 表面重建。我从 2 个网络摄像头创建了一个立体摄像头。我已经使用 stereo_calib.cpp ( https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/stereo_calib.cpp?rev=4086 ) 获得了校准参数,并使用 stereo_match 生成了点云.cpp(https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/stereo_match.cpp?rev=2614)。使用 MeshLab 打开的结果点云与原始场景完全不同(http://img707.imageshack.us/i/snapshot01u.png/)。

我在这里想念什么?

重建步骤:

  1. stereo_calib.cpp(在图像所在的同一文件夹中,没有参数,因此假定为默认值)

  2. stereo_match left01.jpg right01.jpg -i intrinsics.yml -e extrinsics.yml -p cloud.asc

  3. 在 MeshLab 上导入 cloud.asc

谢谢

4

1 回答 1

1

您发布的描述和图片并没有提供很多信息。但根据我的 3D 重建经验,外在或内在参数似乎不正确。

因此,您的校准出了点问题。您必须获得两个相机的内在校准和相机之间的外在校准。

  1. 外部参数表示相机之间的相对位置和方向。因此,如果它们不正确,任何事情都可能发生,大多数情况下点云都极度退化。
  2. 内在参数描述了 3D 点如何投影到 2D 图像上。因此,如果您的内在参数不正确,则您的点云会通过线性变换进行变形(假设分别存在可忽略的径向/切向失真或更高阶的失真)。

有很多关于 3D 重建和立体主题的优秀文献。其中最重要的一本是Richard Hartley 和 Andrew Zisserman的《多视图几何》一书。

于 2013-03-28T20:41:39.233 回答