1.LK光流法原理分析
光流法是一种根据时域上连续图像间的相关性来描述像素在前后两帧中的瞬时速度的方法,可用来完成特征点的追踪。稀疏(Lucas–Kanade,LK)光流算法是计算机视觉中常用的一种两帧间差分的光流估计算法。
LK光流法不是没有条件限制的,它的应用必须基于以下三个假设:
1.灰度不变假设:在不同图像的重叠区域中,重叠像素点的灰度值是恒定不变的。这是光流法进行数学原理推导的基本。
2.小运动:运动比较轻微时,像素位置随时间的变化不会过于剧烈。此时,前后两帧间位置的变化导致的灰度值变化可以近似为灰度对位置的偏导数。
3.空间一致性:真实场景中相邻的区域即使投影到二维图像中,仍然是相邻的图像区域。此区域中,邻近点的速度是相同的。这个假设是很有必要的,因为LK光流法要求取x,y(x和y都是未知数)方向上的速度。一个方程无法求解两个未知数,所以可以根据空间一致性假设,利用n个临近像素点联立n方程,通过最小二乘法给出最终结果。
假设获取上一帧和下一帧图像的时间分别为 t 和 t+dt,某像素点在上一帧和下一帧的位置分别为I(x,y,z,t)和I(x+dx,y+dy,z+dz,t+dt)。
根据灰度不变假设得,
I(x,y,z,t)=I(x+dx,y+dy,z+dz,t+dt)
根据小运动假设,对上式进右侧行泰勒级数展开,
I(x+dx,y+dy,z+dz,t+dt)=I(x,y,z,t)+∂x∂Idx+∂y∂Idy+∂z∂Idz+∂t∂Idt
根据以上两式可得,
∂x∂Idx+∂y∂Idy+∂z∂Idz+∂t∂Idt=0
上式两边同时除以dt,且令dtdx=Vx ,dtdy=Vy,dtdz=Vz得,
∂x∂IVx+∂y∂IVy+∂z∂IVz+∂t∂I=0
在二维图像中,可以忽略z,只需保留x,y,t 即可,其中 ∂x∂I ,∂y∂I ,∂t∂I 可表示为图像在(x,y,t)方向的差分,令∂x∂I=Ix,∂y∂I=Iy,∂t∂I=It,上式可写为如下形式:
IxVx+IyVy=−It
现在有两个未知数,却只有一个方程,所以根据空间一致性假设,选取3×3窗口内的9个像素点联立,建立方程式,如下,
⎣⎢⎢⎢⎡Ix1Ix2⋮Ix9Iy1Iy2⋮Iy9⎦⎥⎥⎥⎤[VxVy]=⎣⎢⎢⎢⎡−It1−It2⋮−It9⎦⎥⎥⎥⎤
令A=⎣⎢⎢⎢⎡Ix1Ix2⋮Ix9Iy1Iy2⋮Iy9⎦⎥⎥⎥⎤,V=[VxVy],b=⎣⎢⎢⎢⎡−It1−It2⋮−It9⎦⎥⎥⎥⎤,所以,这是超定方程,采用最小二乘法得,
ATAV=ATb
V=(ATA)−1ATb
[VxVy]=⎣⎡∑Ixi2∑IxiIyi∑IxiIyi∑Iyi2⎦⎤−1⎣⎡∑IxiIti∑IyiIti⎦⎤
至此,该点的光流解算完毕。
2.基于图像金字塔的LK光流法原理分析
LK光流法第二条假设针对的是小运动,如果运动速度较快时,该算法误差较大,而基于金字塔分层的LK光流法很好的解决了这一问题。
有两帧灰度图像I和J,I(x,y)和J(x,y)分别为图像I和J上[x,y]位置处的灰度值。设图像I的像素点u=[ux,uy]T匹配到图像J上的像素点v=u+d=[ux+dx,uy+dy]T,可使得I(ux,uy)和J(ux+dx,uy+dy)误差最小。位移d=[dx,dy]T被称为u和v的光流。通常在以点u为中心的图像区域[2wx+1,2wx+1]内,通过最小化灰度匹配误差的平方和来求解d。此损失函数为,
e(d)=e(dx,dy)=x=ux−wx∑ux+wxy=uy−wy∑uy+wy(I(x,y)−J(x+dx,y+dy))2
具体操作流程是先对图像进行金字塔分层,下层每次缩放为上层的一半,将分辨率低的图像分配在最顶层,原始图像分配在最底层。从顶层也就是分辨率最低的图片开始,递归求解到原始图片为止。设第L层的损失函数为,
eL(dL)=eL(dxL,dyL)=x=uxL−wx∑uxL+wxy=uyL−wy∑uyL+wy(IL(x,y)−JL(x+gxL+dxL,y+gyL+dyL))2
其中,gL代表的是像素点在第L层迭代运算中的光流初值,dL代表的是像素点在第L层迭代运算中的光流误差。dL=[dxL,dyL]通过标准的LK算法得到,gL=[gxL,gyL]通过下式求得,该公式是递归推导。另外,设顶层的光流初值g=[0,0]T,
gL−1=2(gL+dL)
重新定义A(x,y)=IL(x,y),B(x,y)=JL(x+gxL,y+gyL),[px,py]T=[uxL,uyL]T,v=[vx,vy]T=dL,
e(v)=e(vx,vy)=x=px−wx∑px+wxy=py−wy∑py+wy(A(x,y)−B(x+vx,y+vy))2
∂v∂e(v)=−2x=px−wx∑px+wxy=py−wy∑py+wy(A(x,y)−B(x+vx,y+vy))∙[∂x∂B∂y∂B]
对B(x+vx,y+vy)进行泰勒展开,
B(x+vx,y+vy)=B(x,y)+[∂x∂B∂y∂B]v
∂v∂e(v)≈−2x=px−wx∑px+wxy=py−wy∑py+wy(A(x,y)−B(x,y)−[∂x∂B∂y∂B]v)∙[∂x∂B∂y∂B]
同时令,
δI=A(x,y)−B(x,y)
∇I=[IxIy]=[∂x∂B∂y∂B]T
Ix(x,y)=∂x∂A(x,y)=2A(x+1,y)−A(x−1,y)
Iy(x,y)=∂y∂A(x,y)=2A(x,y+1)−A(x,y−1)
得,
21∂v∂e(v)≈x=px−wx∑px+wxy=py−wy∑py+wy(∇ITv−δI)∇IT
21[∂v∂e(v)]T≈x=px−wx∑px+wxy=py−wy∑py+wy⎝⎛⎣⎡Ix2IxIyIxIyIy2⎦⎤v−⎣⎡δIIxδIIy⎦⎤⎠⎞
G=x=px−wx∑px+wxy=py−wy∑py+wy⎣⎡Ix2IxIyIxIyIy2⎦⎤
b=x=px−wx∑px+wxy=py−wy∑py+wy⎣⎡δIIxδIIy⎦⎤
21[∂v∂e(v)]T≈Gv−b
附上一张论文中的流程,


参考:
1.总结:光流–LK光流–基于金字塔分层的LK光流–中值流
2.《PyramidalImplementationoftheLucasKanadeFeatureTrackerDescriptionofthealgorithm》