Optical Flow
Исследуй основы оптического потока в компьютерном зрении. Узнай, как векторы движения управляют пониманием видео и улучшают трекинг в Ultralytics YOLO26.
Оптический поток — это паттерн видимого движения объектов, поверхностей и границ в визуальной сцене, вызванный относительным движением между наблюдателем и сценой. В области computer vision эта концепция фундаментальна для понимания временной динамики в видеопоследовательностях. Анализируя смещение пикселей между двумя последовательными кадрами, алгоритмы оптического потока создают векторное поле, где каждый вектор представляет направление и величину движения для конкретной точки. Этот низкоуровневый визуальный признак позволяет системам artificial intelligence воспринимать не просто то, что находится на изображении, но и то, как оно движется, преодолевая разрыв между статичным анализом изображений и динамическим video understanding.
Основные механизмы оптического потока#
Расчет оптического потока обычно опирается на допущение о постоянстве яркости, которое гласит, что интенсивность пикселя на объекте остается постоянной от кадра к кадру, даже при его движении. Алгоритмы используют этот принцип для решения уравнений движения векторов с помощью двух основных подходов:
- Sparse Optical Flow: Этот метод вычисляет вектор движения для определенного подмножества уникальных признаков, таких как углы или границы, обнаруженные с помощью feature extraction. Алгоритмы вроде Lucas-Kanade method вычислительно эффективны и идеально подходят для задач real-time inference, где отслеживания конкретных точек интереса достаточно.
- Dense Optical Flow: Этот подход вычисляет вектор движения для каждого отдельного пикселя в кадре. Несмотря на значительно большие вычислительные затраты, он предоставляет комплексную карту движения, необходимую для детальных задач, таких как image segmentation и структурный анализ. Современные архитектуры deep learning часто превосходят традиционные математические методы в оценке плотного потока за счет изучения сложных паттернов движения на больших наборах данных.
Оптический поток против отслеживания объектов#
Хотя они часто используются в тандеме, крайне важно отличать оптический поток от object tracking. Оптический поток — это низкоуровневая операция, описывающая мгновенное движение пикселей; он не закладывает в себя понимание идентичности или постоянства объектов.
В отличие от этого, трекинг объектов — это высокоуровневая задача, которая находит конкретные сущности и присваивает им постоянный ID с течением времени. Продвинутые трекеры, подобные интегрированным в Ultralytics YOLO26, обычно выполняют object detection для поиска объекта, а затем используют признаки движения (иногда получаемые из оптического потока) для сопоставления обнаружений между кадрами. Оптический поток отвечает на вопрос «насколько быстро движутся эти пиксели прямо сейчас», в то время как трекинг отвечает на вопрос «куда делась машина № 5?»
Реальные приложения#
Способность оценивать движение на уровне пикселей расширяет возможности целого ряда сложных технологий:
- Autonomous Vehicles и робототехника: Оптический поток используется для визуальной одометрии, позволяя роботу или автомобилю оценивать собственное движение относительно окружающей среды. Он также помогает в depth estimation и избегании препятствий путем анализа того, насколько быстро объекты в поле зрения расширяются или перемещаются.
- Стабилизация видео: Камеры и программы для монтажа используют векторы потока для обнаружения непреднамеренного трясения камеры. Компенсируя это глобальное движение, системы могут цифрово стабилизировать видеоматериал. Это стандартная функция в современной consumer electronics, такой как смартфоны и экшн-камеры.
- Action Recognition: В спортивной аналитике и системах безопасности анализ временного потока пикселей помогает системам распознавать сложные действия человека. Например, модели pose estimation могут быть дополнены данными потока, чтобы отличать ходьбу человека от бега на основе скорости движения конечностей.
- Сжатие видео: Стандарты вроде MPEG video coding сильно зависят от оценки движения. Вместо сохранения каждого полного кадра кодек сохраняет оптический поток (векторы движения) и разницу (остаток) между кадрами, что значительно уменьшает размеры файлов для стриминга и хранения.
Пример реализации#
Следующий пример демонстрирует, как вычислять плотный оптический поток с использованием OpenCV library — стандартного инструмента в экосистеме компьютерного зрения. Этот фрагмент кода использует алгоритм Фарнебека для создания карты потока между двумя последовательными кадрами.
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. Эти модели абстрагируют сложность анализа движения, предоставляя надежные ID и траектории объектов «из коробки» для задач от мониторинга дорожного движения до retail analytics.






