Optical Flow
Изучи основы оптического потока в компьютерном зрении. Узнай, как векторы движения обеспечивают понимание видео и улучшают отслеживание в Ultralytics YOLO26.
Оптический поток — это закономерность кажущегося движения объектов, поверхностей и границ в визуальной сцене, вызванная относительным движением между наблюдателем и сценой. В области компьютерного зрения эта концепция имеет фундаментальное значение для понимания временной динамики в видеопоследовательностях. Анализируя смещение пикселей между двумя последовательными кадрами, алгоритмы оптического потока создают векторное поле, в котором каждый вектор представляет направление и величину движения для определённой точки. Этот низкоуровневый визуальный признак позволяет системам искусственного интеллекта воспринимать не только то, что находится на изображении, но и то, как оно движется, устраняя разрыв между анализом статичных изображений и динамическим пониманием видео.
Основные механизмы оптического потока#
Расчёт оптического потока обычно основывается на предположении о постоянстве яркости: интенсивность пикселя объекта остаётся неизменной от одного кадра к следующему, даже если объект движется. Алгоритмы используют этот принцип для вычисления векторов движения с помощью двух основных подходов:
- Разреженный оптический поток: этот метод вычисляет вектор движения для определённого набора отличительных признаков, таких как углы или границы, обнаруженных с помощью извлечения признаков. Такие алгоритмы, как метод Лукаса—Канаде, отличаются высокой вычислительной эффективностью и идеально подходят для задач инференса в реальном времени, где достаточно отслеживать отдельные интересующие точки.
- Плотный оптический поток: этот подход вычисляет вектор движения для каждого пикселя кадра. Хотя он значительно более требователен к вычислительным ресурсам, он создаёт полную карту движения, необходимую для детализированных задач, таких как сегментация изображений и анализ структуры. Современные архитектуры глубокого обучения часто превосходят традиционные математические методы оценки плотного потока, обучаясь сложным закономерностям движения на больших наборах данных.
Оптический поток и отслеживание объектов#
Хотя их часто используют вместе, важно различать оптический поток и отслеживание объектов. Оптический поток — это низкоуровневая операция, описывающая мгновенное движение пикселей; сам по себе он не распознаёт идентичность или сохранение объектов.
Напротив, отслеживание объектов — это высокоуровневая задача, которая обнаруживает определённые объекты и присваивает им постоянный ID во времени. Продвинутые трекеры, например интегрированные в Ultralytics YOLO26, обычно выполняют обнаружение объектов, чтобы найти объект, а затем используют признаки движения — иногда полученные из оптического потока, — для сопоставления обнаружений между кадрами. Оптический поток отвечает на вопрос «с какой скоростью эти пиксели движутся прямо сейчас», а отслеживание — на вопрос «куда делась машина №5?»
Практические применения#
Возможность оценивать движение на уровне пикселей лежит в основе широкого спектра сложных технологий:
- Автономные транспортные средства и робототехника: оптический поток используется для визуальной одометрии, позволяя роботу или автомобилю оценивать собственное движение относительно окружающей среды. Он также помогает оценивать глубину и избегать препятствий, анализируя, насколько быстро объекты в поле зрения увеличиваются или перемещаются.
- Стабилизация видео: камеры и программы для монтажа используют векторы потока для обнаружения непреднамеренной тряски камеры. Компенсируя это глобальное движение, системы могут цифровым способом стабилизировать видеозапись. Это стандартная функция современной бытовой электроники, например смартфонов и экшн-камер.
- Распознавание действий: в спортивной аналитике и системах безопасности анализ временного потока пикселей помогает системам распознавать сложные действия человека. Например, модели оценки позы можно дополнить данными о потоке, чтобы различать ходьбу и бег человека по скорости движения конечностей.
- Сжатие видео: такие стандарты, как кодирование видео MPEG, в значительной степени опираются на оценку движения. Вместо хранения каждого полного кадра кодек сохраняет оптический поток (векторы движения) и разницу (остаток) между кадрами, значительно уменьшая размер файлов для потоковой передачи и хранения.
Пример реализации#
В следующем примере показано, как вычислить плотный оптический поток с помощью библиотеки 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. Эти модели скрывают сложность анализа движения, сразу предоставляя надёжные ID объектов и траектории для задач от мониторинга дорожного движения до аналитики розничной торговли.









