1. 什么是光流?

在处理视频流时,我们经常需要对画面中物体的运动进行量化和描述。实现这一目标的一个常用手段是光流(Optical Flow)估计

简单来说,光流是指两个连续图像帧之间像素点的运动矢量场。它描述了图像中每个像素点在时间上的位移变化,从而帮助我们理解物体在视频中的运动趋势。

这个概念最早由美国心理学家 James J. Gibson 在 20 世纪 40 年代提出,用于描述动物在环境中移动时所接收到的视觉刺激。在计算机视觉中,我们将其转化为一种数学模型,用于帮助计算机“理解”视频中的运动。

光流在多个领域都有重要应用,例如:

  • 摄像头图像防抖
  • 交通监控系统
  • 自动驾驶导航
  • 动作识别与跟踪

2. 示例说明

我们来看一个简单的例子:

光流示意图

图中展示了两个连续视频帧,一个箭头正向苹果移动。假设我们选取箭头尖端的一个像素点,在这两个帧之间,它在 x 轴和 y 轴上分别移动了 Δx 和 Δy 像素。我们希望估计出该像素点在时间 Δt 内的位移向量:

$$ I(x+\Delta x, y + \Delta y, t + \Delta t) $$

这就是我们想求解的光流。

3. 光流方程推导

要估计光流,我们首先假设图像中像素点的亮度在运动过程中保持不变。也就是说:

$$ I(x, y, t) = I(x+\Delta x, y + \Delta y, t + \Delta t) $$

接着,我们假设 Δx、Δy 和 Δt 都非常小,这样就可以使用泰勒展开近似表达右边的式子:

$$ I(x+\Delta x,y+\Delta y,t+\Delta t)=I(x,y,t)+\frac{\partial I}{\partial x}\Delta x+\frac{\partial I}{\partial y}\Delta y+\frac{\partial I}{\partial t}\Delta t+ \text{高阶项} $$

忽略高阶项后,得到:

$$ \frac{\partial I}{\partial x}\Delta x+\frac{\partial I}{\partial y}\Delta y+\frac{\partial I}{\partial t}\Delta t = 0 $$

再除以 Δt,可得:

$$ \frac{\partial I}{\partial x}V_x+\frac{\partial I}{\partial y}V_y+\frac{\partial I}{\partial t} = 0 $$

其中 $ V_x $ 和 $ V_y $ 分别表示像素在 x 和 y 方向上的速度分量,也就是我们要求的光流向量。

⚠️ 问题来了:这个方程有两个未知数 $ V_x $ 和 $ V_y $,但只有一个方程,无法直接求解。这被称为孔径问题(Aperture Problem)

4. 现代方法与进展

为了解决孔径问题,研究人员提出了多种方法:

传统方法

  • Lucas-Kanade 方法:通过在图像块(patch)上估计光流,而不是单个像素,从而增加约束条件。
  • Horn-Schunck 方法:引入全局平滑性约束,使光流在整幅图像上连续。

局限性

  • 传统方法对噪声敏感
  • 无法处理大位移或遮挡场景

现代方法: 近年来,随着深度学习的发展,基于神经网络的光流估计方法逐渐成为主流:

  • FlowNet:第一个将光流建模为端到端回归任务的深度网络
  • PWC-Net:结合金字塔处理、warpping 和上下文融合,性能更优
  • RAFT:通过迭代更新策略实现高精度光流估计

这些方法在多个公开数据集上达到了 SOTA(State-of-the-Art)水平,显著提升了光流估计的精度和鲁棒性。

5. 总结

本文我们介绍了光流的基本概念,并通过一个简单的例子解释了其应用。我们还从数学角度推导了光流方程,并指出了其固有的求解难题 —— 孔径问题。

尽管如此,研究人员通过传统方法和现代深度学习技术不断突破限制,使得光流成为计算机视觉中一个强大且实用的工具。无论你是从事图像处理、视频分析还是自动驾驶,理解光流都将为你的项目带来新的视角和能力。


原始标题:Introduction to Optical Flow