Cargo y muestro una imagen de un poco de arroz en Matlab:
g = imread('rice.png');
imshow(g);
Tomo la FFT de esta imagen y la cambio:
G = fft2(g);
imshow(log(abs(fftshift(G)) + 1), []);
Si coloco los ejes ax y y en el centro de la imagen; Encuentro que la imagen es simétrica g (-x, -y) = g (x, y). Para una señal 1D tenemos que la FFT de una señal real tiene una parte real simétrica y una parte imaginaria asimétrica. Supongo que eso es lo que vemos aquí en 2 dimensiones.
Dado que la imagen original es más oscura en la parte inferior que en la superior, existe una fuerte discontinuidad horizontal en el límite periódico que causa la línea vertical en la FFT.
Quiero deshacerme de este efecto límite. Un enfoque común a esto parece ser la ventana .
Sin embargo, quiero resolver este problema con una técnica que encontré en un artículo llamado "reflejo". El documento no era muy específico, por lo que necesito su ayuda para resolver este enfoque :-).
Primero creo un "mosaico" simétrico a partir de la imagen original:
tile=[flipdim(g,2) g; flipdim(flipdim(g,1),2) flipdim(g,1)];
imshow(tile);
Ahora tomo el FFT de este "mosaico":
Tile=fft2(tile);
imshow(log(abs(fftshift(Tile)) + 1), [])
La línea vertical parece haber desaparecido (casi): bien. Sin embargo, la duplicación parece haber introducido más simetría.
¿Cuál es el resultado correcto: la FFT de la imagen original o la FFT de la imagen "reflejada"?
¿Hay alguna manera de "reflejarme" para que pueda deshacerme de los efectos de límite y obtener una FFT puramente real?
Gracias de antemano por cualquier respuesta!
fuente