光流是计算机视觉(CV)中的一个基本概念,用于描述视觉场景中的物体、表面和边缘因观察者(如摄像机)与场景之间的相对运动而产生的明显运动。它计算一个向量场,代表视频序列中连续帧之间亮度模式(像素或特征)的位移。这为视频中的运动动态提供了宝贵的信息,为许多更高层次的视觉任务奠定了基础。
光流如何工作
大多数光流算法的核心假设是亮度恒定,即物体上特定点的亮度在短时间内保持恒定,即使它在图像平面上移动也是如此。算法从一帧到下一帧跟踪这些恒定的亮度模式,以估计运动矢量。常见的技术包括
这些方法提供了对像素运动的低层次理解,然后可以为各种应用进行解释。
光流的应用
光流在不同领域都有大量实际应用:
- 视频压缩:运动矢量有助于预测后续帧,从而减少存储或传输所需的数据量,如MPEG 等标准。
- 自主系统:在机器人和自动驾驶汽车中用于自我运动估计(确定摄像头自身的运动)、避障和了解其他物体的相对运动等任务。例如,自动驾驶汽车中的人工智能利用流跟踪附近的车辆和行人。
- 动作识别:分析运动模式有助于识别视频中的行走、跑步或跌倒等动作。这在监控、运动分析和人机交互中非常有用。安全警报系统可能会使用光流来检测可疑动作。了解有关动作识别研究的更多信息。
- 医学成像:在超声波或核磁共振成像等序列中跟踪器官或组织的运动,帮助诊断和分析。查看医学图像分析的更多信息。
- 视频稳定估算摄像机运动,以数字方式消除不必要的抖动和抖动,从而实现更流畅的视频输出。了解电子图像稳定技术。
光流与物体追踪
光流和物体追踪虽然相互关联,但却是截然不同的任务。光流为两个连续帧之间的像素或特征提供低层次的运动向量。它并不能从本质上理解物体的特性,也不能在较长时间内对物体进行跟踪。
物体跟踪通常使用以下模型 Ultralytics YOLO等模型进行物体跟踪,其重点是识别特定的物体实例(通常通过物体检测进行检测),并在多个帧(可能是长时间)中保持其特征和轨迹。跟踪算法经常使用光流作为输入(以及外观模型、卡尔曼滤波器等)来预测后续帧中的物体位置,但跟踪是一项更高层次的任务,涉及物体的持久性。您可以探索像YOLOv8 这样的跟踪模型。
OpenCV等库提供了各种光流算法的现成实现。