视觉SLAM笔记(七)-光流法
光流描述了像素随时间在图像之间运动,光流法主要用于追踪像素的运动过程,目前常用的光流法主要以Lucas-Kanade为代表,下文简称为LK光流。
光流法是基于一个很强的假设即灰度不变假设,它认为同一个空间点的像素灰度值在各个图像中固定不变,令t时刻位于(x,y)处的像素的灰度为I(x,y,t),在t+dt时刻运动到(x+dx,y+dy)处,则根据灰度不变假设有:
I(x+\mathrm{d}x,y+\mathrm{d}y,t+\mathrm{d}t)=I(x,y,t)
在小位移情况下,对上式左侧进行一阶泰勒展开(注意这个展开决定了LK光流只能在小位移情况下使用)
I(x+\mathrm{d} x, y+\mathrm{d} y, t+\mathrm{d} t) \approx I(x, y, t)+\frac{\partial I}{\partial x} \mathrm{d} x+\frac{\partial I}{\partial y} \mathrm{d} y+\frac{\partial I}{\partial t} \mathrm{d} t
基于灰度不变假设
\frac{\partial {I}}{\partial x} \mathrm{d} x+\frac{\partial {I}}{\partial y} \mathrm{d} y+\frac{\partial {I}}{\partial t} \mathrm{d} t=0 \Rightarrow \frac{\partial {I}}{\partial x} \frac{\mathrm{d} x}{\mathrm{d} t}+\frac{\partial {I}}{\partial y} \frac{\mathrm{d} y}{\mathrm{d} t}=-\frac{\partial {I}}{\partial t}
dx/dt,dy/dt分别为像素在x轴和y轴上的运动速度,记作u,v,\partial I/ \partial x,\partial I/ \partial y分别为图像在该点处x和y方向上的灰度梯度,记作I_x,I_y,该点灰度相对时间的变化为I_t,所以有如下等式
\left[\begin{array}{ll}{ {I}_{x}} & { {I}_{y}}\end{array}\right]\left[\begin{array}{l}{u} \\ {v}\end{array}\right]=-{I}_{t}
一个方程式无法解出u,v的,所以这里假设一个小的窗口内的像素的运动相同,对一个w\times w的窗口,共具有w^2个像素,所以共有w^2个方程,
\begin{bmatrix} I_x&I_y \end{bmatrix}_k \begin{bmatrix} u\\ v \end{bmatrix}=-I_{tk},k=1,...,w^2
记
A=\begin{bmatrix} [I_x,I_y]_1\\ ...\\ [I_x,I_y]_k \end{bmatrix}, b=\begin{bmatrix} I_{t1}\\ ...\\ I_{tk} \end{bmatrix}
方程为
A \begin{bmatrix} u\\ v \end{bmatrix} =-b
求其最小二乘解为:
\begin{bmatrix} u\\ v \end{bmatrix}=-(A^TA)^{-1}A^Tb
由于LK光流在求解过程中用到了图像的灰度梯度,故存在一定的局限性。在图像本身无梯度的场景下不适用,如纯色的背景;在物体的边缘处由于一个方向的梯度可能为0故可能出现跟踪的窗口沿边缘滑动的情况;LK光流效果较好的为在图像的角点处。
LK光流可用于跟踪特征点,在一帧图像提取完特征点后,后续的一系列图像的特征匹配可通过LK光流跟踪得到,在跟踪到的特征点述目减小到一定范围后再重新提取特征点,这避免了一部分特征匹配(描述子计算)过程,减小计算量,且一般不会出现误匹配,但再相机运动较大时无法实现。
参考文献
[1] 高翔, 张涛, 颜沁睿, 刘毅, 视觉SLAM十四讲:从理论到实践, 电子工业出版社, 2017
