【问题标题】:Optimized 2D wavelet transform using FFT使用 FFT 优化二维小波变换
【发布时间】:2016-04-06 18:14:51
【问题描述】:

我目前的目标是针对 2D 信号(图像)优化我的快速小波变换 (FWT) 算法。它的工作原理如下:

  • 一维 FWT 的一次迭代使用选定的一维滤波器(长度从 2 到大约 60)对一维输入数据进行卷积,并对结果进行下采样
  • 2D 变换算法对输入图像的所有行和所有列执行 1D FWT
  • 如果需要更多级别,它会进行迭代

变换是演示小波及其使用的交互式应用程序的一部分。它的工作速度相当快,通常实时响应用户的交互。但是如果过滤器很长,就会出现一些性能问题。我读过使用快速傅立叶变换 (FFT) 而不是卷积对于足够长的滤波器是有效的。

我已经实现了 1D FFT,但问题是如何使用它来实现最大效率?我是否应该在单个 1D FWT 之前转换输入数据,然后执行卷积(对应于频域中的乘法),然后使用逆 FFT 将数据转换回来? 另外,乘法是如何完成的?例如,长度为 256 的输入数据和长度为 4 的滤波器都使用 FFT 进行转换,然后只有输入数据的前 4 个值相乘,然后再将数据转换回来? 我在详细信息,非常感谢您对此的任何见解。

编辑: 我发现在我的情况下,我在循环卷积之后,因此过滤器应该是零填充的,以便它的长度与输入数据的长度相同。但是我关于效率的问题仍然存在。我应该如何使用 FFT 进行 FWT 计算才能发挥作用?

编辑 2: 此问题已在 dsp.stackexchange.com 上回答。

【问题讨论】:

    标签: c# image-processing optimization fft wavelet


    【解决方案1】:

    有一种非常优雅的方法可以做到这一点。如果您有兴趣,我可以挖掘我的代码,它是很久以前制作的(参见这两个出版物for the non-redundant(FWT) case(图 3)和for the shift-invariant case)。移位不变的情况可能不是您所追求的,但它使用相同的技巧。它的描述稍微彻底here in Appendix B

    【讨论】:

    • 感谢您的回答,我会检查那些文章。但是,我已经使用 FFT 实现了优化的 FWT 算法。在某些情况下,它提供的计算加速效果很好,但总体而言,结果并不足以令人满意地使用它(在我的情况下)。将来我可能会尝试用提升方案代替 FWT,但就目前而言,我通过利用 GPU (CUDA) 上运行的并行计算使我正在开发的应用程序可用。
    • 您在 DSP 邮件列表中引用的方法(在频域中进行卷积)和时域中的其余部分由 Rioul 和 Duhamel 描述。将所有额外的 FFT 和 iFFT 作为子采样进行有点可惜,其余的可以在频率域中轻松完成 - 但您会在论文中看到这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 2012-08-25
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2021-07-12
    相关资源
    最近更新 更多