返回 Ultralytics 词汇表
Optical Flow
探索计算机视觉中光流的基础知识。学习运动向量如何驱动视频理解并增强 Ultralytics YOLO26 中的跟踪能力。
光流是指视觉场景中物体、表面和边缘因观察者与场景之间的相对运动而产生的表观运动模式。在计算机视觉领域,这一概念对于理解视频序列中的时间动态至关重要。通过分析两个连续帧之间像素的位移,光流算法会生成一个向量场,其中每个向量代表特定点的运动方向和大小。这种底层的视觉线索使人工智能系统不仅能感知图像中的内容,还能感知其运动方式,从而架起了静态图像分析与动态视频理解之间的桥梁。
Link to this section光流的核心机制#
光流的计算通常依赖于亮度恒定假设,该假设认为物体上像素的亮度在从一帧移动到下一帧时保持不变。算法利用这一原理通过两种主要方法求解运动向量:
- 稀疏光流: 此方法计算通过特征提取检测到的特定特征子集(如角点或边缘)的运动向量。像Lucas-Kanade方法这类算法计算效率高,非常适合那些只需跟踪特定感兴趣点的实时推理任务。
- 稠密光流: 此方法计算帧中每个像素的运动向量。虽然其计算量大得多,但它能提供全面的运动图,这对于图像分割和结构分析等精细任务至关重要。现代深度学习架构通常通过从大型数据集中学习复杂的运动模式,在稠密流估计方面优于传统的数学方法。
Link to this section光流与目标跟踪#
虽然光流常与目标跟踪结合使用,但区分二者至关重要。光流是一种描述瞬时像素运动的底层操作,它本身并不理解对象的身份或持续性。
相比之下,目标跟踪是一项高层任务,旨在定位特定实体并随时间为其分配一致的ID。高级跟踪器(例如集成在Ultralytics YOLO26中的跟踪器)通常执行目标检测来找到目标,然后使用运动线索(有时源自光流)来关联跨帧的检测结果。光流回答的是“这些像素现在移动得有多快”,而跟踪回答的是“5号车去哪了?”
Link to this section实际应用#
在像素级别估计运动的能力推动了广泛的先进技术:
- 自动驾驶汽车和机器人: 光流用于视觉里程计,使机器人或汽车能够估计其相对于环境的自身运动。它还通过分析视野中物体的扩张或移动速度,辅助进行深度估计和避障。
- 视频稳定: 相机和编辑软件利用流向量来检测意外的相机抖动。通过补偿这种全局运动,系统可以对画面进行数字稳定。这是智能手机和运动相机等现代消费电子产品中的标准功能。
- 动作识别: 在体育分析和安防领域,分析像素的时间流有助于系统识别复杂的人类动作。例如,姿态估计模型可以利用流数据进行增强,根据肢体移动速度来区分行走和跑步。
- 视频压缩: MPEG视频编码等标准在很大程度上依赖于运动估计。编解码器不存储每一帧完整画面,而是存储光流(运动向量)和帧之间的差异(残差),从而显著减小了用于流媒体和存储的文件大小。
Link to this section实现示例#
以下示例演示了如何使用计算机视觉生态系统中的标准工具OpenCV库来计算稠密光流。此代码片段使用Farneback算法生成两个连续帧之间的流图。
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和轨迹。






