Point Tracking
Beim Punktetracking werden ausgewählte Punkte durch ein Video verfolgt. Dabei wird für jedes Bild angegeben, wo sich jeder Punkt befindet und ob er sichtbar ist. Methoden, Modelle und Anwendungen.
Punktverfolgung ist eine Aufgabe der Computer Vision, bei der einzelne Punkte in einem Video verfolgt werden. Ausgehend von einem Abfragepunkt in einem Bild – etwa einem Fleck auf einem Ärmel oder einer Fensterecke – schätzt ein Tracker, wo derselbe physische Punkt in jedem anderen Bild erscheint und ob er sichtbar ist. In der neueren Forschung wird diese Aufgabe als Verfolgung beliebiger Punkte (TAP) bezeichnet, da jeder Pixel als Abfragepunkt dienen kann und nicht nur ein vorgegebener Schlüsselpunkt. Die Punktverfolgung verfolgt eine dünn besetzte Menge von Punkten über viele Bilder hinweg, auch bei Verdeckungen. Darin unterscheidet sie sich von der Objektverfolgung, bei der ganze Objekte als Begrenzungsrahmen mit IDs verfolgt werden, und vom optischen Fluss, der die Bewegung jedes Pixels zwischen zwei aufeinanderfolgenden Bildern schätzt.
So funktioniert Punktverfolgung#
Der klassische Kanade-Lucas-Tomasi-Tracker (KLT) sucht Ecken mit ausgeprägter Textur in zwei Richtungen, die sogenannten „good features to track“ nach Shi-Tomasi. Für jede Ecke wird im nächsten Bild die kleine Verschiebung berechnet, die den Bildausschnitt um die Ecke am besten ausrichtet. Eine Bildpyramide hilft dabei, größere Bewegungen zu verarbeiten. OpenCV implementiert beide Schritte:
import cv2
import numpy as np
# Read an overhead clip of people walking and pick 300 corners in its first frame
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/solutions_ci_demo.mp4")
prev = cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY)
points = cv2.goodFeaturesToTrack(prev, maxCorners=300, qualityLevel=0.01, minDistance=5)
start = points.copy()
# Follow every point frame to frame with pyramidal Lucas-Kanade optical flow
while (frame := cap.read()[1]) is not None:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
points, status, _ = cv2.calcOpticalFlowPyrLK(prev, gray, points, None)
found = status.ravel() == 1 # keep only the points found again
points, start, prev = points[found], start[found], gray
distance = np.linalg.norm(points - start, axis=-1)
print(f"{len(points)} of 300 points tracked to the last frame, median shift {np.median(distance):.1f} px")Die Ausgabe lautet 292 of 300 points tracked to the last frame, median shift 28.7 px: In den 62 Bildern des Clips verliert der Tracker acht Punkte. Die übrigen enden in einem Medianabstand von 28,7 Pixeln zu ihrem Ausgangspunkt. KLT vergleicht nur aufeinanderfolgende Bilder, sodass sich kleine Fehler aufsummieren. Außerdem erkennt der Tracker keine Verdeckungen: Ein Punkt auf dem Boden, den eine vorbeigehende Person verdeckt, kann auf die Person rutschen und trotzdem weiter gemeldet werden.
Lernbasierte Punkt-Tracker#
Deep-Learning-Tracker werten mehrere Bilder zugleich aus und sagen für jedes Bild eine Position und ein Sichtbarkeitskennzeichen voraus. Der Benchmark TAP-Vid definierte die Aufgabe 2022 anhand echter Videos, in denen Menschen Punktverläufe von Hand markiert hatten. PIPs (2022) verfeinert den Verlauf eines Punktes über Bildfenster hinweg, um kurze Verdeckungen zu überbrücken. TAPIR (2023) vergleicht zuerst die Merkmale des Abfragepunkts mit jedem Bild und verfeinert anschließend den Verlauf mithilfe des zeitlichen Kontexts. Metas CoTracker verfolgt viele Punkte gemeinsam mit einem Transformer. Dadurch unterstützen sich Punkte auf demselben Objekt gegenseitig, wenn einer von ihnen verdeckt ist. Da markierte Verläufe in echten Videos rar sind, wird CoTracker3 (2024) zunächst mit synthetischen Videos und anschließend mit echten Videos trainiert, die von anderen Trackern mit Pseudobeschriftungen versehen wurden. Das Modell erzielt laut Bericht bessere Ergebnisse als frühere Tracker, die mit 1.000-mal mehr Daten trainiert wurden.
Anwendungen in der Praxis#
Der Ultralytics-Track-Modus nutzt Punktverfolgung, um Kamerabewegungen bei der Verfolgung mehrerer Objekte auszugleichen. Der standardmäßig verwendete TrackTrack-Tracker und BoT-SORT wählen bis zu 400 Ecken pro Bild aus, verfolgen sie mit dem pyramidenbasierten Lucas-Kanade-Fluss und schätzen per RANSAC eine Drehung, Skalierung und Verschiebung (gmc_method: sparseOptFlow). Anschließend verschieben sie die vorhergesagte Box jeder Spur, bevor sie diese den neuen YOLO26-Erkennungen zuordnen.
- Visuelle Effekte: Matchmoving verfolgt Punkte in einer Szene, damit eingefügte Grafiken fest auf Oberflächen sitzen. Die Stabilisierung gleicht die Kamerabewegung aus, die anhand der verfolgten Punkte erkennbar wird.
- 3D-Rekonstruktion: Structure from Motion und visuelles SLAM triangulieren Punkte, die über mehrere Bilder hinweg verfolgt werden, um Kamerapositionen und Szenengeometrie zu rekonstruieren.
- Robotiklernen: Any-point Trajectory Modeling sagt voraus, wie sich Punkte in einer Szene während einer Aufgabe bewegen, und wandelt diese Verläufe in Roboteraktionen um. Über mehr als 130 Aufgaben hinweg übertrifft das Verfahren Vergleichsmethoden mit Videovortraining im Durchschnitt um etwa 80 %.










