Jak wykreślić FFT 2D w Matlab?

Używam fft2 do obliczania transformacji Fouriera obrazu w skali szarości w MATLAB.

Jaki jest wspólny sposób na wykreślenie wielkości wyniku?

Author: Ben-Uri, 2012-11-25

2 answers

Zakładając, że I jest twoim obrazem wejściowym, a {[2] } jest jego transformatą Fouriera (tj. F = fft2(I))

Możesz użyć tego kodu:

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
 51
Author: Ben-Uri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-25 09:21:25

Oto przykład z mojej strony jak 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');

Daje to widmo wielkości i widmo fazowe obrazu. Użyłem kolorowego obrazu, ale można łatwo dostosować go do korzystania z szarego obrazu, jak również.

Ps. Właśnie zauważyłem, że na Matlab 2012a powyższy obraz nie jest już uwzględniony. Więc po prostu zamień pierwszą linię powyżej na say

img = imread('ngc6543a.jpg');
I to zadziała. Użyłem starszej wersji Matlab zrobić powyższy przykład i po prostu skopiowane go tutaj.

On współczynnik skalowania

Kiedy wykreślimy wielkość transformaty Fouriera 2D, musimy przeskalować wartości pikseli za pomocą transformacji log, aby rozszerzyć zakres ciemnych pikseli na jasny obszar, abyśmy mogli lepiej zobaczyć transformatę. Używamy wartości {[3] } w równaniu

s = c log(1+r) 
Nie jest znany mi sposób na predestynację tej skali. Just need to spróbuj różnych wartości, aby dostać się na lubisz. Użyłem 100 w powyższym przykładzie.

Tutaj wpisz opis obrazka

 23
Author: Nasser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-25 08:55:58