二维离散傅立叶变换的复杂性

时间:2010-12-05 21:37:33

标签: c# complexity-theory fft

我对2D傅里叶变换有疑问。我目前正在理解这背后的数学,并且有一些我不理解的东西。就我而言,DFT的复杂度为O(N*N)。如果我查看以下算法:

alt text

我不明白它是如何运作的。我们是否要对转换后的图像中的每个像素进行此计算?

示例

  1. 我们有2 * 2的图像。
  2. 对于此图片中的每个像素,我们将进行DFT F(x,y)
  3. 我将创建一个新图像,每个像素是相应复数值的大小
  4. 这是它的工作原理还是我错过了什么?因为我现在看到它的方式,它的复杂性为O(N^4)

1 个答案:

答案 0 :(得分:3)

等式意味着“在像素(u,v)处获得F的值,评估(右侧的公式)。”因此,要获得整个变换后的图像,需要对变换后的图像中的每个像素进行评估。

要计算DFT,使用公式,您需要为每个输出值的每个输入值执行O(1)计算。 (对于某些类型的数据,还有其他更快的算法。)在2D DFT情况下,算法具有复杂度O((M * N)^ 2),因为输入像素的数量是M * N而且数量是输出像素也是M * N.

编辑:通过在单独的步骤中变换行和列,可以在O(NM ^ 2 + MN ^ 2)中计算2D矩阵DFT。算法在这里:http://fourier.eng.hmc.edu/e101/lectures/Image_Processing/node6.html