拼接航拍图像

时间:2011-05-16 09:25:13

标签: c++ image image-processing opencv image-stitching

我试图将2个航拍图像拼接在一起,重叠很少,可能是500磅的重叠。这些图像的分辨率为3600x2100。我正在使用OpenCV库来完成这项任务。

这是我的方法:

1. Find feature points and match points between the two images.
2. Find homography between two images
3. Warp one of the images using the homgraphy
4. Stitch the two images

现在我正试图让这个与两个图像一起工作。我遇到了第3步和第2步的问题。我使用OpenCV库中的findHomography()来获取两个图像之间的单应性。然后我使用同形图在我的一张图像上调用了warpPerspective()

该方法的问题在于变换后的图像全部失真。它似乎只改变了图像的某个部分。我不知道为什么它不会改变整个图像。

有人可以就如何解决这个问题给我一些建议吗?
谢谢

3 个答案:

答案 0 :(得分:3)

在您发布的结果中,我可以看到您至少有一个关键点不匹配。如果你使用findHomography(src, dst, 0),它会弄乱你的单应性。您应该使用findHomography(src, dst, CV_RANSAC)代替。

您也可以尝试使用warpAffine代替warpPerspective

修改:在您对问题的评论中发布的结果中,我的印象是匹配效果非常稳定。这意味着您应该能够通过示例获得良好的结果。由于您似乎必须处理翻译,您可以尝试使用以下草图算法过滤掉异常值:

  1. 计算平均(或中位数)运动矢量x_avg
  2. 计算标准化点积<x_avg, x_match>
  3. 如果点积小于阈值
  4. ,则丢弃x_match

答案 1 :(得分:1)

要使其适用于重叠较小的图像,您必须查看检测器,描述符和匹配项。您没有指定使用哪些描述符,但我建议使用SIFT或SURF描述符和相应的检测器。您还应该设置检测器参数以进行密集采样(即尝试检测更多功能)。

您可以参考这个稍微相关的答案:OpenCV - Image Stitching

答案 2 :(得分:0)

要使用Homography缝合图像,应该注意的最重要的事情是在两个图像中找到对应点。对应点中的异常值越小,生成的单应性越好。 使用RANSAC等强大技术以及OpenCV的FindHomography()函数(使用CV_RANSAC作为选项)仍将产生合理的单应性,前提是异常值的百分比大于异常值的百分比。还要确保传递给FindHomography函数的对应点中至少有4个内点。