Я использую fft2 для вычисления преобразования Фурье изображения в градациях серого в MATLAB.
Каков общий способ построения величины результата?
Я использую fft2 для вычисления преобразования Фурье изображения в градациях серого в MATLAB.
Каков общий способ построения величины результата?
Предполагая, что 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
Вот пример из моей страницы "КАК" 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
в приведенном выше примере.