【问题标题】:Choosing Real vs Complex 2D FFTs using apple Accelerate framework使用 Apple Accelerate 框架选择实数和复数 2D FFT
【发布时间】:2012-12-15 03:56:53
【问题描述】:

谁能建议使用正确的 FFT(实数或复数)?我看过here,但仍有疑问。

我想做图像关联来识别子图像在主图像中的位置。我了解 FFT 和 iFFT 的基础知识。

计划:

  1. 对主映像执行 FFT。 512x512
  2. 对子图像进行复共轭。
  3. 对子图像执行 FFT。 30x30,但用零填充到 512x512
  4. 将两个结果矩阵相乘
  5. 对结果执行 iFFT
  6. 即使结果应该(大部分)是实数,也要取结果矩阵的大小
  7. 寻找对应于最大相关性的最大值。

我无法获得预期的结果。

如果我使用真正的 2d fft (vDSP_fft2dzrip),结果是压缩格式,这使得很难使用 vDSP_zvmul 乘以两个结果矩阵。

如果我使用复数 fft (vDSP_fft2dzip),我根本无法获得任何相关性。

苹果示例和大多数音频示例对正向 FFT 的结果没有任何作用,除了逆向。

谁能帮助我开始使用图像关联?第一个问题...我可以使用复杂的 FFT 并避免打包格式吗?

【问题讨论】:

    标签: iphone fft


    【解决方案1】:

    实数和复数 FFT 之间的唯一区别在于,实数 FFT 可以通过使用将 2^n 实数 FFT 转换为 2^(n-1) 复数 FFT 的巧妙打包方案稍微更有效。两种情况下的结果应该相同。因此,如果我是您,为了简单起见,我会坚持使用复杂的 FFT,至少在您一切正常之前。

    你也看过vImageConvolve_ARGB8888吗?它似乎可以做你想做的事,而且省力:)

    【讨论】:

    • 我试图在不确定的环境中识别街道标志,当我尝试 vImageConvolve 时,图像的白色区域使目标图像过载。我不确定如何对卷积进行归一化,因此决定尝试频域方法。
    • vImageConvolve 函数肯定会使用频域实现,这是对非平凡图像实现该算法的唯一实用方法。也许您可以尝试浮动变体,或者先缩放图像?
    • vImageConvolve 的文档说它正在做 Kernel(x,y) * Pixel(x,y) / M x N 的总和。我相信它在空间模式下进行卷积.它将目标滑过大图像并计算每个点的平均值。白色区域覆盖和细节区域。我确实在两张图像上都尝试了 Sobel 边缘检测,但树的边缘太多,它也不起作用。
    • 无论算法是在空间域还是频域执行,结果都会几乎完全一样。唯一的区别是到达那里所需的时间。
    • 回答了原来的问题。如果您不担心速度,使用“真正的”FFT 没有任何优势。
    猜你喜欢
    • 2011-03-24
    • 2013-09-26
    • 1970-01-01
    • 2011-09-15
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多