如何使用OpenCV对多个相机图像进行对齐

7
想象一下有人用相机拍摄了一组快照,他会得到多张图像,但由于没有使用三脚架或支架,所以拍摄的图像会略有不同。
我该如何对齐它们,使它们重叠并裁剪掉边缘?
我已经搜索了很多,但大多数解决方案要么是进行3D重建,要么是使用Matlab。
例如:https://github.com/royshil/SfM-Toy-Library 由于我对openCV非常陌生,我更喜欢易于实现的解决方案。
我通过在MSPaint中手动旋转和裁剪图像生成了许多数据集,但包含相应数据集(稍微旋转和平移的图像)的链接也将非常有用。
编辑:我在这里找到了一个解决方案http://www.codeproject.com/Articles/24809/Image-Alignment-Algorithms,它提供了接近旋转和平移向量的近似值。
我该如何做得比这个更好?
1个回答

10

这取决于您所指的“更好”是什么(准确性、速度、低内存要求等)。一个经典的方法是将每个帧#i(其中i>2)与第一帧对齐,步骤如下:

  1. 局部特征检测,例如通过SIFT或SURF (链接)
  2. 描述符提取 (链接)
  3. 描述符匹配 (链接)
  4. 透视变换估计对齐 (链接)
  5. 使用估计的变换将图像#i转换为与图像1匹配 (链接)

谢谢,这非常有帮助。现在我已经让大部分工作正常运行了,但是为了正确对齐它,对于#5,我不是想要反转估计的变换来纠正透视吗?第1帧建立了正确的透视图,而单应矩阵是从第1帧到第2帧的变换。为了使第2帧与第1帧对齐,我们应该在第2帧上应用Inv(M)。再次感谢,如果我有什么误解,请告诉我。 - blueether
1
是的,这完全有可能。实际上这取决于您为warpPerspective使用的标志,但我认为您已经做对了。 - BConic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接