„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Einführung in Computer Vision mit Python (Teil 1)

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

Veröffentlicht am 05.11.2024
Durchsuche:673

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 dargestellt (eine für jeden Farbkanal: Rot, Grün und Blau) mit Werten zwischen 0 und 255. 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. 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()

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 konvertiert ein Bild in ein Binärbild, 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 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()

Introduction To Computer Vision with Python (Part 1)

Otsu-Schwellenwert

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

Introduction To Computer Vision with Python (Part 1)

Adaptive Schwellenwertbestimmung

Mittlerer adaptiver Schwellenwert

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

Introduction To Computer Vision with Python (Part 1)

Gaußsche adaptive Schwellenwertbestimmung

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

Introduction To Computer Vision with Python (Part 1)

Referenzen

  • Encord.com
  • Pyimagesearch.com
  • OpenCV-Schwellenwert
  • OpenCV-Filterung
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/thecspandz/introduction-to-computer-vision-with-python-part-1-2kd?1 Bei Verstößen wenden Sie sich zum Löschen bitte an [email protected] Es
Neuestes Tutorial Mehr>

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