Je charge et affiche une image de riz dans Matlab:
g = imread('rice.png');
imshow(g);
Je prends la FFT de cette image et la décale:
G = fft2(g);
imshow(log(abs(fftshift(G)) + 1), []);
Si je place l'axe et l'axe y à travers le centre de l'image; Je trouve que l'image est symétrique g (-x, -y) = g (x, y). Pour un signal 1D, nous avons que la FFT d'un signal réel a une partie réelle symétrique et une partie imaginaire asymétrique. Je suppose que c'est ce que nous voyons ici en 2 dimensions?
Étant donné que l'image d'origine est plus sombre en bas qu'en haut, il y a une forte discontinuité horizontale à la frontière périodique provoquant la ligne verticale dans la FFT.
Je veux me débarrasser de cet effet de frontière. Une approche commune à cela semble être le fenêtrage .
Cependant, je veux résoudre ce problème par une technique que j'ai trouvée dans un article intitulé "mirroring". Le document n'était pas très précis, j'ai donc besoin de votre aide pour comprendre cette approche :-).
Je crée d'abord une "tuile" symétrique à partir de l'image d'origine:
tile=[flipdim(g,2) g; flipdim(flipdim(g,1),2) flipdim(g,1)];
imshow(tile);
Maintenant je prends la FFT de cette "tuile":
Tile=fft2(tile);
imshow(log(abs(fftshift(Tile)) + 1), [])
La ligne verticale semble avoir (presque) disparu: bonne. Cependant, la mise en miroir semble avoir introduit plus de symétrie.
Quel est le résultat correct: la FFT de l'image originale ou la FFT de l'image "miroir"?
Existe-t-il un moyen de «refléter» afin de me débarrasser à la fois des effets de frontière et d'obtenir une FFT purement réelle?
Merci d'avance pour n'importe quelle réponse!