Bilaterales Filtern in Python
- Was ist bilaterale Filterung
- Schritte zum Durchführen einer bilateralen Filterung in Python
-
die Funktion
bilateralFilter()
in Python -
Verwenden Sie die Funktion
bilateralFilter()
, um eine bilaterale Filterung in Python durchzuführen
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.
-
Wir ersetzen jedes Pixel im Bild durch den gewichteten Durchschnitt seiner Nachbarn.
-
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.
-
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.
-
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 vonsigmaColor
bedeutet, dass die im Farbraum weiter auseinander liegenden Farben beim Filtern berücksichtigt werden.Der Parameter
sigmaColor
sollte einen Wert im Bereich vonsigmaSpace
enthalten. -
Der Parameter
sigmaSpace
bezeichnet den Wert von Sigma im räumlichen Bereich. Ein höherer Wert vonsigmaSpace
bedeutet, dass die vom aktuellen Pixel weiter entfernten Pixel beim Filtern berücksichtigt werden.Der Parameter
sigmaSpace
sollte einen Wert im Bereich vonsigmaColor
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 FunktionbilateralFilter()
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.
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:
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.
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