OpenCV - 对齐图像堆栈 - 不同的摄像头

时间:2018-03-20 16:18:45

标签: opencv image-processing

enter image description here

我们将这个相机阵列围绕一个人(红点)排列成弧形。想想黑客帝国 - 每个相机同时发射,然后我们从输出中创建一个动画GIF。问题是几乎不可能完全对齐摄像机,所以我在OpenCV中寻找一种更好地对齐图像并使其更平滑的方法。

寻找一般步骤。我不确定我会这样做的顺序。如果我从图像1开始并且匹配2,则2比起始时的距离为3。所以匹配3到2将会有更多变化......并且错误会传播。我已经看到类似的对齐完成了。任何帮助非常感谢。

2 个答案:

答案 0 :(得分:2)

这是一个想法。如何快速,简单地进行校准"通过使用单个参考点来成像系统?

关于这一点最好的事情是你可以很快地尝试一下,即使结果对你来说太糟糕,它们也可以让你更深入地了解这个问题。但糟糕的是,它可能还不够好,因为很难想到任何事情,而不是先进的事情。比这个。以下是描述:

  • 从场景中删除对象
  • 放置一个小物体(让它称之为"点")定位,粗略对应于您将要记录的物体的质心(红色圆圈表示的区域中心) )。
  • 使用每个摄像头录制单个图像
  • 使用一些简单的算法查找每个图像上点的位置
  • 计算每个图像上从点位置到图像中心的距离
  • 按(-x,-y)移动图像,其中(x,y)是上述距离;之后,点应位于每个图像的中心。

录制实际物体时,请使用这些预先计算的距离来移动所有图像。翻译图像后,它们将大致对齐。但是既然你拍摄的是一个三维且尺寸相当大的物体,我不确定对准是否会非常有说服力......我想知道你实际上会得到什么结果。

答案 1 :(得分: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

如果您感兴趣的话,张引用的论文给出了对应的姿势估计数学的一个很好的描述。