我们有从一架飞机上拍摄的照片,上面有50%的重叠,并且正在使用OpenCV拼接算法将它们缝合在一起。在我们的下一次迭代中,我们想了解一些额外的事情,我需要一些评论。
目前,拼接算法对摄像机参数进行估计。我们确实有相机参数和从飞机上获得的关于摄像机角度、位置(GPS)等的大量信息。相比于让算法根据匹配的特征点来估计一切,我们能从这些信息中获益吗?
这些图像是以高分辨率拍摄的,算法在这一点上占用了相当多的内存,这不是一个大问题,因为我们只是在云中旋转大型机器。但是我想在我们的下一次迭代中从下采样的图像中提取出同形图,然后将其应用于大的图像。这也将给我们更多的选择,以操作和可视化其他信息的原始图像,并能够返回和前进之间的原始图像和缝合图像。
如果我们在问题1中要分解拼接算法来输入已知的信息,那么它只是使用findHomography
方法来获取信息,还是当我们知道平面位置、角度和摄像机参数时,是否有更好的选择来创建同调。
我对opencv有了一个基本的理解,并且对c++编程很好,所以编写我们自己的定制缝纫机并不是一个问题,但是这里的理论有点生疏。
发布于 2014-02-08 19:18:22
因为你在使用同音图来扭曲你的图像,我假设你所捕捉的区域足够小,所以你不必担心地球曲率效应。另外,我假设你不使用高程模型。
一般来说,您总是希望使用匹配的图像点来收紧您的(同形)模型,因为您的最终输出是一个拼接的图像。如果您有RAM和CPU预算,您可以使用最大似然估计来改进您的线性模型。
具有先验运动模型(例如来自GPS + IMU)可用于初始化特征搜索和匹配。通过对特征表观运动进行足够好的初始估计,您可以省去昂贵的特征描述符计算和存储,而只需进行标准化的互相关。
发布于 2014-02-09 02:53:04
如果我理解正确的话,图像是由已知数量的像素垂直拍摄和重叠的,在这种情况下,计算同形有点过火:你只是在谈论一个翻译矩阵,而使用更强大的算法只能给你带来坏的条件矩阵。
在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]
表示每个轴的拉伸。(所有这些都有点近似,因为当所有的效果都出现时,它们就会相互影响)。
所以,如果你知道横向位移,你可以创建一个3x3矩阵,其中只有a3
,a6
和a9=1
,并把它传递给cv::warpPerspective
或cv::warpAffine
。
作为匹配正确性的标准,您可以,f.e.计算像素之间的归一化差异。
https://stackoverflow.com/questions/21646748
复制相似问题