Point Tracking
O seguimento de pontos acompanha pontos escolhidos ao longo de um vídeo e indica onde está cada um em cada fotograma e se está visível. Métodos, modelos e aplicações.
O rastreamento de pontos é a tarefa de visão computacional que acompanha pontos individuais ao longo de um vídeo: dado um ponto de consulta em um quadro — como uma mancha em uma manga ou o canto de uma janela —, um rastreador estima onde esse mesmo ponto físico aparece em todos os outros quadros e se está visível. Pesquisas recentes chamam essa tarefa de rastreamento de qualquer ponto (TAP), pois a consulta pode ser qualquer pixel, em vez de um ponto-chave predefinido. O rastreamento de pontos acompanha um conjunto esparso de pontos por muitos quadros, inclusive durante oclusões. Isso o diferencia do rastreamento de objetos, que acompanha objetos inteiros como caixas delimitadoras com IDs, e do fluxo óptico, que estima o movimento de cada pixel entre dois quadros consecutivos.
Como funciona o rastreamento de pontos#
O rastreador clássico Kanade-Lucas-Tomasi (KLT) seleciona cantos com textura intensa em duas direções — as «boas características para rastrear» de Shi-Tomasi — e encontra cada um no quadro seguinte calculando o pequeno deslocamento que melhor alinha o recorte ao redor do ponto. Para lidar com movimentos maiores, usa uma pirâmide de imagens. O OpenCV implementa as duas etapas:
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")Ele imprime 292 of 300 points tracked to the last frame, median shift 28.7 px: ao longo dos 62 quadros do clipe, o rastreador perde 8 pontos, e os restantes terminam a uma distância mediana de 28.7 pixels do ponto inicial. O KLT compara apenas quadros consecutivos, por isso os pequenos erros se acumulam, e não tem noção de oclusão: um ponto no chão que um pedestre encobre pode deslizar para cima do pedestre e continuar sendo detectado.
Rastreadores de pontos aprendidos#
Os rastreadores de aprendizado profundo raciocinam sobre muitos quadros ao mesmo tempo e preveem uma posição e um indicador de visibilidade para cada quadro. O benchmark TAP-Vid definiu a tarefa em 2022 com vídeos reais cujas trajetórias de pontos foram rotuladas manualmente. O PIPs (2022) refina a trajetória de um ponto em janelas de quadros para atravessar oclusões breves, e o TAPIR (2023) primeiro compara as características do ponto de consulta com cada quadro e, em seguida, refina a trajetória usando o contexto temporal. O CoTracker da Meta rastreia vários pontos em conjunto com um transformer, permitindo que pontos no mesmo objeto se ajudem quando um deles fica oculto. Como há poucas trajetórias rotuladas em vídeos reais, o CoTracker3 (2024) é treinado com vídeos sintéticos e, em seguida, com vídeos reais rotulados por pseudorrótulos gerados por outros rastreadores. O método apresenta resultados melhores que os de rastreadores anteriores treinados com 1.000 vezes mais dados.
Aplicações no mundo real#
O modo de rastreamento do Ultralytics usa o rastreamento de pontos para cancelar o movimento da câmera no rastreamento de múltiplos objetos: o rastreador TrackTrack, padrão, e o BoT-SORT selecionam até 400 cantos por quadro, acompanham-nos com o fluxo Lucas-Kanade piramidal e ajustam rotação, escala e translação com RANSAC (gmc_method: sparseOptFlow). Em seguida, deslocam a caixa prevista de cada trajetória antes de associá-la às novas detecções do YOLO26.
- Efeitos visuais: O matchmoving rastreia pontos de uma cena para que os gráficos inseridos permaneçam fixos às superfícies, enquanto a estabilização cancela o movimento da câmera revelado pelos pontos rastreados.
- Reconstrução 3D: A estrutura a partir do movimento e o SLAM visual triangulam pontos rastreados em vários quadros para recuperar as poses da câmera e a geometria da cena.
- Aprendizado robótico: A modelagem de trajetórias de qualquer ponto prevê como os pontos da cena se moverão durante uma tarefa e converte essas trajetórias em ações do robô. Em média, supera em cerca de 80% as referências de pré-treinamento com vídeo em mais de 130 tarefas.










