Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in Computer Vision mit Python (Teil 1)

Einführung in Computer Vision mit Python (Teil 1)

PHPz
PHPzOriginal
2024-09-10 06:44:02802Durchsuche

Hinweis: In diesem Beitrag werden wir nur mit Graustufenbildern arbeiten, um das Verfolgen zu erleichtern.

Was ist ein Bild?

Ein Bild kann man sich als eine Wertematrix vorstellen, wobei jeder Wert die Intensität eines Pixels darstellt. Es gibt drei Haupttypen von Bildformaten:

  • Binär: Ein Bild in diesem Format wird durch eine einzelne 2D-Matrix mit den Werten 0 (schwarz) und 1 (weiß) dargestellt. Es ist die einfachste Form der Bilddarstellung.

Introduction To Computer Vision with Python (Part 1)

  • Graustufen: In diesem Format wird ein Bild durch eine einzelne 2D-Matrix mit Werten zwischen 0 und 255 dargestellt; Dabei steht 0 für Schwarz und 255 für Weiß. Die Zwischenwerte stellen unterschiedliche Grautöne dar.

Introduction To Computer Vision with Python (Part 1)

  • RGB-Skala: Hier wird ein Bild durch drei 2D-Matrizen (eine für jeden Farbkanal: Rot, Grün und Blau) mit Werten zwischen 0 und 255 dargestellt. Jede Matrix enthält Pixelwerte für eine Farbkomponente, und die Kombination dieser drei Kanäle ergibt ein Vollfarbbild.

Introduction To Computer Vision with Python (Part 1)

Filter

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.

Mittlere Filter

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()

Introduction To Computer Vision with Python (Part 1)

Medianfilter

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()

Introduction To Computer Vision with Python (Part 1)

Benutzerdefinierte Filter

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()

Introduction To Computer Vision with Python (Part 1)

Schwellenwert

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:

Globale Schwellenwerte

Einfache Schwellenwertbestimmung

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()

Introduction To Computer Vision with Python (Part 1)

Otsu Thresholding

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()

Introduction To Computer Vision with Python (Part 1)

Adaptive Thresholding

Mean Adaptive Thresholding

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()

Introduction To Computer Vision with Python (Part 1)

Gaussian Adaptive Thresholding

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()

Introduction To Computer Vision with Python (Part 1)

References

  • Encord.com
  • Pyimagesearch.com
  • OpenCV Thresholding
  • OpenCV Filtering

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn