Carico e visualizzo un'immagine di riso in Matlab:
g = imread('rice.png');
imshow(g);
Prendo la FFT di questa immagine e la sposto:
G = fft2(g);
imshow(log(abs(fftshift(G)) + 1), []);
Se posiziono l'asse e l'asse y attraverso il centro dell'immagine; Trovo che l'immagine sia simmetrica g (-x, -y) = g (x, y). Per un segnale 1D abbiamo che la FFT di un segnale reale ha una parte reale simmetrica e una parte immaginaria asimmetrica. Immagino che sia quello che vediamo qui in 2 dimensioni?
Poiché l'immagine originale è più scura nella parte inferiore che nella parte superiore, c'è una forte discontinuità orizzontale al confine periodico che causa la linea verticale nella FFT.
Voglio liberarmi di questo effetto limite. Un approccio comune a questo sembra essere il windowing .
Tuttavia, voglio risolvere questo problema con una tecnica che ho trovato in un documento chiamato "mirroring". Il documento non era molto specifico, quindi ho bisogno del tuo aiuto per capire questo approccio :-).
Per prima cosa creo una "piastrella" simmetrica dall'immagine originale:
tile=[flipdim(g,2) g; flipdim(flipdim(g,1),2) flipdim(g,1)];
imshow(tile);
Ora prendo la FFT di questa "tessera":
Tile=fft2(tile);
imshow(log(abs(fftshift(Tile)) + 1), [])
La linea verticale sembra essere (quasi) scomparsa: buona. Tuttavia, il mirroring sembra aver introdotto più simmetria.
Qual è il risultato corretto: la FFT dell'immagine originale o la FFT dell'immagine "specchiata"?
C'è un modo in cui posso "rispecchiarmi" in modo che entrambi mi liberi degli effetti limite e ottenga una FFT puramente reale?
Grazie in anticipo per le risposte!