Hinweis: In diesem Beitrag werden wir nur mit Graustufenbildern arbeiten, um das Verfolgen zu erleichtern.
Ein Bild kann man sich als eine Wertematrix vorstellen, wobei jeder Wert die Intensität eines Pixels darstellt. Es gibt drei Haupttypen von Bildformaten:
Filter sind Werkzeuge zum Ändern von Bildern durch Anwenden bestimmter Vorgänge. Ein Filter ist eine Matrix (auch Kernel genannt), die sich über das Bild bewegt und Berechnungen für die Pixelwerte in ihrem Fenster durchführt. Wir werden zwei gängige Filtertypen behandeln: Mittelwertfilter und Medianfilter.
Ein Mittelwertfilter wird verwendet, um Rauschen zu reduzieren, indem die Pixelwerte innerhalb eines Fensters gemittelt werden. Es ersetzt das mittlere Pixel im Fenster durch den Durchschnitt aller Pixelwerte in diesem Fenster. Die Funktion cv2.blur() wendet einen Mittelwertfilter mit einer Kernelgröße von 3x3 an, was bedeutet, dass sie ein 3x3-Pixelfenster um jedes Pixel herum berücksichtigt, um den Durchschnitt zu berechnen. Dies hilft bei der Glättung des Bildes.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Applies a Mean Filter of size 3 x 3 blurred_image = cv2.blur(image, (3, 3)) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(blurred_image, cmap='gray') plt.title('Mean Filtered Image') plt.axis("off") plt.show()
Ein Medianfilter wird verwendet, um Rauschen zu reduzieren, indem der Wert jedes Pixels durch den Medianwert aller Pixel in einem Fenster ersetzt wird. Es ist besonders wirksam bei der Beseitigung von Salz- und Pfeffergeräuschen. Die Funktion cv2.medianBlur() wendet einen Medianfilter mit einer Kernelgröße von 3 an. Diese Methode ersetzt jedes Pixel durch den Medianwert der Pixelwerte in seiner Nachbarschaft, was dabei hilft, Kanten beizubehalten und gleichzeitig Rauschen zu entfernen. Dabei gilt: Je größer die Kernelgröße, desto unschärfer wird das Bild.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Applies a Median Filter with a kernel size of 3 blurred_image = cv2.medianBlur(image, 3) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(blurred_image, cmap='gray') plt.title('Median Filtered Image') plt.axis("off") plt.show()
Sie können benutzerdefinierte Filter erstellen, um bestimmte Vorgänge auf Ihre Bilder anzuwenden. Mit der Funktion cv2.filter2D() können Sie einen beliebigen benutzerdefinierten Kernel auf ein Bild anwenden. Die Funktion cv2.filter2D() wendet einen benutzerdefinierten Kernel (Filter) auf das Bild an. Der Kernel ist eine Matrix, die die an den Pixelwerten auszuführende Operation definiert. In diesem Beispiel verbessert der Kernel bestimmte Funktionen des Bildes basierend auf den angegebenen Werten.
import cv2 import numpy as np import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) # Define a custom filter kernel kernel = np.array([[2, -1, 5], [-5, 5, -1], [0, -1, 0]]) filtered_image = cv2.filter2D(image, -1, kernel) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis('off') plt.subplot(1, 2, 2) plt.imshow(filtered_image, cmap='gray') plt.title('Filtered Image') plt.axis('off') plt.show()
Hinweis: In den Codeausschnitten sehen Sie _ , Bild, wenn Sie das Schwellenwertbild zuweisen. Dies liegt daran, dass die Funktion cv2.threshold zwei Werte zurückgibt: den verwendeten Schwellenwert und das mit einem Schwellenwert versehene Bild. Da wir nur das Schwellenwertbild benötigen, verwenden wir _, um den Schwellenwert zu ignorieren.
Thresholding konvertiert ein Bild in ein Binärbild, indem Pixelwerte basierend auf einer Bedingung festgelegt werden. Es gibt verschiedene Arten von Schwellenwerttechniken:
Diese Methode legt einen festen Schwellenwert für das gesamte Bild fest. Pixel mit Werten über dem Schwellenwert werden auf den Maximalwert (255) gesetzt, Pixel darunter auf 0. Die Funktion cv2.threshold() wird für die einfache Schwellenwertbildung verwendet. Pixel mit einer Intensität größer als 127 werden auf Weiß (255) gesetzt, und Pixel mit einer Intensität kleiner oder gleich 127 werden auf Schwarz (0) gesetzt, wodurch ein Binärbild entsteht.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) _, thresholded_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(thresholded_image, cmap='gray') plt.title('Thresholded Image') plt.axis("off") plt.show()
Otsus Methode ermittelt den optimalen Schwellenwert automatisch basierend auf dem Histogramm des Bildes. Diese Methode minimiert die Varianz innerhalb der Klasse und maximiert die Varianz zwischen den Klassen. Indem Sie den Schwellenwert auf 0 setzen und cv2.THRESH_OTSU verwenden, berechnet die Funktion automatisch den besten Schwellenwert, um den Vordergrund vom Hintergrund zu trennen.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) _, otsu_thresholded_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(otsu_thresholded_image, cmap='gray') plt.title("Otsu's Thresholded Image") plt.axis("off") plt.show()
Beim Mean Adaptive Thresholding wird der Schwellenwert für jedes Pixel basierend auf dem Durchschnitt der Pixelwerte in einer lokalen Nachbarschaft um dieses Pixel berechnet. Diese Methode passt den Schwellenwert dynamisch über verschiedene Bereiche des Bildes an. Die Funktion cv2.adaptiveThreshold() berechnet den Schwellenwert für jedes Pixel basierend auf dem Mittelwert der Pixelwerte in einer lokalen 11x11-Nachbarschaft. Zur Feinabstimmung des Schwellenwerts wird von diesem Mittelwert ein konstanter Wert von 2 subtrahiert. Diese Methode ist effektiv für Bilder mit unterschiedlichen Lichtverhältnissen.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) mean_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(mean_adaptive_thresholded_image, cmap='gray') plt.title('Mean Adaptive Thresholded Image') plt.axis("off") plt.show()
Gaussian Adaptive Thresholding berechnet den Schwellenwert für jedes Pixel basierend auf einer Gauß-gewichteten Summe der Pixelwerte in einer lokalen Nachbarschaft. Bei ungleichmäßiger Ausleuchtung liefert diese Methode oft bessere Ergebnisse. Beim Gaussian Adaptive Thresholding wird der Schwellenwert durch eine Gauß-gewichtete Summe von Pixelwerten in einer 11x11-Nachbarschaft bestimmt. Der konstante Wert 2 wird von diesem gewichteten Mittelwert subtrahiert, um den Schwellenwert anzupassen. Diese Methode eignet sich für den Umgang mit Bildern mit unterschiedlicher Beleuchtung und Schatten.
import cv2 import matplotlib.pyplot as plt image = cv2.imread('McLaren-720S-Price-1200x675.jpg', cv2.IMREAD_GRAYSCALE) gaussian_adaptive_thresholded_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) plt.subplot(1, 2, 1) plt.imshow(image, cmap='gray') plt.title('Original Image') plt.axis("off") plt.subplot(1, 2, 2) plt.imshow(gaussian_adaptive_thresholded_image, cmap='gray') plt.title('Gaussian Adaptive Thresholded Image') plt.axis("off") plt.show()
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3