技术专栏|基于无人机LK光流算法的适用性及其优化方法探究

问题描述

 ◆ ◆

一般的LK光流算法存在一个比较明显的局限性。我们知道,一般的LK光流算法必须包含三个假设:

(1)亮度恒定;

(2)时间连续或者运动是小运动;

(3)空间一致性,也就是该像素点相邻区域内的其他像素点具有相似的运动状态。

对于第(2)点假设,因为只有小运动情况下前后帧之间的单位位置变化引起的灰度变化才能近似灰度对位置的偏导数,但是实际飞行中,无人机的运动速度一般是比较快的,基本上不存在这么小的运动情况,那么是否可以找到一种方法,使无人机在正常的速度下也能使用LK光流算法去获取速度呢?

基本思路

 ◆ ◆

我们知道,如果要通过LK光流算法去获取速度,就必须满足以上三个假设:(1)亮度恒定;(2)小运动;(3)空间一致性。

正常飞行情况下无人机是不满足假设(2)的,那么我们是否能找到一种方法,使无人机在单目相机视野内满足小运动情况?假设我把单目相机和运动目标的距离拉远,那么从相机视野内看,运动物体的速度和位移相对于未拉远情况下是不是变小了。当拉远到一定程度时,使物体在相机视野内的运动速度足够小,这不就满足第2个假设了吗!

总的来讲就是先将不满足LK光流法第2个条件的情况进行转换,使其满足LK光流算法,再进行计算。

 

理论基础

 ◆ ◆

(1)二元函数泰勒展开公式:

(2)二元函数求偏导:

形如:

求偏导得:

(3)矩阵的基本运算;

(4)基本求和公式;

(5)同比例缩放中位移和速度的关系:

假设当图像为400x400时,物体速度为[16,16],当图像缩小为200x200时,速度变为[8,8],缩小为100x100时,速度为[4,4] ,其[x,y]中得x表示物体沿着x轴方向的速度,y表示物体沿着y轴方向的速度。

 

具体的实现形式

 ◆ ◆

单目相机所得的图像按每帧进行多层缩放,形成一个类似金字塔型的图像缩放层,金字塔的最顶层代表可带入LK光流法直接计算的图像层,最底层代表原始图像,如下图所示样例:

从最顶层开始计算最顶层金字塔图像的光流矢量(速度),再根据金字塔最顶层光流的结果估计次顶层光流的初始值,依次迭代,直到算出最底层原始图像的光流矢量,即我们要求的量。

因为我们生成的图像金字塔的最顶层是满足LK光流算法第2点的基本假设的,所以最顶层中的车子的运动速度很小。假设令其为[0,0],表示x和y方向的速度都为零。

首先我们初始化金字塔顶层图像的光流矢量,令为[0,0]:

那么我们如何判定前后两帧之间被拉远后的相机视野里目标的速度矢量呢?我们记最顶层目标点在位于(x,y),其灰度值为A(x,y);则同一层后一帧的目标点为B(x+Vx,y+Vy),其中Vx和Vy为目标点的位移,由于最顶层满足LK光流法小运动要求,目标点的位移亦可当作速度,所以目标点在顶层的速度矢量可记为 = (Vx,Vy)。我们知道,LK光流法还满足同一点灰度值不变的要求,我们以顶层第一帧视野内目标点的坐标(Px,Py)为同层第二帧视野的中心,向x轴方向和y轴方向分别以幅度Ix,Jy去搜索,计算后一帧该范围内所有的点与前一帧目标点像素的匹配误差和,公式如下:

表示该领域内所有像素点的匹配误差和;

接下来对该二元函数进行求导:

我们想要求的值,我们必须把孤立出来,于是我们单独对进行泰勒展开: 

将(6)式带入(5)式中,且令

  与 

是两帧同层图像灰度之间的差值,分别表示图像在该点梯度的X方向分量和Y方向分量。根据求得空间梯度矩阵G,以此求得顶层图像的最佳光流。

得下式:

为了简化运算和便于观察,我们定义如下关系:

回到我们得主题,我们要求邻近像素点匹配误差和最小,相当于求其导数为零的点,即

于是有:

以至于最后我们能求得光流矢量的最优解:

将顶层图像得到的光流矢量累加值传递到下一层作为初始值:

从上式(11)我们可以看出我们最后算出的最底层的光流是所有层光流的叠加。

最后,我们做一个总结,使用金字塔型分层图像计算光流的优点,可以提高LK光流算法的泛化能力,使算法的适用性更强。它相对于每一次光流都会保持很小,但计算出来的光流可以进行放大然后累计,所以利用小视野就能处理较大的运动像素点。

- End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把无人系统行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在无人机行业就请关注我们呀(微信公众号:阿木实验室),我们将持续发布无人系统行业最有价值的信息和技术。

猜你喜欢

转载自blog.csdn.net/msq19895070/article/details/110821962