Tiefpass- und Hochpassfilter
Einer der Hauptvorteile der Fourier-Transformation ist, dass sie Hochpass- und Tiefpassfilterung ermöglicht.
Nach der Anwendung der Fourier-Transformation:
Es ist erforderlich, eine Filter-Maske zu erstellen.
Tiefpassfilterung (Weichzeichnung)
Ein Tiefpassfilter entfernt hochfrequente Komponenten, was zu einem verschwommenen Bild führt. Tiefpassmaske:
rows, cols = image.shape
: retrieves the number of rows and columns from the grayscale image;crow, ccol = rows // 2, cols // 2
: computes the center coordinates of the image;mask = np.zeros((rows, cols), np.uint8)
: creates a mask of zeros with the same dimensions as the image;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: sets a 60×60 square region at the center of the mask to 1, allowing only the low-frequency components (near the center of the frequency domain) to pass through while filtering out high-frequency details.
Hochpassfilterung (Kantenerkennung)
Ein Hochpassfilter entfernt niederfrequente Komponenten und hebt Kanten hervor. Hochpass-Maske:
highpass_mask = np.ones((rows, cols), np.uint8)
: Initialisiert eine Maske aus Einsen mit denselben Dimensionen wie das Bild, sodass alle Frequenzen zunächst durchgelassen werden;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
: Setzt ein kleines 10×10-Quadrat im Zentrum (Niederfrequenzbereich) auf Null und blockiert damit diese Frequenzen effektiv.
Anwendung des Filters
Nach dem Erstellen der Maske muss ein Filter angewendet und das Bild zurück in den Ortsraum transformiert werden:
dft_filtered = dft_shift * mask
: wendet die Frequenzbereichsmaske (z. B. Tiefpass oder Hochpass) durch elementweise Multiplikation mit der verschobenen DFT des Bildes an;dft_inverse = np.fft.ifftshift(dft_filtered)
: kehrt die zuvor angewendete Verschiebung um, um die Frequenzkomponenten an ihre ursprünglichen Positionen zurückzubringen;image_filtered = np.fft.ifft2(dft_inverse)
: berechnet die Inverse Fourier-Transformation, um die gefilterten Frequenzdaten zurück in den Ortsbereich zu überführen;image_filtered = np.abs(image_filtered)
: nimmt den Absolutwert, um verbleibende imaginäre Komponenten zu entfernen, was zu einem reellwertigen gefilterten Bild führt.
Swipe to start coding
Sie erhalten ein Bild des Schafs in der Variable image
und ein Bild im Frequenzbereich in der Variable dft_shift
:
- Ermitteln Sie die Form der Matrix
image
und speichern Sie diese in den Variablenrows
undcols
; - Berechnen Sie den Mittelpunkt und speichern Sie ihn in
crow
undccol
; - Definieren Sie
low_mask
als ein Array aus Nullen mit der Form(rows, cols)
und dem Typnp.uint8
; - Wählen Sie den 20x20-Zentralbereich von
low_mask
und füllen Sie ihn mit1
. - Definieren Sie
high_mask
als ein Array aus Einsen mit der Form(rows, cols)
und dem Typnp.uint8
; - Wählen Sie den 20x20-Zentralbereich von
high_mask
und füllen Sie ihn mit0
; - Wenden Sie
low_mask
undhigh_mask
aufdft_shift
an und speichern Sie die gefilterten Frequenzen entsprechend inlowpass_dft_filtered
undhighpass_dft_filtered
; - Führen Sie die Invers-Transformation für
lowpass_dft_filtered
durch:- Führen Sie das inverse Shifting durch und speichern Sie das Ergebnis in
lowpass_dft_inverse
; - Führen Sie die Inverse-Transformation durch und speichern Sie das Bild in
image_lowpass
; - Entfernen Sie negative Werte aus
image_lowpass
.
- Führen Sie das inverse Shifting durch und speichern Sie das Ergebnis in
- Führen Sie die Invers-Transformation für
highpass_dft_inverse
durch:- Führen Sie das inverse Shifting durch und speichern Sie das Ergebnis in
lowpass_dft_inverse
; - Führen Sie die Inverse-Transformation durch und speichern Sie das Bild in
image_highpass
; - Entfernen Sie negative Werte aus
image_highpass
.
- Führen Sie das inverse Shifting durch und speichern Sie das Ergebnis in
Lösung
Danke für Ihr Feedback!