2014-02-08 41 views
4

我们拍摄的图片是飞机在50%重叠区域上飞行的飞机,并且正在使用OpenCV拼接算法将它们拼接在一起。这对我们的版本1来说工作得很好。在我们的下一个迭代中,我们想看看几个额外的东西,我可以使用一些评论。OpenCV摄像机参数已知的图像

当前拼接算法估计摄像机参数。我们确实有摄像机参数和飞机上提供的关于摄像机角度,位置(GPS)等的大量信息。根据匹配的特征点,我们能够从这些信息中获益吗?

这些图像是以高分辨率拍摄的,算法在这一点上占用了相当数量的RAM,这不是一个大问题,因为我们只是将大型机器放在云中。但我想在下一次迭代中从缩减采样的图像中获取单应性,并稍后将其应用于大图像。这也将给我们更多的选择来操作和可视化原始图像上的其他信息,并且能够在原始图像和拼接图像之间前后移动。

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

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

+0

你在什么分辨率捕捉图像?如果它们足够高,那么你可以对它们进行缩减采样,但我建议你尽可能地避免它(我不是一个缩减采样的狂热粉丝)。您可以使用特征点或校准摄像头进行拼接(我不确定组合是否是可行的解决方案);不过,您可以使用相机参数来加快您的单应性功能。 – scap3y

+0

5000x7400像素(50mb)原始文件。在这个时候,我想知道是否有必要花费时间来获取关于使用相机参数进行任何事情的知识,或者只要功能匹配,匹配功能就没有问题。但感谢您的评论。但是下采样图像应该不会有任何问题。下采样还可以消除我假设的图像中的一些噪声。 –

+0

您的GPS信息足够精确,可以精确调整图像吗? – Micka

回答

2

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

一般而言,由于您的最终输出是拼接图像,因此您总是希望使用匹配的图像点来收紧您的(单应性)模型。如果您拥有RAM和CPU预算,则可以使用最大似然估计器来优化线性模型。具有先前的运动模型(例如来自GPS + IMU)可用于初始化特征搜索和匹配。通过对特征明显运动进行足够好的初始估计,您可以省去昂贵的特征描述符计算和存储,并且可以使用归一化的互相关。

+0

谢谢,这些评论都很好。其结论我现在也可以使用先前的信息来简化搜索功能的区域,并以这种方式加快过程。很高兴知道我总是希望收紧匹配图像点的单应性。此时我们将典型的5-15幅图像合并在一起以覆盖当地区域。但是我也非常感兴趣,如果我们要将所有东西拼接成一个包含地球曲面并且在大面积上呈现大地图的错误图像,那么我也非常感兴趣。 –

2

如果我理解正确,图像是垂直拍摄的并且与已知数量的像素重叠,那么计算单应性有点矫枉过正:您只是在谈论转换矩阵,并且只能使用更强大的算法给你不好的条件矩阵。

在2D中,如果H是表示透视变换的一般化单应性矩阵,

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

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

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

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

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

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

+0

谢谢。这就说得通了。我认为弗朗切斯科有一个观点,即使用形象点来收紧单应性总是一个好主意。 –

+0

的确如此,但要小心使用RANSAC和四点组的单应性估计,因为它可能给出严重条件的矩阵。一种可能性是使用特征对应的单应矩阵计算,提取矩阵T并验证R和拉伸子矩阵不会进入香蕉。 – miguelao

+0

只是为了证实,你是在说要验证RANSAC发现的单应应该从我们从gps和飞行数据获得的已知信息中进行验证? –