Подтвердить что ты не робот

Как построить 2D-FFT в Matlab?

Я использую fft2 для вычисления преобразования Фурье изображения в градациях серого в MATLAB.

Каков общий способ построения величины результата?

4b9b3361

Ответ 1

Предполагая, что I - ваше входное изображение, а F - его преобразование Фурье (т.е. F = fft2(I))

Вы можете использовать этот код:

F = fftshift(F); % Center FFT

F = abs(F); % Get the magnitude
F = log(F+1); % Use log, for perceptual scaling, and +1 since log(0) is undefined
F = mat2gray(F); % Use mat2gray to scale the image between 0 and 1

imshow(F,[]); % Display the result

Ответ 2

Вот пример из моей страницы "КАК" Matlab:

close all; clear all;

img   = imread('lena.tif','tif');
imagesc(img)
img   = fftshift(img(:,:,2));
F     = fft2(img);

figure;

imagesc(100*log(1+abs(fftshift(F)))); colormap(gray); 
title('magnitude spectrum');

figure;
imagesc(angle(F));  colormap(gray);
title('phase spectrum');

Это дает спектр амплитуд и фазовый спектр изображения. Я использовал цветное изображение, но вы можете легко настроить его, чтобы использовать серое изображение.

пс. Я только заметил, что на Matlab 2012a вышеупомянутое изображение больше не включено. Итак, просто замените первую строку выше, скажем

img = imread('ngc6543a.jpg');

и он будет работать. Я использовал более старую версию Matlab, чтобы сделать приведенный выше пример, и просто скопировал его здесь.

О коэффициенте масштабирования

При построении двумерной величины преобразования Фурье нам необходимо масштабировать значения пикселей, используя логарифм преобразования, чтобы расширить диапазон темных пикселей в яркую область, чтобы мы могли лучше видеть преобразование. Мы используем значение c в уравнении

s = c log(1+r) 

Нет известного способа заранее определить этот масштаб, который я знаю. Просто нужно попробуйте разные значения, чтобы понравиться вам. Я использовал 100 в приведенном выше примере.

enter image description here