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






