光流法

对光流法进行了一个大致的了解,并了解了在高速情况下通过图像金字塔进行光流计算的方法。

光流的定义

光流 是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。

光流法的原理

光流法的基本假设

  1. 亮度恒定不变,即同一目标在不同帧间运动时,其亮度不会发生改变。这是基本光流法的假定(所有光流法变种都必须满足),用于得到光流法基本方程
  2. 时间连续或运动是“小运动”,即时间的变化不会引起目标位置的剧烈变化,相邻帧之间位移要比较小。同样也是光流法不可或缺的假定。

基本约束方程

根据光流法的基本假设,可以推导得出光流法的基本约束方程。
  考虑一个三维的矩阵 II 其三个维度为 xx, yy, ttxx,yy 为图像的两个维度,tt 为时间维度。I(x,y,t)I(x,y,t) 表示 tt 时刻的图像在 (x,y)(x,y) 坐标上的灰度值。
  根据两个基本假设,可得到方程

I(x,y,t)=I(x+dx,y+dy,t+dt)I(x,y,t) = I(x+dx, y+dy, t+dt)

由于是小运动,因此可对 I(x+dx,y+dy,t+dt)I(x+dx, y+dy, t+dt) 进行泰勒展开,即

I(x+dx,y+dy,t+dt)=I(x,y,t)+Ixdx+Iydy+Itdt+ϵI(x+dx, y+dy, t+dt) = I(x,y,t) + \frac{\partial I}{\partial x}dx + \frac{\partial I}{\partial y}dy + \frac{\partial I}{\partial t}dt+\epsilon

结合上式,得到

Ixdx+Iydy+Itdt=0\frac{\partial I}{\partial x}dx + \frac{\partial I}{\partial y}dy + \frac{\partial I}{\partial t}dt=0

u=dxdtu=\frac{dx}{dt} v=dydtv=\frac{dy}{dt}, 得到

Ixdxdt+Iydydt+It=0\frac{\partial I}{\partial x}\frac{dx}{dt} + \frac{\partial I}{\partial y}\frac{dy}{dt} + \frac{\partial I}{\partial t}=0

Ixu+Iyv=ItI_x u+I_y v=-I_t

这就是光流的基本约束方程。

Lucas-Kanade 光流算法

  由于光流的基本约束方程 Ixu+Iyv=ItI_x u+I_y v=-I_t 只有一个约束,但是却有两个未知数,因此无法求解。为了能够求解出 (u,v)(u,v), 需要引入新的约束。
  Lucas-Kanade 光流算法引入了 空间一致 假设,即所有的相邻像素有相似的行动。也即在目标像素周围 m×mm\times m 的区域内,每个像素均拥有相同的光流矢量。以此假设解决式

Ixu+Iyv=ItI_x u+I_y v=-I_t

无法求解的问题。

LK光流法
具体推导过程,参考 总结:光流–LK光流–基于金字塔分层的LK光流–中值流


基于金字塔分层的 LK 光流法

  根据光流的基本假设 2,光流适用于 小运动 场景,即相邻帧之间运动较小。因此,光流法无法直接处理运动较大的情况。因此,在处理运动较大的情况时,需要通过图像金字塔的方式。
具体细节,同样参考 总结:光流–LK光流–基于金字塔分层的LK光流–中值流


基于光流的运动目标检测(前景检测)算法

基于光流的运动目标检测(前景检测)算法流程图
参考这篇文章 计算机视觉–光流法(optical flow)简介


Reference

总结:光流–LK光流–基于金字塔分层的LK光流–中值流
计算机视觉–光流法(optical flow)简介
【计算机视觉】光流法简单介绍


文章作者: taosean
文章链接: https://taosean.github.io/2019/02/25/optical-flow/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 taosean's 学习之旅