Двумерная справка FFTW - PullRequest
       9

Двумерная справка FFTW

3 голосов
/ 16 марта 2011

В настоящее время я пытаюсь вычислить fft изображения с помощью 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);

Функция изменяет сложный массив с размером, равным количеству пикселей в исходном изображении.

Знаете ли вы, является ли это правильным способом вычисления 2D БПФ изображения? Если да, то что представляют данные внутри out? IE Где находятся высокие и низкие частоты в массиве?

Спасибо, djs22

Ответы [ 2 ]

5 голосов
/ 16 марта 2011

2D БПФ эквивалентно применению 1D БПФ к каждой строке изображения за один проход, за которым следуют 1D БПФ во всех столбцах выходных данных с первого прохода.

Вывод двумерногоБПФ аналогично выводу 1D БПФ, за исключением того, что у вас есть комплексные величины в измерениях x, y, а не просто одно измерение.Пространственная частота увеличивается с индексами x и y, как и ожидалось.

В руководстве FFTW есть раздел ( здесь ), который охватывает организацию реальных выходных данных 2D FFT,при условии, что это то, что вы используете.

0 голосов
/ 20 мая 2012

Это так.Попробуйте рассчитать 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.

Надеюсь, это поможет:)

...