Point Tracking
El seguimiento de puntos sigue puntos seleccionados a lo largo de un vídeo e indica dónde está cada uno en cada fotograma y si es visible. Descubre sus métodos, modelos y usos.
El seguimiento de puntos es la tarea de visión artificial que consiste en seguir puntos individuales a lo largo de un vídeo: dado un punto de consulta en un fotograma, como una marca en una manga o la esquina de una ventana, un rastreador estima dónde aparece ese mismo punto físico en todos los demás fotogramas y si es visible. La investigación reciente lo denomina seguimiento de cualquier punto (TAP), porque el punto de consulta puede ser cualquier píxel, en lugar de un punto clave predefinido. El seguimiento de puntos sigue un conjunto disperso de puntos a lo largo de muchos fotogramas, incluso cuando hay oclusiones, lo que lo distingue del seguimiento de objetos, que sigue objetos completos mediante cajas delimitadoras con IDs, y del flujo óptico, que estima el movimiento de cada píxel entre dos fotogramas consecutivos.
Cómo funciona el seguimiento de puntos#
El rastreador clásico Kanade-Lucas-Tomasi (KLT) selecciona esquinas con una textura intensa en dos direcciones, las «buenas características para seguir» de Shi-Tomasi, y localiza cada una en el siguiente fotograma resolviendo el pequeño desplazamiento que mejor alinea el parche que la rodea; para gestionar movimientos mayores, utiliza una pirámide de imágenes. OpenCV implementa ambos pasos:
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")Imprime 292 of 300 points tracked to the last frame, median shift 28.7 px: a lo largo de los 62 fotogramas del clip, el rastreador pierde 8 puntos y los demás acaban a una mediana de 28,7 píxeles de su posición inicial. KLT solo compara fotogramas consecutivos, por lo que los pequeños errores se acumulan, y no contempla las oclusiones: un punto del suelo tapado por alguien que pasa puede desplazarse hasta esa persona y seguir apareciendo en el resultado.
Rastreadores de puntos basados en aprendizaje#
Los rastreadores de aprendizaje profundo analizan varios fotogramas a la vez y predicen una posición y un indicador de visibilidad para cada fotograma. El benchmark TAP-Vid definió la tarea en 2022 con vídeos reales cuyas trayectorias de puntos se etiquetaron a mano. PIPs (2022) refina la trayectoria de un punto en ventanas de fotogramas para sortear oclusiones breves, y TAPIR (2023) primero empareja las características del punto de consulta con las de cada fotograma y luego refina el seguimiento con contexto temporal. El CoTracker de Meta sigue conjuntamente muchos puntos mediante un transformador, de modo que los puntos de un mismo objeto se ayudan mutuamente cuando uno de ellos queda oculto. Las trayectorias etiquetadas en vídeos reales son escasas, así que CoTracker3 (2024) se entrena con vídeos sintéticos y después con vídeos reales etiquetados con pseudoetiquetas por otros rastreadores, y obtiene mejores resultados que los rastreadores anteriores entrenados con 1.000 veces más datos.
Aplicaciones en el mundo real#
El modo de seguimiento de Ultralytics utiliza el seguimiento de puntos para cancelar el movimiento de la cámara en el seguimiento de varios objetos: sus rastreadores predeterminados TrackTrack y BoT-SORT seleccionan hasta 400 esquinas por fotograma, las siguen con flujo piramidal de Lucas-Kanade y ajustan una rotación, una escala y una traslación con RANSAC (gmc_method: sparseOptFlow); después desplazan la caja predicha de cada seguimiento antes de asociarla a las nuevas detecciones de YOLO26.
- Efectos visuales: El seguimiento de movimiento de cámara sigue puntos de una escena para que los gráficos insertados queden anclados a las superficies, y la estabilización cancela el movimiento de cámara que revelan los puntos seguidos.
- Reconstrucción 3D: La estructura a partir del movimiento y la localización y mapeo simultáneos visuales (SLAM) triangulan puntos seguidos a lo largo de varios fotogramas para recuperar las poses de la cámara y la geometría de la escena.
- Aprendizaje robótico: Any-point Trajectory Modeling predice cómo se moverán los puntos de la escena durante una tarea y convierte esos seguimientos en acciones del robot; supera en aproximadamente un 80 % de media a las referencias de preentrenamiento con vídeo en más de 130 tareas.










