当摄像机参数已知时,OpenCV图像拼接

时间:2014-02-08 13:44:22

标签: c++ opencv computer-vision

我们拍摄的照片是从飞越50%重叠区域的平面拍摄的,并使用OpenCV拼接算法将它们拼接在一起。这适用于我们的版本1.在下一次迭代中,我们想要查看一些额外的内容,我可以使用一些注释。

目前,拼接算法估计相机参数。我们确实有相机参数和飞机上有关摄像机角度,位置(GPS)等的大量信息。我们是否可以从这些信息中获益,而不是让算法根据匹配的特征点估算所有内容? / p>

这些图像是以高分辨率拍摄的,此时算法占用了大量的RAM,这不是一个大问题,因为我们只是在云中旋转大型机器。但我想在下一次迭代中从下采样图像中取出单应性,然后将其应用于大图像。这也将为我们提供更多选项来操作和可视化原始图像上的其他信息,并能够在原始图像和拼接图像之间前后移动。

如果我们问题1是要拆分拼接算法来输入已知信息,是仅仅使用findHomography方法来获取信息,还是有更好的替代方法来创建单应性知道平面位置和角度以及摄像机参数。

我对opencv有了基本的了解,并且对c ++编程很好,所以编写我们自己的定制缝合器不是问题,但理论在这里有点生疏。

2 个答案:

答案 0 :(得分:2)

由于您使用单应性来扭曲图像,我假设您捕获的区域足够小,您不必担心地球曲率效应。另外,我假设您不使用高程模型。

一般来说,您总是希望使用匹配的图像点来收紧(单应性)模型,因为您的最终输出是拼接图像。如果您有RAM和CPU预算,则可以使用最大似然估计器来优化线性模型。

具有先前运动模型(例如,来自GPS + IMU)可以用于初始化特征搜索和匹配。通过对特征视觉运动进行足够好的初始估计,您可以省去昂贵的特征描述符计算和存储,并且可以使用标准化的互相关。

答案 1 :(得分:2)

如果我理解正确,图像是垂直拍摄的并且与已知数量的像素重叠,在这种情况下,计算单应性有点过分:你只是在谈论翻译矩阵,并且使用更强大的算法只能给出你糟糕的条件矩阵。

在2D中,如果H是表示透视变换的广义单应矩阵,

H=[[a1 a2 a3] [a4 a5 a6] [a7 a8 a9]]

如果a9 == 1,子矩阵R和T分别表示旋转和平移。

R= [[a1 a2] [a4 a5]], T=[[a3] [a6]]

[a7 a8]表示每个轴的拉伸。 (所有这些都是近似值,因为当所有效果都存在时,它们会相互影响。)

因此,如果您知道横向位移,则可以创建仅具有a3a6a9=1的3x3矩阵,并将其传递给cv::warpPerspective或{{1 }}

作为匹配正确性的标准,您可以计算像素之间的归一化差异。