今天重点介绍光流
首先介绍光流的idea inspiration,传统光流的估计方法,再介绍用CNN解决光流的思路--FlowNet以及FlowNet2(个人认为只是利用stack方式堆叠FlowNetS和FlowNetC,其中更出彩的可能在数据集与更适应的数据训练方法,当然,精度和速度的效果也更为出色,解决了小displacement的估计)。Let's START!
光流
第一次读光流的文章是很久以前,当时有个印象很深的例子,就是当你坐火车的时候往窗外开,原本固定的刚体的物体,由于相对参考系的运动,仿佛变成了一条条川流的线,如同光在流动。而且,不同距离的物体,例如近处的相邻铁轨,远处的天和云,不远处的房屋,其运动的速度不是完全一样的,也就是说,我们可以通过不同的视觉感觉速度,而判断这个物体的远近。
光流(optical flow)最早在1940s由Gibson的The Perception of the Visual World.提出的,其定义是,由物体/相机的运动引起的在连续帧之间的视在运动模式。它是一个矢量2D场,每个矢量是一个位移矢量,代表点从第一帧到第二帧的运动。
-
光流需要满足的条件假设:
-
物体的像素强度在连续帧之间不会改变
-
相邻像素间有相似的运动
---------------------------------------------------
推导:
考虑在第一帧的像素点, 为在下一帧中的运动的位移,所以该点经过运动后在第二帧为。考虑到假设条件一,“物体的像素强度在连续帧之间不会改变”,有:
将,泰勒展开:
故有:
其中,各代表其在x y方向的运动速度,可以看成 u,v。
这样 我们就得到了光流方程
在这个光流方程中代表的是图像在(x ,y,t )这一点的梯度,是两帧图像块之间差值,均为已知。我们需要求解的u,v,那么如何求解呢?这里引入L-K光流法和L-K金字塔光流法。
L-K光流法
-------------------------------------------
-
稀疏光流法: L-K光流
利用L-K法解决光流,充分利用了光流的第二个假设条件,即,相邻像素间有相似的运动。需要注意的是,L-K光流法解决的是小位移情况,所以后文将会介绍L-K金字塔光流法来搞定大位移的光流问题。
由光流方程我们可知,现需求解两个未知数u&v。
L-K方法是找一个3*3的patch,利用相邻像素间有相似的运动,所以假定这九个点都有相同的位移。这样我们就可以得到方程组:
九个方程解两个未知数,超定,可以用最小二乘法来得出近似解。
由此,我们解得x,但是观察
,并不一定总是可逆的!(充要条件)
在图像中沿着两个方向都有像素变化的区域(角点,这个式子也很像harris corner的响应式),一般对应的是可逆的,但是对于在灰度变化很小的区域,一般是不可逆的。这限制了LK光流法的适用范围,所以我们称之为稀疏光流法(并不是所有光流都能被计算出来)
在光流跟踪中,由于可逆的充要条件,也就是要求,矩阵G的最小特征值要足够大,满足这个要求的像素点才易于光流跟踪。)
-------------------------------------------
-
稠密光流法:迭代求解L-K光流
这里对上面的证明,再重新梳理一遍,并用迭代的方式求解光流d;连续帧,对于中的像素点