Ich lade und zeige ein Bild von etwas Reis in Matlab:
g = imread('rice.png');
imshow(g);
Ich nehme die FFT dieses Bildes und verschiebe es:
G = fft2(g);
imshow(log(abs(fftshift(G)) + 1), []);
Wenn ich die Axt- und Y-Achse durch die Bildmitte lege; Ich finde, dass das Bild symmetrisch ist g (-x, -y) = g (x, y). Für ein 1D-Signal haben wir, dass die FFT eines realen Signals einen symmetrischen Realteil und einen asymmetrischen Imaginärteil hat. Ich denke, das sehen wir hier in zwei Dimensionen?
Da das Originalbild unten dunkler als oben ist, gibt es eine starke horizontale Diskontinuität an der periodischen Grenze, die die vertikale Linie in der FFT verursacht.
Ich möchte diesen Randeffekt loswerden. Ein üblicher Ansatz hierfür scheint die Fensterung zu sein .
Ich möchte dieses Problem jedoch mit einer Technik lösen, die ich in einem Artikel namens "Spiegeln" gefunden habe. Das Papier war nicht sehr spezifisch, deshalb brauche ich Ihre Hilfe, um diesen Ansatz herauszufinden :-).
Zuerst erstelle ich eine symmetrische "Kachel" aus dem Originalbild:
tile=[flipdim(g,2) g; flipdim(flipdim(g,1),2) flipdim(g,1)];
imshow(tile);
Jetzt nehme ich die FFT dieser "Kachel":
Tile=fft2(tile);
imshow(log(abs(fftshift(Tile)) + 1), [])
Die vertikale Linie scheint (fast) verschwunden zu sein: gut. Die Spiegelung scheint jedoch mehr Symmetrie eingeführt zu haben.
Was ist das richtige Ergebnis: die FFT des Originalbildes oder die FFT des "gespiegelten" Bildes?
Gibt es eine Möglichkeit, wie ich "spiegeln" kann, damit ich sowohl Randeffekte als auch eine rein reale FFT entferne?
Vielen Dank im Voraus für alle Antworten!
quelle