二维 FFTW 帮助

发布于 2024-10-22 04:26:53 字数 503 浏览 2 评论 0原文

我目前正在尝试通过 fftw_plan_dft_2d

为了使用这个函数,我将图像数据线性化到一个 in 数组中,并调用上面提到的函数(下面详细介绍)。

ftw_plan fftw_plan_dft_2d(int n0, int n1,
                            fftw_complex *in, fftw_complex *out,
                            int sign, unsigned flags);

func 修改一个复杂的数组 out,其大小等于原始图像中的像素数。

您知道这是否是计算图像 2D FFT 的正确方法吗?如果是的话,out里面的数据代表什么? IE 数组中的高频值和低频值在哪里?

谢谢, DJ22

I'm currently trying to compute the fft of an image via fftw_plan_dft_2d.

To use this function, I'm linearizing the image data into an in array and calling the function mentioned above (and detailed below)

ftw_plan fftw_plan_dft_2d(int n0, int n1,
                            fftw_complex *in, fftw_complex *out,
                            int sign, unsigned flags);

The func modifies a complex array, out, with a size equal to the number of pixels in the original image.

Do you know if this is the proper way of computing the 2D FFT of an image? If so, what does the data within out represent? IE Where are the high and low frequency values in the array?

Thanks,
djs22

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹿! 2024-10-29 04:26:54

2D FFT 相当于在一次传递中对图像的每一行应用 1D FFT,然后对第一遍输出的所有列应用 1D FFT。

2D FFT 的输出就像 1D FFT 的输出一样,只不过 x、y 维度上有复数幅值,而不是单一维度。正如预期的那样,空间频率随着 x 和 y 索引的增加而增加。

FFTW 手册中有一节(此处)涵盖了实数到复数 2D FFT 输出数据的组织(假设您正在使用该数据)。

A 2D FFT is equivalent to applying a 1D FFT to each row of the image in one pass, followed by 1D FFTs on all the columns of the output from the first pass.

The output of a 2D FFT is just like the output of a 1D FFT, except that you have complex magnitudes in x, y dimensions rather just a single dimension. Spatial frequency increases with the x and y index as expected.

There's a section in the FFTW manual (here) which covers the organisation of the real-to-complex 2D FFT output data, assuming that's what you're using.

笛声青案梦长安 2024-10-29 04:26:54

这是。
尝试计算 2 个计划:

plan1 = fftw_plan_dft_2d(image->rows, image->cols, in, fft, FFTW_FORWARD, FFTW_ESTIMATE); 
plan2 = fftw_plan_dft_2d(image->rows, image->cols, fft, ifft, FFTW_BACKWARD, FFTW_ESTIMATE);

您将在 ifft 中获得原始数据。

希望它有帮助:)

It is.
Try to compute 2 plans:

plan1 = fftw_plan_dft_2d(image->rows, image->cols, in, fft, FFTW_FORWARD, FFTW_ESTIMATE); 
plan2 = fftw_plan_dft_2d(image->rows, image->cols, fft, ifft, FFTW_BACKWARD, FFTW_ESTIMATE);

You'll obtain the original data in ifft.

Hope it helps :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文