Tiefpass- und Hochpassfilter
Einer der Hauptvorteile der Fourier-Transformation besteht darin, dass sie High-Pass- und Low-Pass-Filterung ermöglicht.
Nach der Anwendung der Fourier-Transformation:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
muss eine Filter-Maske erstellt werden.
Low-Pass-Filterung (Weichzeichnung)
Ein Low-Pass-Filter entfernt hochfrequente Komponenten, was zu einem verschwommenen Bild führt. Low-Pass-Maske:
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape
: Ermittelt die Anzahl der Zeilen und Spalten des Graustufenbildes;crow, ccol = rows // 2, cols // 2
: Berechnet die Mittelpunktkoordinaten des Bildes;mask = np.zeros((rows, cols), np.uint8)
: Erstellt eine Maske aus Nullen mit denselben Dimensionen wie das Bild;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: Setzt einen 60×60 großen quadratischen Bereich im Zentrum der Maske auf 1, sodass nur die niederfrequenten Komponenten (nahe dem Zentrum des Frequenzbereichs) durchgelassen werden, während hochfrequente Details herausgefiltert werden.
Hochpassfilterung (Kantenerkennung)
Ein Hochpassfilter entfernt niederfrequente Komponenten und hebt Kanten hervor. Hochpass-Maske:
highpass_mask = np.ones((rows, cols), np.uint8)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
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.
Anwendung des Filters
Nach dem Erstellen der Maske muss ein Filter angewendet und das Bild zurück in den Ortsbereich transformiert werden:
dft_filtered = dft_shift * mask
dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
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, sodass ein reellwertiges gefiltertes Bild entsteht.
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
image
-Matrix und speichern Sie diese in den Variablenrows
undcols
; - Berechnen Sie den Mittelpunkt und speichern Sie ihn in
crow
undccol
; - Definieren Sie die
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 diesen mit1
. - Definieren Sie die
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 diesen 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!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 3.45
Tiefpass- und Hochpassfilter
Swipe um das Menü anzuzeigen
Einer der Hauptvorteile der Fourier-Transformation besteht darin, dass sie High-Pass- und Low-Pass-Filterung ermöglicht.
Nach der Anwendung der Fourier-Transformation:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
muss eine Filter-Maske erstellt werden.
Low-Pass-Filterung (Weichzeichnung)
Ein Low-Pass-Filter entfernt hochfrequente Komponenten, was zu einem verschwommenen Bild führt. Low-Pass-Maske:
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape
: Ermittelt die Anzahl der Zeilen und Spalten des Graustufenbildes;crow, ccol = rows // 2, cols // 2
: Berechnet die Mittelpunktkoordinaten des Bildes;mask = np.zeros((rows, cols), np.uint8)
: Erstellt eine Maske aus Nullen mit denselben Dimensionen wie das Bild;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: Setzt einen 60×60 großen quadratischen Bereich im Zentrum der Maske auf 1, sodass nur die niederfrequenten Komponenten (nahe dem Zentrum des Frequenzbereichs) durchgelassen werden, während hochfrequente Details herausgefiltert werden.
Hochpassfilterung (Kantenerkennung)
Ein Hochpassfilter entfernt niederfrequente Komponenten und hebt Kanten hervor. Hochpass-Maske:
highpass_mask = np.ones((rows, cols), np.uint8)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
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.
Anwendung des Filters
Nach dem Erstellen der Maske muss ein Filter angewendet und das Bild zurück in den Ortsbereich transformiert werden:
dft_filtered = dft_shift * mask
dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
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, sodass ein reellwertiges gefiltertes Bild entsteht.
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
image
-Matrix und speichern Sie diese in den Variablenrows
undcols
; - Berechnen Sie den Mittelpunkt und speichern Sie ihn in
crow
undccol
; - Definieren Sie die
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 diesen mit1
. - Definieren Sie die
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 diesen 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!
single