Bilaterales Filtern in Python

Aditya Raj 15 Februar 2024
  1. Was ist bilaterale Filterung
  2. Schritte zum Durchführen einer bilateralen Filterung in Python
  3. die Funktion bilateralFilter() in Python
  4. Verwenden Sie die Funktion bilateralFilter(), um eine bilaterale Filterung in Python durchzuführen
Bilaterales Filtern in Python

Das Filtern wird verwendet, um Bilder in Computer Vision-Anwendungen zu verarbeiten. In diesem Artikel wird die Implementierung der bilateralen Filterung in Python mit dem OpenCV-Modul erörtert.

Was ist bilaterale Filterung

Bilaterales Filtern ist eine glättende Filtertechnik. Es ist ein nichtlinearer und rauschreduzierender Filter, der jeden Pixelwert durch den gewichteten durchschnittlichen Pixelwert der Nachbarn ersetzt.

Die bilaterale Filterung wird auch als kantenerhaltende Filterung bezeichnet, da sie das Pixel nicht über Kanten hinweg mittelt.

Schritte zum Durchführen einer bilateralen Filterung in Python

Um eine bilaterale Filterung durchzuführen, führen wir hauptsächlich vier Aufgaben aus.

  1. Wir ersetzen jedes Pixel im Bild durch den gewichteten Durchschnitt seiner Nachbarn.

  2. Die Gewichtung jedes Nachbarn wird durch seinen Abstand vom aktuellen Pixel bestimmt. Wir weisen jedem Pixel eine Gewichtung zu, wobei den nächstgelegenen Pixeln die höchste Gewichtung und entfernten Pixeln die niedrigste Gewichtung zugewiesen wird.

    Um diese Aufgabe auszuführen, verwenden wir einen räumlichen Parameter.

  3. Die Gewichtung des Nachbarn hängt auch vom Intensitätsunterschied der Pixel ab. Pixeln mit ähnlicher Intensität wie dem aktuellen Pixel wird mehr Gewichtung zugewiesen, wohingegen Pixeln mit großen Intensitätsunterschieden geringere Gewichtungen zugewiesen werden.

    Um diese Aufgabe auszuführen, verwenden wir einen Bereichsparameter.

  4. Durch Erhöhen des räumlichen Parameters können Sie die größeren Merkmale des Bildes glätten. Wenn Sie andererseits den Bereichsparameter erhöhen, verhält sich die bilaterale Filterung wie eine Gaußsche Filterung.

die Funktion bilateralFilter() in Python

Wir können eine bilaterale Filterung in Python mit dem OpenCV-Modul mit der Funktion bilateralFilter() durchführen. Die Syntax für die Funktion bilateralFilter() lautet wie folgt.

bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)

Hier,

  • Der Parameter src nimmt das zu verarbeitende Quellbild als Eingabeargument.

  • Der Parameter d nimmt den Durchmesser der Nachbarschaft an, in der die Pixel beim Filtern berücksichtigt werden sollen.

  • Der Parameter sigmaColor ist der Wert des Filters Sigma im Farbraum. Ein höherer Wert von sigmaColor bedeutet, dass die im Farbraum weiter auseinander liegenden Farben beim Filtern berücksichtigt werden.

    Der Parameter sigmaColor sollte einen Wert im Bereich von sigmaSpace enthalten.

  • Der Parameter sigmaSpace bezeichnet den Wert von Sigma im räumlichen Bereich. Ein höherer Wert von sigmaSpace bedeutet, dass die vom aktuellen Pixel weiter entfernten Pixel beim Filtern berücksichtigt werden.

    Der Parameter sigmaSpace sollte einen Wert im Bereich von sigmaColor enthalten.

  • Der Parameter borderType wird verwendet, um einen Modus zum Extrapolieren der Pixel ausserhalb des Bildes zu definieren, während die Pixel in den Bildgrenzen gefiltert werden.

Verwenden Sie die Funktion bilateralFilter(), um eine bilaterale Filterung in Python durchzuführen

Im Folgenden sind die Schritte zum Ausführen einer bilateralen Filterung in Python aufgeführt.

  • Zuerst importieren wir cv2.
  • Als nächstes öffnen wir ein Bild mit der Funktion imread(), die den Dateipfad eines Bildes als Eingabeargument verwendet und ein Array zurückgibt, das das Bild darstellt.
  • Wir speichern das Array in einer Variablen img.
  • Nach dem Laden des Bildes verwenden wir die Funktion bilateralFilter(), um eine bilaterale Funktion in Python auszuführen. Nach der Ausführung gibt die Funktion bilateralFilter() ein Array zurück, das das verarbeitete Bild enthält.
  • Nachdem wir das verarbeitete Bild erhalten haben, speichern wir es im Dateisystem mit der Funktion imwrite(), die als erstes Eingabeargument einen String mit dem Dateinamen der Ausgabedatei und als zweites Eingabeargument das Array mit dem verarbeiteten Bild verwendet Streit. Nach Ausführung der Funktion wird die Datei im Dateisystem gespeichert.

Unten ist das Bild, das wir verwenden werden, um eine bilaterale Filterung in Python durchzuführen.

Muster

Das Folgende ist der Code zum Durchführen einer bilateralen Filterung in Python.

import cv2

img = cv2.imread("pattern.jpg")
output_image = cv2.bilateralFilter(img, 15, 100, 100)
cv2.imwrite("processed_image.jpg", output_image)

Hier ist das Ausgabebild nach Durchführung einer bilateralen Filterung des Eingabebildes:

Python-verarbeitetes Bild mit bilateralem Filter

Im angegebenen Bild können Sie beobachten, dass die Merkmale der Streifen im Ausgabebild verschwommen sind. Dies liegt daran, dass die benachbarten Pixel jedes Pixels berücksichtigt werden, während das Ausgabepixel erzeugt wird.

Die Mittelung der Pixel ergibt einen Unschärfeeffekt, und die Merkmale werden unscharf.

Im Vergleich zur Gaußschen Filterung bewahrt die bilaterale Filterung die Kanten. Daher können Sie beim Durchführen von Glättungsvorgängen immer eine bilaterale Filterung verwenden, wenn Sie die Kanten in Ihrem Bild bewahren müssen.

Autor: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub