Whatsapp Telegram Telegram Call Anrufen

Merkmalsabgleich (Feature Matching)


Der Merkmalsabgleich ist ein wichtiger Prozess in der Bildverarbeitung, bei dem ähnliche Merkmale in verschiedenen Bildern identifiziert werden. Dies wird häufig in Anwendungen wie Objektverfolgung, Bildregistrierung und 3D-Rekonstruktion verwendet. OpenCV bietet mehrere Algorithmen zur Merkmalsextraktion und -beschreibung, darunter ORB, SIFT und SURF, sowie verschiedene Techniken zum Abgleichen dieser Merkmale.

1. ORB (Oriented FAST and Rotated BRIEF)

ORB ist ein schneller und effizienter Algorithmus zur Merkmalsextraktion und -beschreibung. Er kombiniert die FAST-Detektion (Features from Accelerated Segment Test) und den BRIEF-Deskriptor (Binary Robust Independent Elementary Features). ORB ist robust gegenüber Rotationen und Skalierungsinvarianz.

Beispiel: ORB-Feature Matching

import cv2
from matplotlib import pyplot as plt
# Installieren Sie diese Eingabe: "pip install opencv-contrib-python"
# Zwei Bilder laden
bild1 = cv2.imread('bild1.jpg', 0)  # 0 für Graustufen
bild2 = cv2.imread('bild2.jpg', 0)

# ORB-Detektor erstellen
orb = cv2.ORB_create()

# Merkmale und Deskriptoren berechnen
kp1, des1 = orb.detectAndCompute(bild1, None)
kp2, des2 = orb.detectAndCompute(bild2, None)

# Brute-Force Matcher erstellen und Merkmale abgleichen
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)

# Matches nach Distanz sortieren
matches = sorted(matches, key=lambda x: x.distance)

# Matches zeichnen
bild_matches = cv2.drawMatches(bild1, kp1, bild2, kp2, matches[:20], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

# Bild anzeigen
plt.figure(figsize=(12, 6))
plt.imshow(bild_matches, cmap='gray')
plt.title('ORB Feature Matching')
plt.axis('off')
plt.show()


Ausgabe:

ORB (Oriented FAST and Rotated BRIEF) OpenCV

2. SIFT (Scale-Invariant Feature Transform)

SIFT ist ein Algorithmus zur Merkmalsextraktion und -beschreibung, der robust gegenüber Skalierung, Rotation und Beleuchtungsveränderungen ist. SIFT ist jedoch patentiert und daher nicht in der Standard-OpenCV-Bibliothek enthalten, kann aber durch das opencv-contrib-python-Paket genutzt werden.

Beispiel: SIFT-Feature Matching

import cv2
from matplotlib import pyplot as plt

# SIFT-Algorithmus initialisieren
sift = cv2.SIFT_create()

# Zwei Bilder laden
bild1 = cv2.imread('bild1.jpg', 0)  # 0 für Graustufen
bild2 = cv2.imread('bild2.jpg', 0)

# Merkmale und Deskriptoren berechnen
kp1, des1 = sift.detectAndCompute(bild1, None)
kp2, des2 = sift.detectAndCompute(bild2, None)

# Brute-Force Matcher erstellen und Merkmale abgleichen
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)

# Lowe's ratio test anwenden
gute_matches = []
for m, n in matches:
    if m.distance < 0.75 * n.distance:
        gute_matches.append(m)

# Matches zeichnen
bild_matches = cv2.drawMatches(bild1, kp1, bild2, kp2, gute_matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

# Bild anzeigen
plt.figure(figsize=(12, 6))
plt.imshow(bild_matches, cmap='gray')
plt.title('SIFT Feature Matching')
plt.axis('off')
plt.show()


Ausgabe:

SIFT (Scale-Invariant Feature Transform) OpenCV

3. Matching-Techniken

Es gibt verschiedene Techniken zum Abgleichen von Merkmalen, darunter der Brute-Force-Matcher und der FLANN-basierte Matcher.

3.1. Brute-Force-Matcher

Der Brute-Force-Matcher vergleicht jeden Deskriptor in einem Satz mit jedem Deskriptor im anderen Satz, um die besten Übereinstimmungen zu finden.

Beispiel: Brute-Force-Matching mit ORB

import cv2
from matplotlib import pyplot as plt

# Zwei Bilder laden
bild1 = cv2.imread('bild1.jpg', 0)  # 0 für Graustufen
bild2 = cv2.imread('bild2.jpg', 0)

# ORB-Detektor erstellen
orb = cv2.ORB_create()

# Merkmale und Deskriptoren berechnen
kp1, des1 = orb.detectAndCompute(bild1, None)
kp2, des2 = orb.detectAndCompute(bild2, None)

# Brute-Force Matcher erstellen und Merkmale abgleichen
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)

# Matches nach Distanz sortieren
matches = sorted(matches, key=lambda x: x.distance)

# Matches zeichnen
bild_matches = cv2.drawMatches(bild1, kp1, bild2, kp2, matches[:20], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

# Bild anzeigen
plt.figure(figsize=(12, 6))
plt.imshow(bild_matches, cmap='gray')
plt.title('Brute-Force Matching mit ORB')
plt.axis('off')
plt.show()

Ausgabe:

Brute-Force-Matching mit ORB OpenCV

3.2. FLANN-basierter Matcher (Fast Library for Approximate Nearest Neighbors)

Der FLANN-basierte Matcher ist ein schnellerer und effizienterer Algorithmus, der insbesondere für große Datensätze geeignet ist.

Beispiel: FLANN-basiertes Matching mit SIFT

import cv2
from matplotlib import pyplot as plt

# Zwei Bilder laden
bild1 = cv2.imread('bild1.jpg', 0)  # 0 für Graustufen
bild2 = cv2.imread('bild2.jpg', 0)

# SIFT-Algorithmus initialisieren
sift = cv2.SIFT_create()

# Merkmale und Deskriptoren berechnen
kp1, des1 = sift.detectAndCompute(bild1, None)
kp2, des2 = sift.detectAndCompute(bild2, None)

# FLANN-basierter Matcher
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)

# Merkmale abgleichen
matches = flann.knnMatch(des1, des2, k=2)

# Lowe's ratio test anwenden
gute_matches = []
for m, n in matches:
    if m.distance < 0.75 * n.distance:
        gute_matches.append(m)

# Matches zeichnen
bild_matches = cv2.drawMatches(bild1, kp1, bild2, kp2, gute_matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

# Bild anzeigen
plt.figure(figsize=(12, 6))
plt.imshow(bild_matches, cmap='gray')
plt.title('FLANN-basiertes Matching mit SIFT')
plt.axis('off')
plt.show()

Ausgabe:

FLANN-basierter Matcher (Fast Library for Approximate Nearest Neighbors) OpenCV



Diese Methoden zur Merkmalsextraktion und -beschreibung sowie die verschiedenen Matching-Techniken sind äußerst nützlich für viele Anwendungen in der Bildverarbeitung und Computer Vision, wie z.B. Objektverfolgung, 3D-Rekonstruktion und Bildregistrierung. Indem Sie diese Techniken beherrschen, können Sie robuste und effiziente Lösungen für verschiedene Bildverarbeitungsprobleme entwickeln.



CEO Image

Ali Ajjoub

info@ajjoub.com

Adresse 0049-15773651670

Adresse Jacob-winter-platz,1 01239 Dresden

Buchen Sie jetzt Ihren Termin für eine umfassende und individuelle Beratung.

Termin Buchen

Kontaktieren Sie uns

Lassen Sie uns K o n t a k t aufnehmen!