OpenCV Median filter

Salman Mehmood 15 Februar 2024
OpenCV Median filter

In dieser Demonstration lernen wir, was ein Medianfilter ist, und diskutieren zwei Arten von Medianfiltern in OpenCV. Dann lernen wir auch, wie man mit Hilfe dieser Medianfilter Salz-und-Pfeffer-Rauschen aus einem Bild entfernt.

Entfernen Sie Salz-und-Pfeffer-Rauschen aus einem Bild mit Hilfe des Medianfilters in OpenCV

Schauen wir uns den Medianfilter an, der sich hervorragend zum Entrauschen eignet, insbesondere für Salz-und-Pfeffer-Rauschen. Bevor wir in eine kurze Lektion über den Median einsteigen, wissen wir alle, dass der Mittelwert nichts anderes ist als der Durchschnitt aller Zahlen und das typische Beispiel, das die Leute verwenden.

Sie leben zum Beispiel in einer Nachbarschaft, in der Ihr Haus irgendwo zwischen 350.000, 425.000 usw. liegt. Sie haben wahrscheinlich ein paar reiche Typen, die in Ihrer Nachbarschaft leben, irgendwo den Hügel hinauf, deren Häuser 2,2 Millionen, 3,2 Millionen wert sind. usw.

Angenommen, Sie betrachten den Mittelwert von all diesen und sehen 931 500, was Sie überrascht hat. Wahrscheinlich würden Sie denken, dass 931.500 der durchschnittliche Hauspreis ist; deshalb schaut man sich immer den Median der Hauspreise an.

Sehen Sie sich den Median dieser Werte an; es kommt auf 512 500, was die Streuung besser als den Mittelwert darstellt. Dies sind die Statistiken, die Sie wahrscheinlich in Ihrer fünften oder sechsten Klasse gelernt haben, und warum wir dies erwähnen, liegt daran, dass wir sie in diesem Bild demonstrieren werden.

opencv Medianfilter Beispiel 1

Das Bild unten wird künstlich mit viel Salz-und-Pfeffer-Rauschen hinzugefügt, und wir können viele dunkle und helle Pixel sehen. Wenn wir hineinzoomen, sehen wir diesen Bereich, der homogen grau sein soll.

Warum werden diese Salz-und-Pfeffer-Geräusche angezeigt? Aus vielen Gründen ist die Hauptquelle für Salz-und-Pfeffer-Rauschen dort, insbesondere in älterer Elektronik, mit der Sie Ihre Bilder aufgenommen haben, bei der die Analog-Digital-Konvertierung einige Probleme hat.

opencv Medianfilter Beispiel 2

Die Gaußsche Unschärfe ist in Ordnung, aber nicht gut bei der Reinigung dieser Art von Rauschen, und technisch gesehen sollte der Medianfilter einen besseren Job machen. Wenn Sie genau hinsehen, sind alle ungefähr homogen grau, bis auf diesen einen Pixel, der als heller Pixel erscheint.

Wenn wir einen 3x3-Kernel anwenden und den Medianwert betrachten, betrachten wir die gesamte Umgebung dieses zentralen Pixels. Der Median aller dieser Zahlen in diesem roten Kästchen ist 140.

Wenn wir die 255 durch 140 ersetzen, erhalten wir ein sehr schönes einheitliches und homogenes Bild.

opencv Medianfilter Beispiel 3

Dies ist eine schnelle bildliche, grafische Darstellung, also lassen Sie uns in den Python-Code springen. Wir beginnen mit dem Importieren von cv2 und median aus skimage.filters, um die Verwendung des Medians in beiden Paketen zu demonstrieren.

Wir importieren zwei Bilder, ein Bild für Salt-and-Pepper und für die Größenänderung. Wir müssen die Methode medianBlur() verwenden, ihr ein Bild übergeben und die Kernelgröße auf 3 setzen.

import cv2
from skimage.filters import median

SP_IMG = cv2.imread("inp.tif", 0)
IMG = cv2.resize(SP_IMG, (720, 600))

IMG = IMG

Opencv_Median = cv2.medianBlur(IMG, 3)

Jetzt verwenden wir die gleiche Terminologie. Das skimage ist sehr ähnlich, außer dass es Ihren Kernel definiert und etwas verwendet, das wir Disk nennen.

Wir müssen die Methode median() aus dem Paket skimage aufrufen und ein Bild übergeben. Anstelle der Kernelgröße erstellen wir eine Festplattengröße.

Wenn wir eine Scheibe drucken, erstellt sie eine Matrix, in der null Pixel mit null multipliziert werden, und diese einen Pixel werden mit 1 multipliziert, wenn sie sich über Ihr Bild bewegen.

opencv Medianfilter Beispiel 4

Nun übergeben wir das Argument mode. Es ist nichts, aber wie gehen Sie mit den Endpixeln um, wenn dieser Kernel das Ende des Bildes erreicht?

Da sich rechts davon nichts befindet, werden einige Pixel mit einem konstanten Wert hinzugefügt.

Beispielcode:

from skimage.morphology import disk
import cv2
from skimage.filters import median

SP_IMG = cv2.imread("inp.tif", 0)
IMG = cv2.resize(SP_IMG, (720, 600))

IMG = IMG

Opencv_Median = cv2.medianBlur(IMG, 3)


print(disk(3))

SK_Median = median(IMG, disk(3), mode="constant", cval=0.0)

cv2.imshow("Original", IMG)
cv2.imshow("cv2 median", Opencv_Median)
cv2.imshow("Using skimage median", SK_Median)

cv2.waitKey(0)
cv2.destroyAllWindows()

Wir haben drei Ausgänge, und einer ist ein Originalbild mit etwas Gaußschem Rauschen.

opencv median filter ausgabe 1

Die zweite Ausgabe ist das Medianbild mit OpenCV. In dieser Ausgabe ist das Ergebnis besser als das Originalbild.

opencv-Medianfilterausgabe 2

Wenn wir uns die nächste Ausgabe mit dem skimage-Median ansehen, sieht sie sehr sauber aus, ohne Hintergrund.

opencv Medianfilterausgabe 3

Wir können beobachten, dass der skimage-Median noch besser aussieht als der OpenCV-Median, da die Kernelgröße für diesen Median etwas kleiner und im Vergleich zum Originalbild nicht sehr sauber ist. Warum sehen die mittleren Ausgabebilder von skimage und OpenCV nicht gleich aus?

Im skimage-Median definieren wir eine Festplattengröße und im OpenCV-Median definieren wir eine Kernelgröße.

Die Kerngrößen sind unterschiedlich; Daher sehen die Ausgaben etwas anders aus. Die Mathematik ist die gleiche, wenn Sie die gleiche Kernelgröße erhalten.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Verwandter Artikel - Python OpenCV