拼接航拍图像

Hie*_*ien 5 c++ opencv image image-processing image-stitching

我试图缝合2个航拍图像和很少的重叠,可能<500 px的重叠.这些图像的分辨率为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
Run Code Online (Sandbox Code Playgroud)

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

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

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

bjo*_*rnz 3

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

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

编辑:在您在问题评论中发布的结果中,我的印象是匹配工作相当稳定。这意味着您也应该能够通过该示例获得良好的结果。由于您似乎主要需要处理翻译,因此您可以尝试使用以下草图算法过滤掉异常值:

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