【问题标题】:stitching aerial images拼接航拍图像
【发布时间】:2011-05-16 09:25:13
【问题描述】:

我正在尝试将 2 个航拍图像拼接在一起,重叠很少,可能

这是我的方法:

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() 来获取两个图像之间的单应性。然后我使用 homography 在我的一张图像上调用了warpPerspective()

该方法的问题是转换后的图像全部失真。而且它似乎只改变了图像的某个部分。我不知道为什么它没有改变整个图像。

谁能给我一些关于我应该如何解决这个问题的建议?
谢谢

【问题讨论】:

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 在你提到之后,我在几对重叠区域较大的图像上进行了尝试,结果非常好。我想这将不得不做,直到我能找到一种方法来处理具有小重叠区域的图像。谢谢
  • 我有一段时间没有使用向量了,所以我对你所说的某个阈值有点困惑。既然我们要将归一化的点积与阈值进行比较,那么在这种情况下什么阈值应该是好的?我知道归一化的点积小于或等于 1,那么当阈值像 0.5 时这意味着什么?谢谢
  • 通过将两个归一化向量相乘,您可以得到这些向量之间夹角的余弦值。也许维基百科页面将有助于将其可视化:en.wikipedia.org/wiki/Dot_product。因此,您可能会说小于 0.7(例如)的所有值都是异常值。
【解决方案2】:

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

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

【讨论】:

  • 我现在正在使用 SURF 描述符和检测器。我远离 SIFT,因为它比 SURF 慢得多,尽管它给出了更好的结果。我的项目最初是拼接数百张图像来创建地图,所以我使用了 SURF,它给出了不错的结果,并且比 SIFT 快得多。
  • 在这种情况下,请尝试调整检测器以获得点的密集采样。
【解决方案3】:

要使用 Homography 拼接图像,最重要的是要在两个图像中找到对应点。对应点中的异常值越小,生成的单应性越好。 使用诸如 RANSAC 之类的稳健技术以及 OpenCV 的 FindHomography() 函数(使用 CV_RANSAC 作为选项)仍然会生成合理的单应性,前提是内点的百分比大于异常值的百分比。还要确保传递给 FindHomography 函数的对应点中至少有 4 个内点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多