transformada magnitud inversa graficar game fourier fftshift fft2 espectro matlab image-processing plot fft

magnitud - transformada de fourier matlab pdf



Cómo trazar una FFT 2D en Matlab? (2)

Estoy usando fft2 para calcular la Transformada de Fourier de una imagen en escala de grises en MATLAB.

¿Cuál es la forma común de trazar la magnitud del resultado?


Aquí hay un ejemplo de mi página HOW TO 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'');

Esto da el espectro de magnitud y el espectro de fase de la imagen. Utilicé una imagen en color, pero también puedes ajustarla fácilmente para usar una imagen gris.

PD. Me acabo de dar cuenta de que en Matlab 2012a la imagen de arriba ya no está incluida. Entonces, simplemente reemplace la primera línea de arriba con decir

img = imread(''ngc6543a.jpg'');

y funcionará Utilicé una versión anterior de Matlab para hacer el ejemplo anterior y simplemente lo copié aquí.

En el factor de escala

Cuando trazamos la magnitud de la transformada de Fourier 2D, necesitamos escalar los valores de los píxeles mediante la transformación de logs para expandir el rango de los píxeles oscuros a la región brillante para que podamos ver mejor la transformación. Usamos un valor c en la ecuación

s = c log(1+r)

No hay una forma conocida de predeterminar esta escala que yo sepa. Solo tiene que probar diferentes valores para obtener. Usé 100 en el ejemplo anterior.


Suponiendo que I sea ​​su imagen de entrada y que F sea ​​su Transformada de Fourier (es decir, F = fft2(I) )

Puedes usar este código:

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