0

我正在做从图像中去除噪声的程序,在其中,我需要计算大量的逐点乘法之和,现在,我通过直接方法来完成,它需要巨大的计算成本:

int ret=0, arr1[n][n].arr2[n][n];
for (int i=0;i<n;i++) for (int j=0;j<n;j++) ret+=arr1[i][j]*arr2[i][j];

有人告诉我,要计算两个数组之间的卷积,我应该这样做( 这里有更多细节):

  1. 计算数组 1 的 DFT(通过 FFT)。
  2. 计算数组 2 的 DFT(通过 FFT)。
  3. 将两个 DFT 按元素相乘。它应该是一个复杂的乘法。
  4. 计算相乘 DFT 的逆 DFT(通过 FFT)。这将是你的卷积结果。

看起来,算法部分或多或少很清楚,但我遇到了一个新问题:

我为这个任务选择了 fftw,但是经过很长时间,通过阅读它的文档,我仍然没有看到任何用于 2D 逆 fft 的函数,它返回的不是 2D 数组,而是类似于直接方法的单个值,而不是整个 2D 数组,我错过了什么?

4

0 回答 0