【问题标题】:Optimizing the stereo calibration process on multiple cameras优化多台摄像机的立体校准过程
【发布时间】:2018-04-23 05:02:10
【问题描述】:

背景:

为简单起见,我有 3 个摄像头。每一个都是自己校准的(它的间隙参数已知且足够准确)

他们都拥有几乎相同的观点。我想使用这个由 3 个摄像头组成的系统进行 3D 重建。我已经单独校准了每一对(1 & 2、2 & 3 和 1 & 3)。因此产生了 3 个变换矩阵。 从理论上讲,这3个变换矩阵应该具有以下性质:

T13 = T12 * T23 

或者在其他公式中:

 T31 * T12 * T23 = Identity

但是,实际上,事实并非如此。由于校准错误,结果与相同的矩阵略有偏移。

Error = [T31 * T12 * T23] - [Identity]        Eq.3

问题:

我觉得单独校准每对相机是个坏主意。通过应用某种全局优化,将整个三对融合在一起,试图最小化等式 (3) 的误差,应该会得到更好的结果。

我的问题是:

在此问题上是否有任何已知的先前工作。任何想法如何使用 OpenCV 来实现我的目标,所以我不会重新发明轮子。

【问题讨论】:

  • 也许你可以使用某种或多或少直接用于图像拼接的“捆绑调整”。
  • 如果您解释了您需要的更多详细信息,将会有所帮助。您的问题需要在 SO 答案中粘贴多行代码。 AFAICS 它不能完全在 OpenCV 中完成,因为 OpenCV 没有捆绑调整 API,它甚至没有公开其相机校准例程使用的 LM 优化器。
  • @FrancescoCallari 谢谢。是的,我一直在寻找 OpenCV 中的 LM 优化器之类的东西。这个想法实际上是从砰的一声响起的。我在 OpenCV 中寻找这样的解决方案。看来我必须自己构建它,或者我应该使用 3D 校准对象并从 PCL 获得一些帮助(他们已经支持 LUM)。
  • 对于少数相机,任何通用 LM 实现都可以(参见 Numerical Recipes,或 minpack,甚至 scipy.optimize.least_squares)。使用真正的捆绑器要好得多,例如Ceres,它可以很好地处理相机旋转的参数化,因此您不必在成本函数中重新发明轮子。

标签: opencv camera computer-vision camera-calibration 3d-reconstruction


【解决方案1】:

嗯,当然,过去已经联合校准了许多摄像机的集合(您看过 The Matrix 中的“子弹射击”效果吗?Manex 的团队就是这样做的第一个:https://www.youtube.com/watch?v=uPNBdDNZbYk)

您可以将初始成对校准用作一轮捆绑调整的初始化点。最好使用在所有图像中的多个相机中可见的刚性 3D 对象(不是平面“棋盘”目标,您需要具有实际深度的目标),并使用跨越视野和感兴趣深度的许多图像.如果它是一次性项目,图像匹配和捆绑可以很容易地在具有良好 GUI 的半自动工具中完成。过去,我已经令人满意地使用 Blender (www.blender.org) 来完成这些任务。在线查找有关使用 Blender 进行匹配移动的教程。

【讨论】:

    猜你喜欢
    • 2015-08-01
    • 2020-10-16
    • 2014-07-30
    • 2012-08-13
    • 2015-04-04
    • 2015-05-22
    • 1970-01-01
    • 2018-10-12
    • 2016-04-20
    相关资源
    最近更新 更多