Explore how optical flow enables motion analysis in computer vision. Learn about sparse vs. dense flow, real-world applications, and integration with YOLO26.
Оптический поток — это картина кажущегося движения объектов, поверхностей и краев в визуальной сцене, вызванная относительным движением между наблюдателем и сценой. В области компьютерного зрения это понятие имеет основополагающее значение для понимания временной динамики в видеопоследовательностях. Анализируя смещение пикселей между двумя последовательными кадрами, алгоритмы оптического потока генерируют векторное поле, в котором каждый вектор представляет направление и величину движения для определенной точки. Этот низкоуровневый визуальный сигнал позволяет системам искусственного интеллекта воспринимать не только то, что находится на изображении, но и то, как оно движется, преодолевая разрыв между анализом статического изображения и пониманием динамического видео.
Расчет оптического потока обычно основан на предположении о постоянстве яркости, которое предполагает, что интенсивность пикселя на объекте остается постоянной от кадра к кадру, даже когда он движется. Алгоритмы используют этот принцип для решения векторов движения с помощью двух основных подходов:
Хотя оптический поток и отслеживание объектов часто используются вместе, очень важно различать их. Оптический поток — это низкоуровневая операция, которая описывает мгновенное движение пикселей; он не понимает идентичность или постоянство объекта.
Напротив, отслеживание объектов — это высокоуровневая задача, которая заключается в поиске определенных объектов и присвоении им постоянного идентификатора в течение времени. Передовые трекеры, такие как те, которые интегрированы в Ultralytics , обычно выполняют обнаружение объектов, чтобы найти объект, а затем используют сигналы движения — иногда полученные из оптического потока — для сопоставления обнаружений в разных кадрах. Оптический поток отвечает на вопрос «как быстро движутся эти пиксели в данный момент», тогда как отслеживание отвечает на вопрос «куда уехал автомобиль № 5?»
Способность оценивать движение на уровне пикселей лежит в основе широкого спектра сложных технологий:
Следующий пример демонстрирует, как вычислить плотный оптический поток с помощью OpenCV , стандартного инструмента в экосистеме компьютерного зрения . В этом фрагменте кода используется алгоритм Фарнебака для генерации карты потока между двумя последовательными кадрами.
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")
Для приложений высокого уровня, требующих сохранения объектов, а не простого перемещения пикселей, пользователям следует рассмотреть режимы отслеживания, доступные в Ultralytics YOLO11 и YOLO26. Эти модели абстрагируют сложность анализа движения , предоставляя надежные идентификаторы объектов и траектории для задач, начиная от мониторинга дорожного движения и заканчивая аналитикой розничной торговли.