Откройте для себя возможности Optical Flow в компьютерном зрении. Узнайте, как он оценивает движение, улучшает анализ видео и стимулирует инновации в области ИИ.
Оптический поток - это фундаментальная концепция в компьютерное зрение которая включает в себя оценку видимого движения объектов, поверхностей и краев в визуальной сцене. Это движение рассчитывается на основе относительного движения между наблюдателем (например, камерой) и самой сценой. Результатом этого процесса является векторное поле, в котором каждый вектор представляет собой смещение пикселя или объекта между двумя последовательными видеокадрами. Анализируя эти векторы движения, системы могут получить детальное, низкоуровневое понимание динамики сцены, отвечая на важнейший вопрос на критический вопрос о том, как пиксели перемещаются во времени.
Расчет оптического потока обычно основывается на предположении "постоянства яркости". Этот принцип утверждает, что интенсивность пикселей в определенной точке объекта остается постоянной между последовательными кадрами, даже когда даже при его перемещении. Алгоритмы используют это предположение для track перемещений. Существует два основных подхода к определению этих поля движения:
Важно отличать оптический поток от отслеживание объектовпоскольку они служат разным целям в конвейере технического зрения. Оптический поток - это низкоуровневая операция, которая описывает мгновенное перемещение пикселей без понимания того, что эти пиксели представляют. По своей сути он не сохраняет идентичность объекта с течением времени.
В отличие от этого, отслеживание объектов - это высокоуровневая задача, которая определяет местоположение конкретных объектов и присваивает им последовательный идентификатор во всех кадрах. Продвинутые режимы отслеживания, такие как те, что доступны в Ultralytics YOLO11обычно выполняют обнаружение объектов сначала, а затем используют сигналы движения, чтобы связать обнаруженные объекты. В то время как трекер может использовать оптический поток для предсказания положения, целью трекера является сохранение идентичности ("Куда поехала машина № 4?"), в то время как целью оптического потока является отображение движения отображение движения ("С какой скоростью эти пиксели движутся вправо?").
Оптический поток - это универсальный инструмент, используемый в различных отраслях промышленности для решения сложных задач, связанных с движением.
Следующий пример на Python демонстрирует, как вычислить плотный оптический поток, используя OpenCV библиотеки. Здесь используется алгоритм Гуннара Фарнебека, популярный метод оценки плотного потока.
import cv2
import numpy as np
# Load two consecutive frames (ensure these files exist)
frame1 = cv2.imread("frame1.jpg")
frame2 = cv2.imread("frame2.jpg")
# Convert frames to grayscale
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)
# Calculate dense optical flow using Farneback's algorithm
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"Flow shape: {flow.shape}") # Output: (Height, Width, 2)
print(f"Max motion magnitude: {np.max(mag):.2f} pixels")
Для пользователей, желающих интегрировать анализ движения с обнаружением объектов, Модели обнаруженияUltralytics могут быть объединены с алгоритмами потока для создания надежных аналитических конвейеров. В то время как оптический поток предоставляет исходные данные о движении, модели более высокого уровня, такие как YOLO11 обеспечивают семантическое понимание, необходимое для эффективной интерпретации движения. Продолжающиеся исследования и разработки таких моделей, как YOLO26 направлены на дальнейшее объединение пространственного и временного понимания для еще более быстрого сквозного анализа видео.