【问题标题】:FFT based image registration (optionally using OpenCV) in cpp?cpp中基于FFT的图像配准(可选使用OpenCV)?
【发布时间】:2013-12-15 03:44:01
【问题描述】:

我正在尝试对齐从手持相机拍摄的两张图像。

起初,我尝试使用基于 SIFT/SURF 特征点的 OpenCV warpPerspective 方法。问题是当图像质量很高(3000x4000)时,特征提取和匹配过程可能会非常慢。我试图在找到特征点之前缩小图像,结果不如以前好。(从findHomography生成的Mat不应该受到缩小图像的影响,对吧?)有时,由于缺乏良好的特征点匹配,结果很奇怪。

搜索了这个话题,似乎解决傅里叶域的问题会加快注册过程。我找到了this question,它把我带到了code here

唯一的问题是代码是用 numpy 用 python 编写的(甚至不使用 OpenCV),这使得使用 OpenCV 重写为 C++ 代码非常困难(在 OpenCV 中,我只能找到 dft 并且没有fftshiftfft 的东西,我对 NumPy 不太熟悉,我也没有勇气简单地忽略缺失的方法)。所以我想知道为什么没有这种使用C++的傅里叶域图像注册实现?

你们能给我一些关于如何实现的建议,或者给我一个已经实现的 C++ 版本的链接吗?或者帮我把python代码转成C++代码?

非常感谢!

【问题讨论】:

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


    【解决方案1】:

    我相当肯定 FFT 方法只能恢复相似变换,即只能恢复 (2d) 旋转、平移和缩放。使用手持相机时,您的结果可能不会那么好。

    这不是您问题的直接答案,但是,作为提高速度的建议,您是否尝试过使用更快的特征检测器和描述符?在 OpenCV 中,SIFT/SURF 是它们用于特征提取/匹配的一些最慢的方法。您可以先尝试测试他们的一些other 方法,它们都运行良好并且比SIFT/SURF 更快。特别是如果您使用他们的基于FLANN 的匹配器。

    过去我不得不使用类似大小的图像来执行此操作,并且使用二进制描述符 OpenCV 显着提高了速度。

    【讨论】:

    • 我同意 - 傅里叶空间中的相关性最适合简单的平移,可以接受旋转,难以缩放并且几乎无用投影。 +1 尝试回答 真正的 问题。
    • 谢谢大卫,我决定试试其他提取器。我想知道在图像配准方面,您最喜欢哪种检测器/提取器组合?
    • 这取决于图像内容,我使用 FAST/FREAK 在从接近相同角度拍摄的图像上取得了很大成功。我也尝试过使用 ORB,它有更多的错误匹配,但非常快并且在异常值移除后执行接近 SIFT。
    • paper on ORB 指出 ORB 在户外照片上的表现更好。也没有返回完美结果的特征匹配器。您必须喜欢在 99% 的情况下对匹配的关键点执行额外的过滤以过滤掉不正确的一次。您可以为此目的使用 RANSAC,它的性能非常好,结果也非常好。
    【解决方案2】:

    如果你只需要换班,你可以使用 OpenCV 的 phasecorrelate

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多