TRANSFORMACIONES GLOBALES
Matlab dispone de las funciones fft2 e ifft2 para la realización de la transformada de Fourier de una imagen y su inversa.
a =
imread('cameraman.tif');figure(1),imshow(a)
figure(2),imagesc(abs(fft2(double(a))))
haz un zoom de la imagen para comprobar que se ve un punto blanco en la esquina.
Esta es una pequeña función para mostrar transformadas de Fourier: fftsh.m
Para que la FT aparezca centrada se puede usar:
fa=fft2(double(a));
figure(2);fftsh(fftshift(fa));
Observa los valores de la FT en realidad tecleando
fa(1:4,1:3)
El primer valor es la componente continua. La suma de todos los valores de gris en la implementación de Matlab (comparalo con sum(sum(a))).
La FT inversa se puede calcular como:
figure(3);imshow(uint8(ifft2(fa)));
Atención con el efecto de fftshift. Hay que deshacerlo con ifftshift.
Se pueden crear imágenes sintéticas (normalizadas) para experimentar con la TF:
[x,y]=meshgrid(-128:127,-128:127);
z=2*x+5*y; c=(z>0); % un escalon
oblicuo de blanco a negro
z=sqrt(x.^2+y.^2); c=(z<15); % un
circulo blanco
z=sqrt(x.^2+y.^2); c=z; % un circulo
difuminado
z=sin(x/20+y/10); c=(z>0); % barras oblicuas
Calcula las TF de estas imágenes muestralas. Interpreta los resultados obtenidos.
Observa la forma de una frecuencia “pura” de la siguiente manera:
z=sin(x/5); c=z;
figure(2),imagesc(c);
fc=fftshift(fft2(c)); figure(3),
fftsh(fc);
figure(4), plot(max(abs(fc)));
Puedes crear una TF sintética de la anterior imagen de la siguiente forma:
fsi=zeros(256,256);
fsi(129,121)=1.0;
fsi(129,137)=1.0;
figure(5),
fftsh(fsi);
figure(6),imagesc(ifft2(ifftshift(fsi)));
La DCT se manipula y visualiza de la misma manera que la TF.
figure(3),fftsh(dct2(a))
La transformada de Walsh-Hadamard se puede calcular con relativa facilidad
H=hadamard(256);
F=H*double(a)*H;
figure(3),fftsh(F)
figure(4),imshow(uint8(H*F*H/256/256));
Ejercicios:
Calcula las TF de las imágenes sintéticas anteriores i de alguna más que se te ocurra. Interpreta los resultados obtenidos.
Crea una TF sintética que se corresponda con una variación sinusoidal oblicua.
Crea una TF sintética que se corresponda con más de una frecuencia pura.
Ejercicios opcionales (puntuables):
Considera la imagen del cameraman y su TF. Se trata de conseguir, mediante la manipulación de su TF, una versión de la imagen en la que se superponga una variación sinusoidal oblicua a los valores de gris originales. Explica qué has hecho en cada caso y por qué. Presenta el resultado como una función de matlab que acepte como parámetros la frecuencia (horizontal y vertical) y la intensidad de la variación a añadir además de la imágen.
Entrega sólo el código, añadiendo comentarios escuetos pero que dejen claro lo que has hecho.