光流法简介

光流是指在连续的两帧图像中由于图像中的物体移动或者摄像头的移动导致的目标中目标像素的移动,光流是二维矢量场,表示了一个点从第一帧到第二帧的位移。

光流法的工作原理基于如下假设:

  1. 相邻帧之间的亮度恒定;
  2. 相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”;
  3. 同一子图像的像素点具有相同或相似的运动。
传统算法——Lucas-Kanade算法:

第一帧中的像素光流法简介表示在时刻t时像素光流法简介的值,在经过光流法简介时间后,该像素在下一帧中移动了光流法简介,在假设中,这些像素在理想情况下应当是相等的,即:
光流法简介
假设移动很小,那么右式可以用泰勒公式展开:
光流法简介
其中光流法简介是高阶无穷小,那么就可以得到:
光流法简介
将上式简写为:
光流法简介
光流法简介光流法简介是两个未知数,因此仅有上述一个式子无法求解。回到一开始介绍的假设3,我们可以假设在一个大小为光流法简介的窗口内,图像的光流是一个恒定值。那么就可以得到以下方程组:
光流法简介
矩阵化上述式子,可以得到:
光流法简介
用最小二乘法解此方程得:
光流法简介

光流法简介

深度学习算法——FlowNet/FlowNet2.0

输入为待估计光流的两张图像,输出为图像每个像素点的光流。

使用EPE(End-Point-Error)作为损失,该损失定义为预测的光流和groundtruth之间的欧氏距离:
在这里插入图片描述

  • FlowNet

对于网络结构,包括Encoder模块和Decoder模块,作者设计两种不同的网络模式:FlowNetSimple和FlowNerCorr。
在这里插入图片描述

第一种就是简单的两张图象进行通道的拼接,即将两张光流法简介的图像合并成光流法简介;第二种则是先对两张图像分别进行卷积,获得高层特征后再进行相关性运算,将信息合并。相关性的运算类似于卷积,只不过是两张图像之间的卷积:
光流法简介
设置匹配的范围光流法简介,那么搜索的范围就为光流法简介的区间,设置像素块尺寸(也即卷积核)光流法简介,那么每一对匹配的像素块需要的计算量为光流法简介,其中光流法简介为通道数,对于每一个像素点,其需要计算的像素块对为光流法简介个,因此总计算量为光流法简介,将每一个像素块对的计算结果按通道数排列,最终得到的特征图尺寸就为光流法简介。图中的光流法简介代表开方操作,如果两个图中的像素块一致,那么开方后会得到原有像素块内容,光流法简介代表使用光流法简介卷积降维。

refinement为Decoder模块,该模块主体部分是通过反卷积进行升维,其结果如下:
在这里插入图片描述

该模块的输入有三个部分,Encoder模块的跳接输入,上一模块的反卷积输出,以及上一模块的光流反卷积输出。红箭头代表卷积,绿箭头代表反卷积,灰箭头代表输入。

  • FlowNet2.0

该网络是对FlowNet的改进,其基于FlowNet中提出的FlowNetSimple(FlowNetS)和FlowNetCorr(FlowNetC)两中网络形式的堆叠组合:
在这里插入图片描述

首先,上层模块是FlowNetC和FlowNetS的堆叠组合,首先将两张图片通过FlowNetC,输出一张光流图Flow,将此光流图作用到图2上,即为使用估计的每个像素偏移,偏移图2的每一个像素,使其与图1对齐,该操作得到图即为Warped图。光流估计可能不够准确,因此Warped图与图1存在偏差,将图1的亮度减去Warped图的亮度,即可得到亮度误差图Brightness Error。最后将这5个输出堆叠起来,作为下一个FlowNetS的输入。FlowNet2.0堆叠了两个FlowNetS。原始的FlowNet存在小偏移(Small Displacement)估计不准确的问题,因此在下层模块,作者设计了适合小偏移的FlowNet-SD,其修改了FlowNet中卷积核和光流法简介的大小,使其更适合小偏移。具体的变化为,将FlowNet中光流法简介光流法简介的卷积核改为光流法简介的卷积核,更小的卷积核意味着更加精细的处理,因此更加适合小偏移估计的问题,并且将光流法简介改为了光流法简介。最后将上下层输出混合,得到最后的光流估计。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年3月4日 下午4:36
下一篇 2023年3月4日 下午4:37

相关推荐