Die Merkmalsdetektion ist ein grundlegender Schritt in der Bildverarbeitung, der verwendet wird, um interessante Punkte in Bildern zu identifizieren. Diese Merkmale können Ecken, Kanten oder Konturen sein und dienen als Basis für viele weiterführende Bildverarbeitungs- und Computer Vision-Aufgaben wie Objektverfolgung, Bildregistrierung und Mustererkennung.
1. Ecken, Kanten und Konturen
Kanten: Kanten sind Orte im Bild, an denen die Helligkeit stark variiert. Die Kanten eines Objekts liefern wichtige Informationen über seine Form. In OpenCV kann die Kantenverfolgung mit dem Canny-Algorithmus durchgeführt werden.
1.2 Beispiel: Kanten mit Canny
import cv2
from matplotlib import pyplot as plt
# Ein Bild laden
bild = cv2.imread('beispielbild.jpg', 0) # 0 für Graustufen
# Canny-Kantendetektion anwenden
kanten = cv2.Canny(bild, 100, 200)
# Originales und Kantendetektionsbild anzeigen
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(bild, cmap='gray')
plt.title('Originales Bild')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(kanten, cmap='gray')
plt.title('Canny-Kantendetektion')
plt.axis('off')
plt.show()
Ausgabe:

Konturen:
Konturen sind Kurven, die alle kontinuierlichen Punkte mit derselben Farbe oder Intensität verbinden. OpenCV bietet die Funktion cv2.findContours()
zum Erkennen von Konturen.
1.2 Beispiel: Konturen finden und zeichnen
import cv2
from matplotlib import pyplot as plt
# Ein Bild laden
bild = cv2.imread('beispielbild.jpg', 0) # 0 für Graustufen
# Bild binärschwellen
ret, thresh = cv2.threshold(bild, 127, 255, cv2.THRESH_BINARY)
# Konturen finden
konturen, hierarchie = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# Konturen auf dem Bild zeichnen
bild_konturen = cv2.cvtColor(bild, cv2.COLOR_GRAY2BGR)
cv2.drawContours(bild_konturen, konturen, -1, (0, 255, 0), 2)
# Originales und Konturenbild anzeigen
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(bild, cmap='gray')
plt.title('Originales Bild')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(bild_konturen)
plt.title('Konturen gefunden')
plt.axis('off')
plt.show()
Ausgabe:

2. Harris-Eckendetektor (Harris Corner Detection)
Der Harris-Eckendetektor ist ein bekannter Algorithmus zur Eckendetektion. Er erkennt Ecken basierend auf der Veränderung der Intensität in alle Richtungen.
Beispiel: Harris-Eckendetektion

3. Shi-Tomasi-Eckendetektor (Shi-Tomasi Corner Detector)
Der Shi-Tomasi-Eckendetektor ist eine Verbesserung des Harris-Eckendetektors. Er verwendet das Minimum der Eigenwerte der Gradientenmatrix, um die Ecken zu bestimmen.
Beispiel: Shi-Tomasi-Eckendetektion
import cv2
from matplotlib import pyplot as plt
# Installieren Sie numpy, falls es noch nicht installiert ist.
import numpy as np
# Ein Bild laden
bild = cv2.imread('beispielbild.jpg')
grau = cv2.cvtColor(bild, cv2.COLOR_BGR2GRAY)
# Shi-Tomasi-Eckendetektion anwenden
ecken = cv2.goodFeaturesToTrack(grau, 25, 0.01, 10)
ecken = np.int0(ecken)
# Ecken auf dem Originalbild markieren
bild_markiert = bild.copy()
for ecke in ecken:
x, y = ecke.ravel()
cv2.circle(bild_markiert, (x, y), 3, (0, 255, 0), -1)
# BGR zu RGB für die Anzeige in Matplotlib
bild_rgb = cv2.cvtColor(bild, cv2.COLOR_BGR2RGB)
bild_markiert_rgb = cv2.cvtColor(bild_markiert, cv2.COLOR_BGR2RGB)
# Originales und Eckendetektionsbild anzeigen
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(bild_rgb)
plt.title('Originales Bild')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(bild_markiert_rgb)
plt.title('Shi-Tomasi-Eckendetektion')
plt.axis('off')
plt.show()
Ausgabe:

Diese Merkmalsdetektionsmethoden sind nützlich für viele Anwendungen in der Bildverarbeitung und Computer Vision, wie z.B. der Objekterkennung, Bewegungsverfolgung und 3D-Rekonstruktion. Indem Sie die grundlegenden Konzepte und Algorithmen verstehen und anwenden, können Sie robuste und effiziente Lösungen für verschiedene Bildverarbeitungsprobleme entwickeln.