光流法:Farnback
现实世界中,万物都在在运动,且运动的速度和方向可能均不同,这就构成了运动场。物体的运动投影在图像上反应的是像素的移动。这种像素的瞬时移动速度就是光流。光流法是利用图像序列中的像素在时间域上的变化、相邻帧之间的相关性来找到的上一帧跟当前帧间存在的对应关系,计算出相邻帧之间物体的运动信息的一种方法。
光流法按照不同的实现方式可以分为:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法等。本文介绍的是一种基于梯度的经典光流方法:Farnback法。光流法的前提假设包括:相邻帧之间亮度恒定;相邻帧之间取时间连续或者运动变化微小;同一子图像中像素点具有相同的运动。
基本假设
假定图像序列记作
I(x,y,t)
,其中
X=[x,y]
。视频中的每个前后帧提取出来之后就是一个图像序列。假设图像亮度恒定,即图像亮度没有变化,则导数为0:
dI(X,t)dt=∂I∂X∂X∂t+∂I∂t=0
或者根据泰勒展开来得出上述式子:
I(X,t)=I(X+ΔX,t+Δt)≈I(X,t)+∂I∂XΔX+∂I∂tΔt∂I∂XΔX+∂I∂tΔt=0∂I∂XΔXΔt+∂I∂t=0∂I∂x∂x∂t+∂I∂y∂y∂t+∂I∂t=0
其中,在微小时间内
∂X∂t
或者
ΔXΔt
表示速度,可以记为:
∂X∂t=[∂x∂t,∂y∂t]=[u,v]=d
则有:
Ixu+Iyv+It=0[Ix Iy][uv]=−It
Farneback光流法
Farneback是一种基于梯度的方法,假设图像梯度恒定且假设局部光流恒定。局部光流恒定,即对于任意的
y∈N(x),d=∂X∂t不变
。梯度恒定即:
ddt∇I(X,t)=∂∇I∂X∂X∂t+∂∇I∂t=H(I)⋅d+(∇I)t=0
假设:
E(X,d)=||(H(I)⋅d+(∇I)t)||2
上式在最优值处有导数为0:
∂E∂d=0d=−(HT(I)H(I))−1(HT(I)(∇I)t)
若对时间离散化:
(后向差分)
(∇I)t(X,t)≈∇I(X,t)−∇I(X,t−1)
(时间中心差分)
(∇I)t(X,t−1/2)≈∇I(X,t)−∇I(X,t−1)H(I)(X,t−1/2)≈12(H(I)(X,t)+H(I)(X,t−1))
图像模型
图像一般是二维的(灰度图像),那么图像像素点的灰度值可以看成是一个二维变量的函数
f(x,y)
。假设以感兴趣的像素点为中心,构建一个局部坐标系(并不是针对整张图像)。对函数进行二项展开,可以近似为:
f(x,y)≈r1+r2x+r3y+r4x2+r5y2+r6xy=(xy)T(r4r6/2r6/2r5)(xy)+(r2r3)T(xy)+r1=xTAx+bTx+c(454)(455)(456)
其中,
x
为二维列向量,
A
为
2×2
的对称矩阵,
b
为
2×1
的矩阵。注意,此处的系数确定后只针对在确定点
(x,y)
而言,对于其他点可能并不适用,也就是说,每个像素点对应一组系数。
取该像素点的一个邻域(通常以该像素为中心,大小为
2n+1的方形区域
),利用这些像素点的值和坐标来进行系数的估计,估计的算法可以使用加权最小二乘法。加权是因为在邻域内,距中心越近的像素点与中心像素具有更大的相关性,而越远的点提供的信息越少。其实可以将邻域以外的像素点的权重都看成是0。
位移估计
考虑多项式扩展是在一个像素的邻域内,如果像素经过移动
d
后,则整个多项式应该会发生变化。
原始位置:
f1(x)=xTA1x+bT1x+c1
像素移动后:
f2(x)=f1(x−d)=(x−d)TA1(x−d)+bT1(x−d)+c1=xTA1x+(b1−2A1d)Tx+dTA1d−bT1d+c1=xTA2x+bT2x+c2
其中,
A2=A1b2=b1−2A1dc2=dTA1d−bT1d+c1
如果
A1
非奇异,则有上述的第二个式子可以得到:
d=−12A−11(b2−b1)
按照理论推导,其中必定有
A1=A2
,但实际情况中未必能满足这一项要求,因此可以通过来求平均来近似真实值。如果令:
A(x)=A1(x)+A2(x)2Δb(x)=−12(b2−b1)
那么:
A(x)d(x)=Δb(x)d=(ATA)−1(ATΔb)
可以构建目标函数来进行优化求得位移:
e(x)=||Ad−Δb||2
实际情况中,这种方法求得的结果中噪声太多,因此可以使用兴趣像素点的邻域,然后使用加权的目标函数:
e(x)=∑Δx∈Iw(Δx)||A(x+Δx)d−Δb(x+Δx)||2
Reference
[1] 图像分析之光流之经典
[2] Farneback 光流算法详解与 calcOpticalFlowFarneback 源码分析
[3] 光流Optical Flow介绍与OpenCV的实现
[4] 光流法简单介绍
[5] Farneback, 2003, Two-Frame Motion Estimation Based on Polynomial Expansion