【问题标题】:Complexity of a 2d Discrete Fourier Transform二维离散傅里叶变换的复杂性
【发布时间】:2010-12-05 21:37:32
【问题描述】:

我有一个关于二维傅立叶变换的问题。我目前正在理解这背后的数学,有些东西我不明白。就我而言,DFT 的复杂度为O(N*N)。如果我看下面的算法:

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

示例

  1. 我们有一个 2*2 的图像。
  2. 对于此图像中的每个像素,我们将进行 DFT F(x,y)
  3. 我会新建一张图片,每个像素都是对应的复数值的大小

这是它的工作原理还是我错过了什么?因为在我现在看来,它的复杂度是O(N^4)

【问题讨论】:

  • 和C#的相关性?
  • 我认为添加这个可能会很好,因为我不知道函数式编程语言是否会以不同的方式处理这个计算。

标签: c# complexity-theory fft


【解决方案1】:

方程的意思是“获取像素 (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

【讨论】:

  • 啊,我明白了,谢谢!然而,在我开始编程之前,我还有一个简短的问题。您现在可能知道 (ux/M+vy/N) 到底是什么意思吗?
  • 根据 (fourier.eng.hmc.edu/e101/lectures/Image_Processing/node6.html) 二维 DFT 的复杂度是 O(N^3)
  • @RobS 我在描述给定 DFT 算法的复杂性。您链接的算法确实渐近更快。我将其添加到答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
相关资源
最近更新 更多