视觉SLAM十四讲 第八讲 视觉里程计2 8.2L-K光流 理论推导

光流描述了像素在图像中的运动,直接法附带着一个相机运动模型。
光流是一种描述像素随时间在图像之间运动的方法,如图。随着时间的流逝,同一个像素会在图像中运动,而我们希望追踪它的运动过程。其中,计算部分像素运动的称为稀疏光流,计算所有像素的称为稠密光流。稀疏光流以Lucas-Kanade光流为代表,并可以在SLAM中用于跟踪特征点位置。

Lucas-Kanade光流
在LK光流中,认为来自相机的图像是随时间变换的。图像可以看作时间的函数 。那么,一个在t时刻,位于(x,y)处的像素,它的灰度可以写成

这种方式把图像看成了关于位置与时间的函数,它的值域就是图像中像素的灰度。现在考虑某个固定的空间点,它在t时刻的像素坐标为x,y。由于相机的运动,它的图像坐标将发生变化。我们希望估计这个空间点在其他时刻图像中的位置。
灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的。
对于t时刻位于(x,y)处的像素,我们设t+dt时刻它运动到(x+dx,y+dy)处。由于灰度不变,我们有:

灰度不变加速是一个很强的假设,实际当中很可能不成立。事实上,由于物体的材质不同,像素会出现高光和阴影部分;有时,相机会自动调整曝光参数,使得图像整体变量或变暗。这些时候灰度不变假设都是不成立的,因此,光流的结果也不一定可靠。从另一方面说,所有算法都是在一定假设下工作的。如果什么假设都不做,就没法设计实用的算法。因此,暂且认为该假设成立。计算像素的运动:
对左边进行泰勒展开,保留一阶项,得:

因为假设了灰度不变,下一时刻的灰度等于之前的灰度,从而:

两边除以dt,得:

其中,dx/dt为像素在x轴上的运动速度,而dy/dt为y轴上的速度,把它们记为u,v。同时 为图像在该点处x方向的梯度,另一项则是在y方向的梯度,记为 。把图像灰度对时间的变化量记为 ,写成矩阵形式,有:

想计算的是像素的运动 ,但是该式是带有两个变量的一次方程,仅凭它无法计算出u,v。因此,必须引入额外的约束来计算u,v。在LK光流中,我们假设某一个窗口内的像素具有相同的运动。
考虑一个大小为 的窗口,它含有 数量的像素。由于该窗口内像素具有同样的运动,因此共有 个方程:

记:

于是整个方程为

这是一个关于u,v的超定线性方程。传统解法是求最小二乘解。最小二乘在很多时候都用到过:

这样就得到了像素在图像间的运动速度u,v。当t取离散的时刻而不是连续时间时,可以估计某块像素在若干个图像中出现的位置。由于像素梯度仅在局部有效,所以如果一次迭代不够好,会多迭代几次这个方程。在SLAM中,LK光流常被用来跟踪角点的运动。
参考文献:
高翔《视觉SLAM十四讲:从理论到实践》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值