当摄影机参数已知时,OpenCV图像静置

OpenCV Image stiching when camera parameters are known

本文关键字:OpenCV 图像 摄影机 参数      更新时间:2023-10-16

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

目前,拼接算法估计相机参数。我们确实有相机参数和许多可从飞机上获得的关于相机角度、位置(GPS)等的信息。相比之下,我们是否能够从这些信息中获益,而只是让算法根据匹配的特征点来估计所有信息?

这些图像是以高分辨率拍摄的,此时算法占用了相当多的RAM,这不是什么大问题,因为我们只是在云中旋转大型机器。但我想在我们的下一次迭代中,从下采样的图像中获得单应性,并稍后将其应用于大图像。这也将为我们提供更多的选项来操纵和可视化原始图像上的其他信息,并能够在原始图像和缝合图像之间来回切换。

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

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

由于您使用单形图来扭曲图像,我认为您捕获的区域足够小,不必担心地球曲率的影响。此外,我假设您不使用立面模型。

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

具有先前的运动模型(例如,来自GPS+IMU)可以用于初始化特征搜索和匹配。有了对特征表观运动足够好的初始估计,就可以省去昂贵的特征描述符计算和存储,只需进行归一化互相关。

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

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

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

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

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

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

因此,如果你知道横向位移,你可以创建一个只有a3a6a9=1的3x3矩阵,并将其传递给cv::warpPerspectivecv::warpAffine

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