使用FFT优化2D小波变换

时间:2016-01-02 18:08:14

标签: c# image-processing optimization fft wavelet

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

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

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

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

修改 我已经发现,在我的情况下,我在循环卷积之后,因此滤波器应该填零,以使其长度与输入数据的长度相同。但我对效率的质疑仍然存在。我应该如何使用FFT进行FWT计算才能获益?

编辑2: dsp.stackexchange.com已回答了这个问题。

1 个答案:

答案 0 :(得分:1)

这是一种非常优雅的方式。如果你感兴趣的话,我可以挖掘出我的代码,很久以前就已经开始了(参见这两个出版物for the non-redundant(FWT) case(图3)和for the shift-invariant case)。移位不变的情况可能不是你所追求的,但它使用相同的技巧。它的描述稍微透彻here in Appendix B