光流(optical flow),字面意思描述的是图像中像素强度的流动。光流法的目的是根据图像中像素点的灰度值强度变化估计出物体移动速度与方向。

光流法的假设
首先,光流估计指的是利用时间上相邻的两帧图像内像素强度的变化来计算点的运动。原理决定了这种方法是建立在一系列假设上的。
1.前后两帧中点的位移不大, 灰度不变假设,这要求外界光强保持恒定
2.邻域光流相似假设,空间相关性,每个点的运动和邻近的点类似

光流法的原理

根据灰度不变假设(泰勒展开看出在(x,y,t)点的泰勒展开,dx是由x+dx-x求得,然后偏x和dx是不能抵消的,因为偏I比偏x是一个表达式,而dx是一个数。):

python 光流法阈值 光流法算法_光流法


python 光流法阈值 光流法算法_python 光流法阈值_02


如下图所示,利用邻域光流相似假设,n个相邻点都会满足上面推导出的那个方程。一般一幅图像中我们会用一个窗口选取n个点(这n个点比较靠近,因为图像中不同区域中的点运动尺寸很可能不一致)进行光流跟踪,就会有n个方程来解u和v。 最后可以化简成Ax=b 的形式,多个方程求解两个变量,我们用最小二乘解即可求得,但由于求解方程时,下面绿框部分中的ATA需要可逆,所以根据Harris角点检测的原理可知,当ATA这个矩阵的两个特征值足够大时,窗口里的点对应的是角点,然后ATA也是可逆的,因为行列式等于特征值的乘积,说明ATA的行列式比较大不会为0,说明ATA就可逆。所以总结以下就是,求解物体移动速度与方向的方程中选取的点基本上都是角点。

python 光流法阈值 光流法算法_python 光流法阈值_03