前言
本文较为详细地介绍了一种经典的光流法 - HS 光流法。
光流法简介
当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像信息不断 "流过" 视网膜,好像是一种光的 "流",所以被称为光流。
光流是基于像素点定义的,所有光流的集合称为光流场。通过对光流场进行分析,可以得到物体相对观察者的运动场。在这过程中分析的算法称为光流法。
HS 光流法的推导
HS光流计算基于物体移动的光学特性的两个假设:
1. 运动物体的灰度在很短的间隔时间内保持不变
2. 给定邻域内的速度向量场变化是缓慢的
由 1 可得:
(1)
上式右边在 x y 处泰勒展开,得:
(2)
ε 是包含有 δx,δy 和 δt 的二阶和更高阶项。两边减去 I(x,y,t),再除以δt有:
(3)
O (δt) 是含δt的一个小量。在极限中当δt->0时,上式变成:
(4)
令 u = dx/dt v = dy / dt,得:
(5)
这条式子就是光流约束方程,它反映了灰度与速度的一个对应关系。
但,一个式子中有两个变量:u 和 v,显然不能将速度解出,因此需要引入一个新的条件:光流的全局平滑约束条件。
即 u 和 v 随着像素点移动而发生的改变是缓慢的,局部区域的变化不大,尤其是在目标做无变形刚体运动时,局部区域速度的空间变化率为0。
因此,引入以下速度平滑项:
(6)
对于所有的像素点,需要满足上式和最小。
综合光流约束条件 (5) 和速度平滑约束条件 (6),可建立以下的极小化方程:
(7)
式中的 α 是平滑权重系数,表示速度光滑项所占的权重。
即:
(8)
采用变分计算,根据欧拉方程,
(9)
(10)
得到:
(11)
(12)
式中,拉普拉斯算子可以用某一点的速度与其周围速度平均值之差来近似,有:
(13)
(14)
化简 (13) 和 (14),可得: ( 这一步运算量比较大 )
(15)
(16)
这样便可以考虑使用迭代法进行求解了,但在此之前,还需要明确其中几个量的求法。
对于 u 和 v 的均值,采用九点差分格式进行计算:
(17)
(18)
而对于其中的灰度梯度,可以采用以下方法近似计算:
(19)
(20)
(21)
至此,所有的量都已明确下来,输入前后两帧灰度进行迭代运算便可以得到速度场了,下面是具体的执行过程。
HS光流法执行流程图
1. 读取雷达拼图数据并初始化
2. 计算求解点的灰度梯度
3. 设定速度平滑权重系数( 一般设为1 ),初始速度( 一般设为0 ),迭代误差等。
4. 计算 k-1 次速度平均值
5. 计算 k 次迭代的速度值
6. 计算两次迭代光流值的误差,如果小于给定误差阈值,或者者迭代次数超过迭代次数,则计算过程结束,否则进行k+1次迭代。