Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Tiefpass- und Hochpassfilter | Abschnitt
Angewandtes Computer Vision
Abschnitt 1. Kapitel 6
single

single

bookTiefpass- und Hochpassfilter

Swipe um das Menü anzuzeigen

Einer der Hauptvorteile der Fourier-Transformation ist die Möglichkeit, High-Pass- und Low-Pass-Filter anzuwenden.

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 Pixel großen 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 zunächst alle Frequenzen 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 Ortsraum 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 wieder an ihre ursprünglichen Positionen zu bringen;
  • 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.
Aufgabe

Swipe to start coding

Es liegt ein Bild des Schafs in der Variable image und ein Bild im Frequenzbereich in der Variable dft_shift vor:

  • Die Form der Matrix image ermitteln und in den Variablen rows und cols speichern;
  • Den Mittelpunkt berechnen und in crow und ccol speichern;
  • Die Variable low_mask als ein Array aus Nullen mit der Form (rows, cols) und dem Typ np.uint8 definieren;
  • Den 20x20 großen zentralen Bereich von low_mask auswählen und mit 1 füllen.
  • Die Variable high_mask als ein Array aus Einsen mit der Form (rows, cols) und dem Typ np.uint8 definieren;
  • Den 20x20 großen zentralen Bereich von high_mask auswählen und mit 0 füllen;
  • low_mask und high_mask auf dft_shift anwenden und die gefilterten Frequenzen entsprechend in lowpass_dft_filtered und highpass_dft_filtered speichern;
  • Inverse Transformation für lowpass_dft_filtered durchführen:
    • Inverses Shifting durchführen und in lowpass_dft_inverse speichern;
    • Inverse Transformation durchführen und das Bild in image_lowpass speichern;
    • Negative Werte aus image_lowpass entfernen.
  • Inverse Transformation für highpass_dft_inverse durchführen:
    • Inverses Shifting durchführen und in lowpass_dft_inverse speichern;
    • Inverse Transformation durchführen und das Bild in image_highpass speichern;
    • Negative Werte aus image_highpass entfernen.

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 1. Kapitel 6
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

some-alt