Point Tracking
Il tracciamento dei punti segue punti selezionati in un video e indica la posizione di ciascuno in ogni fotogramma e se è visibile. Metodi, modelli e applicazioni.
Il tracking dei punti è un compito di visione artificiale che consiste nel seguire singoli punti in un video: dato un punto di riferimento in un fotogramma, come una macchia su una manica o l'angolo di una finestra, un tracker stima dove appare lo stesso punto fisico in ogni altro fotogramma e se è visibile. La ricerca recente lo chiama tracking di qualsiasi punto (TAP), perché il punto di riferimento può essere un pixel qualsiasi anziché un keypoint predefinito. Il tracking dei punti segue un insieme sparso di punti per molti fotogrammi, anche in presenza di occlusioni; si distingue così dal tracking degli oggetti, che segue oggetti interi come bounding box con ID, e dal flusso ottico, che stima il movimento di ogni pixel tra due fotogrammi consecutivi.
Come funziona il tracking dei punti#
Il tracker classico Kanade-Lucas-Tomasi (KLT) seleziona angoli con texture marcate in due direzioni, le «good features to track» di Shi-Tomasi, e trova ciascuno nel fotogramma successivo risolvendo lo spostamento ridotto che allinea meglio la patch circostante; usa una piramide d'immagine per gestire movimenti più ampi. OpenCV implementa entrambi i passaggi:
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")Stampa 292 of 300 points tracked to the last frame, median shift 28.7 px: nei 62 fotogrammi della clip il tracker perde 8 punti, mentre i restanti terminano a una distanza mediana di 28,7 pixel dalla posizione iniziale. KLT confronta solo fotogrammi consecutivi, quindi i piccoli errori si accumulano, e non riconosce le occlusioni: un punto sul pavimento coperto da un passante può spostarsi su di lui e continuare a essere rilevato.
Tracker di punti basati su apprendimento#
I tracker basati sul deep learning ragionano su più fotogrammi contemporaneamente e prevedono una posizione e un indicatore di visibilità per ciascun fotogramma. Il benchmark TAP-Vid ha definito il compito nel 2022 con video reali contenenti traiettorie di punti annotate a mano. PIPs (2022) perfeziona la traiettoria di un punto su finestre di fotogrammi, così da superare brevi occlusioni; TAPIR (2023) confronta prima le feature del punto di riferimento con ogni fotogramma, poi perfeziona la traiettoria usando il contesto temporale. Il CoTracker di Meta segue congiuntamente molti punti tramite un Transformer, permettendo ai punti sullo stesso oggetto di aiutarsi quando uno di loro è nascosto. Le traiettorie annotate nei video reali sono rare, quindi CoTracker3 (2024) si addestra su video sintetici e poi su video reali con pseudo-etichette generate da altri tracker; riporta risultati migliori rispetto ai tracker precedenti addestrati con una quantità di dati mille volte maggiore.
Applicazioni nel mondo reale#
La modalità di tracking di Ultralytics usa il tracking dei punti per compensare il movimento della telecamera nel tracking di più oggetti: i tracker predefiniti TrackTrack e BoT-SORT selezionano fino a 400 angoli per fotogramma, li seguono con il flusso di Lucas-Kanade piramidale e stimano rotazione, scala e traslazione con RANSAC (gmc_method: sparseOptFlow); quindi spostano la box prevista di ogni traiettoria prima di abbinarla ai nuovi rilevamenti di YOLO26.
- Effetti visivi: Il matchmoving segue i punti di una scena affinché la grafica inserita resti ancorata alle superfici; la stabilizzazione annulla il movimento della telecamera rivelato dai punti tracciati.
- Ricostruzione 3D: La ricostruzione della struttura dal movimento e lo SLAM visivo triangolano i punti tracciati tra i fotogrammi per ricavare le pose della telecamera e la geometria della scena.
- Apprendimento robotico: Any-point Trajectory Modeling prevede come si muoveranno durante un'attività i punti della scena e trasforma queste traiettorie in azioni del robot, superando in media di circa l'80% le baseline di preaddestramento video in oltre 130 attività.










