前一篇文章建立了光流的基础:亮度恒常性假设和小运动假设共同导出了光流约束方程 Ixu+Iyv+It=0。一个方程、两个未知数,欠定问题的不同解决方式定义了不同的光流算法。LK 用局部空间一致性来约束,本篇的 Horn-Schunck 方法则走向了另一个方向——全局平滑性。
HS 的独特假设:全局平滑光流场#
Horn-Schunck(HS)引入了与 LK 完全不同的额外假设:
全局平滑性:同一物体表面的相邻像素通常属于同一运动,因此整个光流场是连续且平滑的。光流的突变只发生在运动边界处,而运动边界只占图像的很小一部分。
数学上,平滑性约束要求光流场的梯度尽可能小:
∥∇u∥2+∥∇v∥2≈0其中 ∇u=(∂u/∂x, ∂u/∂y),∇v 同理。
能量函数#
HS 将光流求解转化为一个能量泛函的极值问题,能量函数包含两项:
E(u,v)=数据项(Data Term)∬(Ixu+Iyv+It)2dxdy+平滑项(Smoothness Term)∬α(∥∇u∥2+∥∇v∥2)dxdy
- 数据项:光流必须满足约束方程,惩罚偏离亮度恒常性的区域。
- 平滑项:惩罚光流场的空间梯度,迫使相邻像素的光流趋于一致。
- α:平衡参数,控制两项的权重。α 很小 → 数据优先(可能产生噪点);α 很大 → 平滑优先(可能抹掉运动边界)。
在运动边界处,数据项希望光流突变以解释亮度变化,平滑项则阻止突变。没有任何一个 (u,v) 能让两项同时为 0,因此 HS 寻找的是使整体能量最小的折衷解。
欧拉-拉格朗日方程#
根据变分法,能量泛函 E=∬Ldxdy 取极值的必要条件是被积函数 L 满足欧拉-拉格朗日方程。记
L=(Ixu+Iyv+It)2+α(ux2+uy2+vx2+vy2)分别对 u 和 v 及其偏导数列出欧拉-拉格朗日方程:
⎩⎨⎧∂u∂L−dxd∂ux∂L−dyd∂uy∂L=0∂v∂L−dxd∂vx∂L−dyd∂vy∂L=0代入各项偏导数:
∂u∂L∂v∂L=2Ix(Ixu+Iyv+It),=2Iy(Ixu+Iyv+It),∂ux∂L∂vx∂L=2αux,=2αvx,∂uy∂L∂vy∂L=2αuy=2αvy得到两个 PDE:
⎩⎨⎧Ix(Ixu+Iyv+It)−α(uxx+uyy)=0Iy(Ixu+Iyv+It)−α(vxx+vyy)=0记拉普拉斯算子 ∇2u=uxx+uyy,∇2v=vxx+vyy:
α∇2u=Ix(Ixu+Iyv+It),α∇2v=Iy(Ixu+Iyv+It)
离散化与迭代求解#
在像素网格上,拉普拉斯算子可以用邻域平均近似:
∇2u≈uˉ−u,∇2v≈vˉ−v其中 uˉ 是像素 (x,y) 的四邻域平均光流:uˉ=41(u上+u下+u左+u右),vˉ 同理。
代入 PDE 得到迭代公式:
uk+1=uˉk−α+Ix2+Iy2Ix(Ixuˉk+Iyvˉk+It)vk+1=vˉk−α+Ix2+Iy2Iy(Ixuˉk+Iyvˉk+It)HS 算法流程#
- 初始化光流场 u0,v0=0
- 计算图像梯度 Ix,Iy 和时间梯度 It
- 对每个像素计算邻域平均 uˉk,vˉk
- 按迭代公式更新 uk+1,vk+1
- 重复 3–4 直到收敛(变化量小于阈值)或达到最大迭代次数
HS 的收敛速度相对较慢,但好处是不需要显式检测纹理特征,即使在平坦区域也能通过平滑项的扩散作用获得光流估计。
金字塔 LK:突破小运动假设#
标准 LK 依赖于小运动假设,当物体位移超过 2–3 个像素时,泰勒展开线性化失效。金字塔 LK 通过由粗到细的策略解除这一限制。
核心思路#
- 将图像构建为高斯金字塔,从上到下分辨率逐层增加。
- 在顶层(最小分辨率)运行标准 LK,大运动在顶层已经被缩放到小位移。
- 将顶层的计算结果映射到下一层作为初始猜测,对图像做 warp(扭曲)以抵消已估计的运动,剩余残差是微小位移,适用标准 LK。
- 逐层向下,每层做增量求解。
算法流程#
设图像金字塔共 n+1 层,L0 为原始图像,Ln 为顶层(最小分辨率)。
-
在顶层 Ln 上运行标准 LK,得到光流估计 gn=(un,vn)T。
-
从顶层向底层遍历 i=n−1,…,0:
- 将上一层光流映射到当前层:gi=2×gi+1(分辨率加倍,光流也加倍)。
- 用 gi 对第 2 帧图像做 warp(图像扭曲):I2′=I2(x+ui,y+vi)。
- warp 后的 I2′ 与第 1 帧已大致对齐,剩余运动 Δgi 落在小运动范围内,用标准 LK 求解残差光流。
- 本层实际光流:gi←gi+Δgi。
-
返回 g0 作为最终光流场。
为什么要 warp#
大运动导致灰度函数 I(x,y,t) 的变化是非线性的,直接对泰勒展开等效于假设线性,自然失败。warp 先将图像按已有的”粗略估计”搬过去,把大运动抵消掉,剩下的残差就足够小了。这本质上是一种增量求解的工程智慧。
:::tip 三种光流方法对比
| 维度 | LK(标准) | HS | 金字塔 LK |
|---|
| 解决欠定的方式 | 局部空间一致性 | 全局平滑性 | 同标准 LK |
| 独特假设 | 邻域内光流相同 | 全图光流平滑 | 多尺度+增量求解 |
| 小运动假设 | 依赖 | 依赖 | 不依赖(warp 消除大运动) |
| 纹理需求 | 强(角点/纹理区域) | 弱(平滑项可扩散) | 强(底层仍是 LK) |
| 平坦区域表现 | 失效 | 可估计(但不准确) | 失效 |
| 计算方式 | 闭式最小二乘 | 迭代求解 | 逐层 LK + warp |
:::
:::tip 光流假设层级总结
所有方法共享亮度恒常性+小运动→光流约束方程Ixu+Iyv+It=0⎩⎨⎧LK: + 局部空间一致性→最小二乘闭式解HS: + 全局平滑性→能量泛函 + 迭代解Pyr-LK: + 局部空间一致性+图像金字塔 + warp→大运动兼容:::