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. 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 wandelt ein Bild in ein Binärbild um, 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 von mehr 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()
Otsu's method determines the optimal threshold value automatically based on the histogram of the image. This method minimizes intra-class variance and maximizes inter-class variance. By setting the threshold value to 0 and using cv2.THRESH_OTSU, the function automatically calculates the best threshold value to separate the foreground from the background.
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()
In Mean Adaptive Thresholding, the threshold value for each pixel is calculated based on the average of pixel values in a local neighborhood around that pixel. This method adjusts the threshold dynamically across different regions of the image. The cv2.adaptiveThreshold() function calculates the threshold for each pixel based on the mean value of the pixel values in a local 11x11 neighborhood. A constant value of 2 is subtracted from this mean to fine-tune the threshold. This method is effective for images with varying lighting conditions.
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 computes the threshold value for each pixel based on a Gaussian-weighted sum of the pixel values in a local neighborhood. This method often provides better results in cases with non-uniform illumination. In Gaussian Adaptive Thresholding, the threshold is determined by a Gaussian-weighted sum of pixel values in an 11x11 neighborhood. The constant value 2 is subtracted from this weighted mean to adjust the threshold. This method is useful for handling images with varying lighting and shadows.
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()
Das obige ist der detaillierte Inhalt vonEinführung in Computer Vision mit Python (Teil 1). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!