光流法
光流法是计算机视觉中由图像序列估计像素运动的一类方法,它把相邻帧之间亮度模式的表观位移表示为二维速度矢量场。这一概念源于对生物视觉的观察,1981 年出现的 Horn-Schunck 全局方法与 Lucas-Kanade 局部方法奠定了其计算框架,此后被广泛用于目标跟踪、视频压缩、三维重建与视觉导航,并在 2015 年后逐步转向基于深度学习的估计方式。
定义
光流法是一类通过分析图像序列中像素亮度随时间的分布变化,估计各像素在相邻帧之间位移的方法,其结果通常表示为覆盖整幅图像的二维速度矢量场[1]。在这一矢量场中,每个向量对应一个图像点在两帧之间的表观位移,既可能来自物体自身的运动,也可能来自摄像机的运动[2]。
光流法所描述的是亮度模式在成像平面上的表观运动,而非三维场景中物体真实的运动;在有纹理的表面上两者大体一致,但在无纹理、反光或透明区域可能明显不同[3]。按结果形式可区分为逐像素给出速度的稠密光流与仅在特征点上给出速度的稀疏光流,前者更便于分割与三维重建等任务[4]。
原理
光流法的出发点是一条亮度恒定假设:同一场景点在相邻帧中移动后,其像素灰度基本不变[1]。据此可写出 $I(x,y,t)=I(x+dx,y+dy,t+dt)$,对右侧作一阶泰勒展开并除以 $dt$,得到光流约束方程 $I_x u+I_y v+I_t=0$,其中 $I_x$、$I_y$ 为空间梯度,$I_t$ 为时间梯度,$u$、$v$ 为待求的速度分量[5]。该方程在每个像素上只有一个,却含有两个未知量,因此必须引入额外约束才能求解[1]。
全局方法以 Horn-Schunck方法 为代表,它在整幅图像上构造能量函数,同时惩罚亮度恒定偏差和速度场的不平滑变化,通过变分法求出逐像素的稠密解,正则化系数越大速度场越平滑[6]。局部方法以 Lucas-Kanade方法 为代表,它假定一个小邻域内各点运动相同,用最小二乘法求解该邻域内多条约束构成的超定方程组[2]。
最小二乘解需要窗口内梯度矩阵可逆,因此纹理丰富的角点区域最利于跟踪,而沿边缘方向的运动分量难以单独确定。由于差分近似只适用于小位移,两类方法通常都在图像金字塔上由粗到细逐层计算,把大位移在低分辨率层化为小位移后逐步细化[1]。
深度学习方法则用卷积神经网络直接从一对图像回归位移场:FlowNet 引入相关层计算不同偏移下的特征相似度,PWC-Net 把金字塔、形变与代价体结合,RAFT 则在单一分辨率的相关体上用循环单元多次更新流量估计[3]。这类网络的训练与评测多依赖 FlyingChairs、MPI-Sintel、KITTI 等带真值的数据集[7]。
发展历程
光流这一概念于 20 世纪 50 年代由詹姆斯·吉布森在视觉知觉研究中提出,用于说明观察者运动时视野中光线的整体流动[1]。其计算形式则在 1981 年几乎同时确立:Berthold Horn 与 Brian Schunck 提出基于全局平滑约束的变分框架,Bruce Lucas 与 Takeo Kanade 提出基于局部窗口与最小二乘的配准方法[1]。
此后研究者针对上述框架的薄弱环节不断改进,包括为保持运动边界而设计的各向异性与亚二次正则项,以及用多尺度策略处理大位移[8]。为应对光照变化,又出现了基于颜色、色调等不变特征的数据项,以及把光照变化本身作为未知量加以估计的做法[8]。
2015 年,Dosovitskiy 等人提出的 FlowNet 首次证明可用通用卷积网络直接估计光流,但精度仍低于传统变分方法[9]。随后 FlowNet 2.0 加深网络结构,PWC-Net 将特征金字塔与形变引入网络以改善大位移估计,2020 年提出的 RAFT 以循环迭代细化在 Sintel 与 KITTI 基准上取得领先精度[10][3]。近年亦出现自监督与无监督训练方式,以降低对像素级真值的依赖[10]。
应用
在视频分析中,光流用于分离运动前景与静止背景,从而实现运动目标检测与跟踪;在摄像机自身运动的场景下,稠密光流同样能提供可用的运动线索[4]。Lucas-Kanade 一类局部方法常与特征点检测结合,逐帧跟踪角点,构成 KLT 跟踪器。
在三维视觉与导航中,光流可用于由运动恢复结构、估计相机的自主运动,以及为视觉里程计提供帧间位移,是自动驾驶与机器人避障的常用信息来源[2][11]。视频压缩中,H.261、MPEG-1/2 等标准传输的运动矢量可视为低分辨率的光流,被用于镜头切换检测、运动目标分割与摄像机推拉摇移的估计[12]。
在视频编码的运动补偿框架中,也有直接在压缩域数据上近似光流计算、以获得运动矢量场并给出置信度度量的做法,从而避免完整解码[13]。医疗影像方面,光流可用于分析超声或磁共振序列中心肌的运动;在航空热成像等场景中,光流也用于估计平台与目标的相对位移[7]。
局限
亮度恒定假设在实际场景中经常不成立:光源变化、阴影、镜面反射与透明物体都会让同一场景点的灰度发生改变,从而使约束方程出现系统偏差[3]。自动增益控制等相机内部处理也会改变帧间灰度,对依赖灰度匹配的估计造成干扰[7]。
光流约束方程本身的欠定性导致孔径问题:在只沿某一方向有灰度变化的区域,垂直于边缘的运动分量无法确定,这也是局部方法需要假定邻域运动一致的原因。差分线性化只对小位移有效,位移较大时基本假设失效,必须借助金字塔等粗到细策略补救[1]。
遮挡区域是另一类难点:被遮挡的像素在另一帧中没有对应点,任何基于匹配的估计都会在此产生错误,深度网络也难以完全避免[10]。此外,深度学习方法的精度依赖训练数据,真实场景的稠密光流真值极难获取,模型多以合成数据训练,在热成像、雾、阴影等与训练分布不同的条件下性能会下降[7]。
参见
-
Lucas-Kanade方法 —— 以局部窗口和最小二乘求解光流约束方程的经典算法。
-
Horn-Schunck方法 —— 以全局平滑正则化求解稠密光流的变分方法。
-
运动估计 —— 光流法所属的更广义的任务范畴。
-
目标跟踪 —— 光流常用于提供帧间对应关系的应用方向。
-
视频编码 —— 运动补偿与运动矢量估计的典型应用场景。
-
视觉里程计 —— 借助帧间运动估计推算相机自身运动的技术。
参考资料
- Optical flow | IEEE Technology Navigator [引用日期2026-10-19]
- 光流 (Optical Flow)# [引用日期2026-10-19]
- Motion estimation | IEEE Technology Navigator [引用日期2026-10-19]
- Image motion analysis | IEEE Technology Navigator [引用日期2026-10-19]
- OpenCV:光流 - OpenCV 電腦視覺函式庫 [引用日期2026-10-19]
- LOW RESOLUTION PDF: Images may show compression artifacts [引用日期2026-10-19]
- rob [引用日期2026-10-19]
- demetz-phd15(PDF) [引用日期2026-10-19]
- j.aas.c230049(PDF) [引用日期2026-10-19]
- Advance Deep Learning Approaches for Optical Flow Estimation [引用日期2026-10-19]
- nii.ac.jp 上的网页 [引用日期2026-10-19]
- textual-feature [引用日期2026-10-19]
- US7822231(PDF) [引用日期2026-10-19]