Explora los fundamentos del flujo óptico en la visión artificial. Descubre cómo los vectores de movimiento impulsan la comprensión de los vídeos y mejoran el seguimiento en Ultralytics .
El flujo óptico es el patrón de movimiento aparente de objetos, superficies y bordes en una escena visual causado por el movimiento relativo entre un observador y una escena. En el campo de la visión por computadora, este concepto es fundamental para comprender la dinámica temporal dentro de las secuencias de video. Al analizar el desplazamiento de píxeles entre dos fotogramas consecutivos, los algoritmos de flujo óptico generan un campo vectorial en el que cada vector representa la dirección y la magnitud del movimiento de un punto específico. Esta señal visual de bajo nivel permite a los sistemas de inteligencia artificial percibir no solo lo que hay en una imagen, sino también cómo se mueve, lo que acorta la distancia entre el análisis de imágenes estáticas y la comprensión dinámica de vídeos.
El cálculo del flujo óptico se basa generalmente en la suposición de la constancia del brillo, que postula que la intensidad de un píxel en un objeto permanece constante de un fotograma a otro, incluso cuando se mueve. Los algoritmos utilizan este principio para resolver los vectores de movimiento utilizando dos enfoques principales:
Aunque a menudo se utilizan conjuntamente, es fundamental distinguir el flujo óptico del seguimiento de objetos. El flujo óptico es una operación de bajo nivel que describe el movimiento instantáneo de los píxeles; no entiende de forma inherente la identidad o la persistencia de los objetos.
Por el contrario, el seguimiento de objetos es una tarea de alto nivel que localiza entidades específicas y les asigna un identificador coherente a lo largo del tiempo. Los rastreadores avanzados, como los integrados en Ultralytics , suelen realizar la detección de objetos para encontrar el objeto y, a continuación, utilizan señales de movimiento, a veces derivadas del flujo óptico, para asociar las detecciones entre fotogramas. El flujo óptico responde a la pregunta «¿a qué velocidad se mueven estos píxeles en este momento?», mientras que el seguimiento responde a la pregunta «¿adónde ha ido el coche n.º 5?».
La capacidad de estimar el movimiento a nivel de píxeles impulsa una amplia gama de tecnologías sofisticadas:
El siguiente ejemplo muestra cómo calcular el flujo óptico denso utilizando la OpenCV , una herramienta estándar en el ecosistema de la visión por ordenador . Este fragmento utiliza el algoritmo de Farneback para generar un mapa de flujo entre dos fotogramas consecutivos.
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")
Para aplicaciones de alto nivel que requieren persistencia de objetos en lugar de movimiento de píxeles sin procesar, los usuarios deben considerar los modos de seguimiento disponibles en Ultralytics YOLO11 y YOLO26. Estos modelos abstraen la complejidad del análisis de movimiento y proporcionan identificadores de objetos y trayectorias robustos y listos para usar en tareas que van desde la monitorización del tráfico hasta el análisis minorista.