谁能解释一下 fftw_plan_dft_2d 和 fftw_plan_dft_1d 之间的区别?
Can anyone explain the difference between fftw_plan_dft_2d and fftw_plan_dft_1d?
两者有什么区别?
我有一个图像矩阵并将其展平为 fftw_complex 连续数组?
我应该选择 fftw_plan_dft_2d 还是 fftw_plan_dft_1d?
我都试过了,但两者的行为完全不同?
我试图阅读文档,但对它们的差异和用法了解不多。
我相信您的问题实际上是关于一般傅里叶变换的。具体来说,一维 FFT 和二维 FFT 有什么区别。
简短的回答是二维 FFT 与以下内容相同:
- 对矩阵中的每一行独立应用一维 FFT。
- 获取第 1 步的结果并对矩阵中的每一列独立应用一维 FFT。
两个 fftw 计划都采用扁平的复数矩阵,但是,fftw_plan_dft_2d 使用 n0 和 n1 大小参数能够正确地将复数数组解释为二维矩阵。
大小为 n 的信号 X 的 1D dft Y 写为:

the separable product of the given 1d transform along each dimension of the array.
因此,2D dft 包括在第一个维度上进行 dft,然后在另一个方向上进行 dft。它写道:

请注意,首先对另一个维度进行 dft 不会改变结果:

的确,总和可以是factored, see also the doc of opencv:

它与整个展平阵列上的一维 dft 不同,后者没有此 属性。基于卷积核(高斯或其他)的 2D 线性图像滤波器依赖于 2D dft 将卷积转换为傅立叶 space 中的逐点乘法。如果图像是二维的,那么变换后的图像也是二维的。请参阅此 course 进行说明。
两者有什么区别? 我有一个图像矩阵并将其展平为 fftw_complex 连续数组? 我应该选择 fftw_plan_dft_2d 还是 fftw_plan_dft_1d?
我都试过了,但两者的行为完全不同?
我试图阅读文档,但对它们的差异和用法了解不多。
我相信您的问题实际上是关于一般傅里叶变换的。具体来说,一维 FFT 和二维 FFT 有什么区别。
简短的回答是二维 FFT 与以下内容相同:
- 对矩阵中的每一行独立应用一维 FFT。
- 获取第 1 步的结果并对矩阵中的每一列独立应用一维 FFT。
两个 fftw 计划都采用扁平的复数矩阵,但是,fftw_plan_dft_2d 使用 n0 和 n1 大小参数能够正确地将复数数组解释为二维矩阵。
大小为 n 的信号 X 的 1D dft Y 写为:
the separable product of the given 1d transform along each dimension of the array.
因此,2D dft 包括在第一个维度上进行 dft,然后在另一个方向上进行 dft。它写道:
请注意,首先对另一个维度进行 dft 不会改变结果:
的确,总和可以是factored, see also the doc of opencv:
它与整个展平阵列上的一维 dft 不同,后者没有此 属性。基于卷积核(高斯或其他)的 2D 线性图像滤波器依赖于 2D dft 将卷积转换为傅立叶 space 中的逐点乘法。如果图像是二维的,那么变换后的图像也是二维的。请参阅此 course 进行说明。