【问题标题】:OpenCV - align stack of images - different camerasOpenCV - 对齐图像堆栈 - 不同的相机
【发布时间】:2018-03-20 16:18:45
【问题描述】:

我们将这个摄像头阵列排列成围绕人的弧线(红点)。 Think The Matrix - 每个相机同时触发,然后我们从输出中创建一个动画 gif。问题是几乎不可能精确对齐相机,所以我正在寻找一种在 OpenCV 中更好地对齐图像并使其更平滑的方法。

寻找一般步骤。我不确定我会这样做的顺序。如果我从图像 1 开始并将 2 匹配到它,那么 2 比开始时距离 3 更远。因此,匹配 3 到 2 会带来更多变化......并且错误会传播。我已经看到了类似的对齐方式。非常感谢任何帮助。

【问题讨论】:

  • 是的,错误传播。你应该从中间开始,这样你传播的最大距离是最小的。
  • 您也可以采用所有这些逐步位移,并为它们拟合一个平滑的形状。然后从位移中减去形状。这将使您在本地对齐图像,但没有大范围的位移。

标签: opencv image-processing


【解决方案1】:

这是一个想法。使用单个参考点对成像系统进行快速且非常简单的“校准”怎么样?

最好的一点是您可以很快地尝试一下,即使结果对您来说太糟糕了,它们也可以让您更深入地了解问题。但不好的是它可能还不够好,因为很难想到比这更“不先进”的东西。这是描述:

  • 从场景中移除对象
  • 放置一个小物体(我们称之为“点”),使其大致对应于您要记录的物体的质心(红色圆圈表示的区域中心)。
  • 用每台摄像机记录一张图像
  • 使用一些简单的算法来找到每个图像上点的位置
  • 计算每个图像上从点位置到图像中心的距离
  • 通过 (-x, -y) 移动图像,其中 (x, y) 是上述距离;之后,该点应位于每个图像的中心。

在记录实际对象时,使用这些预先计算的距离来移动所有图像。翻译图像后,它们将大致对齐。但是由于您正在拍摄一个具有相当大尺寸的三维物体,因此我不确定对齐是否会非常令人信服……我想知道您实际上会得到什么结果。

【讨论】:

    【解决方案2】:

    如果我正确理解该应用程序,您应该能够使用单应性获得阵列中每个相机的相对位姿:

    https://docs.opencv.org/3.4.0/d9/dab/tutorial_homography.html

    从这里开始,下一步是通过估计每个摄像机的实际位置与其在阵列中的“理想”位置之间的变换来纠正对齐问题。这些理想位置可以相对于单个相机或相对于阵列的焦点来计算(这可能有助于简化计算)。对于每个图像,应用此校正变换将导致图像“看起来”是从“理想”位置拍摄的。

    请注意,您可能需要估计 3-4 个阵列“部分”中的相对相机位姿,因为看起来您有一个完整的 180 度阵列(例如,一次估计 4-5 个相机的单应性)。只要您在部分之间有一些重叠,它就应该可以解决。

    我在这类事情上的大部分经验来自使用 MATLAB 的立体相机校准器应用程序和相关功能。他们的帮助页面很好地概述了如何开始估计相机姿势。 OpenCV 具有类似的功能。

    https://www.mathworks.com/help/vision/ug/stereo-camera-calibrator-app.html

    如果您有兴趣,Zhang 引用的论文很好地描述了从对应关系中估计姿势的数学。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 2014-03-11
      相关资源
      最近更新 更多