OpenCV-Video-Hintergrundsubtraktion (MOG, MOG2)
Im Bereich der Computer Vision ist die Hintergrundsubtraktion eine häufig verwendete Technik zum Extrahieren von Vordergrundobjekten aus Videosequenzen.
Die Kernidee der Hintergrundsubtraktion besteht darin, den Hintergrund zu modellieren und dann den aktuellen Frame mit dem Hintergrundmodell zu vergleichen, um Vordergrundobjekte herauszutrennen.
OpenCV bietet mehrere Algorithmen zur Hintergrundsubtraktion, von denen MOG (Mischung von Gaußverteilungen) und MOG2 die beiden am häufigsten verwendeten Methoden sind.
Grundlegende Konzepte der Hintergrundsubtraktion
Die Hintergrundsubtraktion ist eine Technik, die für die Videoanalyse verwendet wird, hauptsächlich zur Erkennung bewegter Objekte in Videos. Ihr grundlegender Ablauf ist wie folgt:
- Hintergrundmodellierung: Durch die Analyse mehrerer Einzelbilder in einer Videosequenz wird ein Hintergrundmodell erstellt.
- Vordergrunderkennung: Vergleiche das aktuelle Einzelbild mit dem Hintergrundmodell, um Bereiche zu identifizieren, die signifikante Unterschiede zum Hintergrund aufweisen; diese Bereiche sind die Vordergrundobjekte.
- Hintergrundaktualisierung: Im Laufe der Zeit kann sich der Hintergrund ändern (z. B. Beleuchtungsänderungen, Bewegung von Hintergrundobjekten usw.), daher muss das Hintergrundmodell kontinuierlich aktualisiert werden.
MOG-Algorithmus (Mixture of Gaussians)
Prinzip
Der MOG-Algorithmus ist eine Methode zur Hintergrundsubtraktion auf Basis des Gaußschen Mischmodells (GMM). Seine Kernidee besteht darin, mehrere Gauß-Verteilungen zur Modellierung der Pixelwerte im Hintergrund zu verwenden. Jeder Pixelwert wird als Zufallsvariable betrachtet, deren Verteilung aus mehreren Gauß-Verteilungen zusammengesetzt ist. Auf diese Weise kann MOG komplexe Änderungen im Hintergrund handhaben, wie Beleuchtungsänderungen und Schatten.
Algorithmusschritte
- Initialisierung: Für jeden Pixel werden mehrere Gauß-Verteilungen initialisiert.
- Modellaktualisierung: Für jedes Einzelbild werden die Parameter der Gauß-Verteilungen (Mittelwert, Varianz, Gewicht) für jeden Pixel aktualisiert.
- Vordergrunderkennung: Vergleiche die Pixelwerte des aktuellen Einzelbildes mit den Gauß-Verteilungen im Hintergrundmodell. Wenn ein Pixelwert nicht in den Bereich einer der Gauß-Verteilungen fällt, wird er als Vordergrund markiert.
Implementierung in OpenCV
In OpenCV kann der MOG-Algorithmus mit dercv2.bgsegm.createBackgroundSubtractorMOG()Funktion zum Erstellen eines Hintergrundsubtraktors erstellt werden. Das Folgende ist ein einfacher Beispielcode:
Beispiel
# MOG-Hintergrundsubtraktor erstellen
mog = cv2.bgsegm.createBackgroundSubtractorMOG()
# Video lesen
cap = cv2.VideoCapture('video.mp4')
while True:
ret, frame = cap.read()
if not ret:
break
# Hintergrundsubtraktion anwenden
fg_mask = mog.apply(frame)
# Ergebnis anzeigen
cv2.imshow('Frame', frame)
cv2.imshow('FG Mask', fg_mask)
if cv2.waitKey(30) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
MOG2-Algorithmus (Mixture of Gaussians Version 2)
Prinzip
MOG2 ist eine verbesserte Version von MOG. Der Hauptunterschied besteht darin, dass es die Anzahl der Gauß-Verteilungen automatisch auswählen und sich besser an Hintergrundänderungen anpassen kann. Durch dynamische Anpassung der Anzahl und Parameter der Gauß-Verteilungen kann MOG2 den Hintergrund genauer modellieren und dadurch die Genauigkeit der Vordergrunderkennung verbessern.
Algorithmusschritte
- Initialisierung: Für jeden Pixel werden mehrere Gauß-Verteilungen initialisiert.
- Modellaktualisierung: Für jedes Frame die Parameter der Gauß-Verteilungen für jedes Pixel aktualisieren und die Anzahl der Gauß-Verteilungen nach Bedarf erhöhen oder verringern.
- Vordergrunderkennung: Vergleiche die Pixelwerte des aktuellen Einzelbildes mit den Gauß-Verteilungen im Hintergrundmodell. Wenn ein Pixelwert nicht in den Bereich einer der Gauß-Verteilungen fällt, wird er als Vordergrund markiert.
Implementierung in OpenCV
In OpenCV kann der MOG2-Algorithmus mit dercv2.createBackgroundSubtractorMOG2()Funktion zum Erstellen eines Hintergrundsubtraktors erstellt werden. Das Folgende ist ein einfacher Beispielcode:
Beispiel
# MOG2-Hintergrundsubtrahierer erstellen
mog2 = cv2.createBackgroundSubtractorMOG2()
# Video lesen
cap = cv2.VideoCapture('video.mp4')
while True:
ret, frame = cap.read()
if not ret:
break
# Hintergrundsubtraktion anwenden
fg_mask = mog2.apply(frame)
# Ergebnis anzeigen
cv2.imshow('Frame', frame)
cv2.imshow('FG Mask', fg_mask)
if cv2.waitKey(30) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Anwendungen der Hintergrundsubtraktion
Videoüberwachung:Wird verwendet, um sich bewegende Ziele in Überwachungsvideos zu erkennen, wie Fußgänger, Fahrzeuge usw.
-
Bewegungsanalyse:Wird verwendet, um die Bewegungsbahnen und Verhaltensweisen von Zielen in Videos zu analysieren.
-
Mensch-Computer-Interaktion:Wird verwendet, um Benutzergesten oder Gesichter zu erkennen, um Mensch-Computer-Interaktion zu ermöglichen.
Das Folgende ist ein vollständiger Beispielcode für die MOG2-Hintergrundsubtraktion:
Beispiel
# Video lesen
cap = cv2.VideoCapture("path/to/video.mp4")
# MOG2-Hintergrundsubtrahierer erstellen
fgbg = cv2.createBackgroundSubtractorMOG2()
while True:
ret, frame = cap.read()
if not ret:
break
# Hintergrundsubtrahierer anwenden
fgmask = fgbg.apply(frame)
# Ergebnis anzeigen
cv2.imshow("MOG2-Hintergrundsubtraktion", fgmask)
# Zum Beenden 'q' drücken
if cv2.waitKey(30) & 0xFF == ord('q'):
break
# Ressourcen freigeben
cap.release()
cv2.destroyAllWindows()
Vergleich von MOG und MOG2
Hintergrundsubtraktion ist eine wichtige Technik in der Videoanalyse, und MOG und MOG2 sind zwei häufig verwendete Algorithmen zur Hintergrundsubtraktion in OpenCV.
Der MOG-Algorithmus verwendet eine feste Anzahl von Gauß-Verteilungen zur Modellierung des Hintergrunds, was ihn für Szenen mit weniger Hintergrundänderungen geeignet macht, während der MOG2-Algorithmus die Anzahl und Parameter der Gauß-Verteilungen dynamisch anpasst, wodurch er sich besser an Hintergrundänderungen anpassen kann und für Szenen mit mehr Hintergrundänderungen geeignet ist.
| Merkmal | MOG | MOG2 |
|---|---|---|
| Anzahl der Gauß-Verteilungen | Festgelegt | Dynamisch angepasst |
| Geschwindigkeit der Hintergrundaktualisierung | Langsamer | Schneller |
| Fähigkeit zur Anpassung an Hintergrundänderungen | Schwächer | Stärker |
| Rechenkomplexität | Niedriger | Höher |
| Anwendbare Szenarien | Szenen mit weniger Hintergrundänderungen | Szenen mit mehr Hintergrundänderungen |