Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Tiefpass- und Hochpassfilter | Bildverarbeitung mit OpenCV
Grundlagen der Computer Vision

bookTiefpass- 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.
Aufgabe

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 Variablen rows und cols;
  • Berechnen Sie den Mittelpunkt und speichern Sie ihn in crow und ccol;
  • Definieren Sie die low_mask als ein Array aus Nullen mit der Form (rows, cols) und dem Typ np.uint8;
  • Wählen Sie den 20x20-Zentralbereich von low_mask und füllen Sie diesen mit 1.
  • Definieren Sie die high_mask als ein Array aus Einsen mit der Form (rows, cols) und dem Typ np.uint8;
  • Wählen Sie den 20x20-Zentralbereich von high_mask und füllen Sie diesen mit 0;
  • Wenden Sie low_mask und high_mask auf dft_shift an und speichern Sie die gefilterten Frequenzen entsprechend in lowpass_dft_filtered und highpass_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 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.

Lösung

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3
single

single

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

close

Awesome!

Completion rate improved to 3.45

bookTiefpass- 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.
Aufgabe

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 Variablen rows und cols;
  • Berechnen Sie den Mittelpunkt und speichern Sie ihn in crow und ccol;
  • Definieren Sie die low_mask als ein Array aus Nullen mit der Form (rows, cols) und dem Typ np.uint8;
  • Wählen Sie den 20x20-Zentralbereich von low_mask und füllen Sie diesen mit 1.
  • Definieren Sie die high_mask als ein Array aus Einsen mit der Form (rows, cols) und dem Typ np.uint8;
  • Wählen Sie den 20x20-Zentralbereich von high_mask und füllen Sie diesen mit 0;
  • Wenden Sie low_mask und high_mask auf dft_shift an und speichern Sie die gefilterten Frequenzen entsprechend in lowpass_dft_filtered und highpass_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 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.

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3
single

single

some-alt