Entdecken Sie die Grundlagen des optischen Flusses in der Bildverarbeitung. Erfahren Sie, wie Bewegungsvektoren das Verständnis von Videos verbessern und die Verfolgung in Ultralytics optimieren.
Der optische Fluss ist das Muster der scheinbaren Bewegung von Objekten, Oberflächen und Kanten in einer visuellen Szene, das durch die relative Bewegung zwischen einem Beobachter und einer Szene verursacht wird. Im Bereich der Computervision ist dieses Konzept grundlegend für das Verständnis der zeitlichen Dynamik innerhalb von Videosequenzen. Durch die Analyse der Verschiebung von Pixeln zwischen zwei aufeinanderfolgenden Bildern erzeugen Optischer-Fluss-Algorithmen ein Vektorfeld, in dem jeder Vektor die Richtung und Größe der Bewegung für einen bestimmten Punkt darstellt. Dieser visuelle Hinweis auf niedriger Ebene ermöglicht es künstlichen Intelligenzsystemen, nicht nur zu erkennen, was sich in einem Bild befindet, sondern auch, wie es sich bewegt, wodurch die Lücke zwischen statischer Bildanalyse und dynamischem Videoverständnis geschlossen wird.
Die Berechnung des optischen Flusses basiert im Allgemeinen auf der Annahme der Helligkeitskonstanz, die davon ausgeht, dass die Intensität eines Pixels auf einem Objekt von einem Bild zum nächsten konstant bleibt, selbst wenn es sich bewegt. Algorithmen nutzen dieses Prinzip, um Bewegungsvektoren mit zwei primären Ansätzen zu berechnen:
Obwohl sie oft zusammen verwendet werden, ist es wichtig, den optischen Fluss von der Objektverfolgung zu unterscheiden. Der optische Fluss ist ein Low-Level-Vorgang , der die momentane Pixelbewegung beschreibt; er versteht von Natur aus weder die Identität noch die Persistenz von Objekten.
Im Gegensatz dazu ist die Objektverfolgung eine anspruchsvolle Aufgabe, bei der bestimmte Objekte lokalisiert und ihnen eine über die Zeit hinweg konsistente ID zugewiesen wird . Fortschrittliche Tracker, wie sie beispielsweise in Ultralytics integriert sind, führen in der Regel eine Objekterkennung durch, um das Objekt zu finden, und verwenden dann Bewegungshinweise – die manchmal aus dem optischen Fluss abgeleitet werden –, um Erkennungen über mehrere Frames hinweg zuzuordnen. Der optische Fluss beantwortet die Frage „Wie schnell bewegen sich diese Pixel gerade?“, während die Verfolgung die Frage „Wohin ist Auto Nr. 5 gefahren?“ beantwortet.
Die Fähigkeit, Bewegungen auf Pixelebene zu schätzen, ermöglicht eine Vielzahl hochentwickelter Technologien:
Das folgende Beispiel zeigt, wie man mit der OpenCV , einem Standardwerkzeug im Bereich Computer Vision, einen dichten optischen Fluss berechnet. Dieser Ausschnitt verwendet den Farneback-Algorithmus, um eine Flusskarte zwischen zwei aufeinanderfolgenden Frames zu generieren.
import cv2
import numpy as np
# Simulate two consecutive frames (replace with actual image paths)
frame1 = np.zeros((100, 100, 3), dtype=np.uint8)
frame2 = np.zeros((100, 100, 3), dtype=np.uint8)
cv2.rectangle(frame1, (20, 20), (40, 40), (255, 255, 255), -1) # Object at pos 1
cv2.rectangle(frame2, (25, 25), (45, 45), (255, 255, 255), -1) # Object moved
# Convert to grayscale for flow calculation
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)
# Calculate dense optical flow
flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)
# Compute magnitude and angle of 2D vectors
mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])
print(f"Max motion detected: {np.max(mag):.2f} pixels")
Für anspruchsvolle Anwendungen, die eher Objektpersistenz als reine Pixelbewegung erfordern, sollten Benutzer die in Ultralytics YOLO11 und YOLO26. Diese Modelle abstrahieren die Komplexität der Bewegungsanalyse und bieten robuste Objekt-IDs und Trajektorien für Aufgaben, die von der Verkehrsüberwachung bis zur Einzelhandelsanalyse reichen.