c++ - 相机参数已知时的 OpenCV 图像拼接

标签 c++ opencv computer-vision

我们从一架飞机飞过一个有 50% 重叠的区域拍摄的照片,并使用 OpenCV 拼接算法将它们拼接在一起。这适用于我们的版本 1。在我们的下一次迭代中,我们想研究一些额外的东西,我可以对此发表一些评论。

目前拼接算法估计相机参数。我们确实有相机参数和大量关于相机角度、位置 (GPS) 等的信息。与让算法根据匹配的特征点估计所有内容相比,我们是否能够从这些信息中受益?

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

如果我们在问题 1 中要拆开拼接算法以放入已知信息,它只是使用 findHomography 方法来获取信息还是有更好的替代方法来创建单应性当我们真正知道平面位置和角度以及相机参数时。

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

最佳答案

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

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

可以使用先验运动模型(例如来自 GPS + IMU)来初始化特征搜索和匹配。通过对特征明显运动的足够好的初始估计,您可以免除昂贵的特征描述符计算和存储,而只需使用归一化互相关。

关于c++ - 相机参数已知时的 OpenCV 图像拼接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21646748/

相关文章:

c++ - OpenCV C++:将白色像素的大块转换为黑色

matlab - AlexNet 层提取了哪些特征?

c++ - 删除结束迭代器是对标准的疏忽还是设计决策?

来自 Maven 的 Java OpenCV

opencv - Asift 和 openCV?

opencv - 了解 opencv 的 warpperspective 和 warpaffine 的最佳方式是什么?

python - 如何在航拍图像中检测白雪皑皑的背景上的黑色湖泊?

c++ - 说 xvalues 具有身份并且是可移动的是正确的吗?

c++ - 为了方便起见,本地指针/引用的性能

c++ - 在 z3 中设置成员关系