本文对光流进行简要介绍,并介绍光流在视频编解码标准中的应用。
在介绍光流前,先来回顾下图像产生的过程:当观测目标反射了光信号进入人眼后,会在视网膜上呈现图像。那么,当三维空间中的物体在运动的时候,这个通过反射的光信号进入人眼或相机中,就会在成像平面上产生二维的光流向量。也就是说光流的定义可以概括为:空间运动物体在观察成像平面上的像素运动的瞬时速度。由此看来,光流矢量与视频编解码中帧间预测涉及的运动矢量之间联系是十分密切的。
光流的定义可以概括为:空间运动物体在观察成像平面上的像素运动的瞬时速度。
下面我们探究下光流场产生的原因:从光流的概念:空间运动物体在观察成像平面上的像素运动的瞬时速度来看。光流产生的主要原因是物体与成像平面之间产生了相对运动。那么这种运动实际上可以分为三种:
1. 物体在运动,相机静止:比如运动中的电子玩具。
2. 物体静止,相机在运动:比如潜水员手持相机拍摄海底的礁石。
3. 相机和物体均在运动:比如潜水员手持相机拍摄海底游动的鱼儿。
由于物体与相机之间出现了相对运动,就会产生了光流,这里给出了由于相机镜头的移动而产生光流的像素示意图,那么反应到物体上,就是物体出现了仿射变换、刚性变换和透视变换等情况。
刚在介绍到了,光流矢量和运动矢量之间的联系十分密切,那二者是否完全一致呢?答案是否定的。我们通过几个例子来理解他们之间的关系。
1. 我们考虑观测的对象在场景中的某一个位置移动到下一个位置而获得的光流场。可以考虑到,这个时候光流场可以描述物体的运动情况,也就是说,光流场和运动场是一致的。
2. 但我们考虑这样一种情形:有个均质的小球在转动,同时光源从左侧移动到右侧,在这种情况下,我们感受到的光流矢量并非小球真正的运动情况
3. 此外生活中还有一个常见的例子:理发店的经常用旋转的招牌来吸引顾客,这时从光流场的角度来看,招牌是向上旋转运动的,但是从运动场的角度来看,招牌其实是水平的运动。
所以,光流场并不严格等同于运动场,但在大多数情况下,二者表现是一致的,这也就为我们将其运用到与运动矢量有关的问题中提供了可能。
下面我们来看一下,怎样建立一个光流场:
1. 基于梯度的方法:基于梯度的方法又称为微分法,它是利用时变图像灰度(或其滤波形式)的时空微分(即时空梯度函数)来计算像素的速度矢量。由于计算简单和较好的结果,该方法得到了广泛应用和研究。典型的代表Lucas-Kanade(LK)算法。
2. 基于特征的方法不断地对目标主要特征进行定位和跟踪,对目标大的运动和亮度变化具有鲁棒性。存在的问题是光流通常很稀疏,而且特征提取和精确匹配也十分困难。
此外还有,基于神经网络的方法,基于能量的方法,基于相位的方法以及神经动力学方法。
下面我们对基于梯度的LK算法进行一个介绍
Lk算法建立在三个假设的基础上:
1. 亮度恒定不变:也就是说,即同一目标在不同帧间运动时,其亮度不会发生改变。
2. 第二点是时间连续或运动是 “小运动”,即时间的变化不会引起目标位置的剧烈变化。在这两个假设的基础上,我们通过泰勒展开等方式可以得到某一像素点附近的光流方程。
3. 第三个假设是邻域内光流一致。也就是说,我们可以假定一个小区域内的像素点拥有相同的运动情况。所以就可以建立光流的超定方程组,求其最小二乘解。便可得到光流矢量。
以上是LK光流法的介绍。可以想见,LK光流法中微小运动这个是限制性较强的假设,许多情况下,这个条件其实并不容易满足。为了解决这个问题,就出现了金字塔光流法。
考虑物体的运动速度较大时的情况,这时LK光流法的误差较大。那么如果我们能减少图像中物体的运动矢量,就会降低这个误差。一个直观的方法就是,通过缩小图像的尺寸,来降低物体运动幅度。
 举例来说,假设当图像为400×400时,物体速度为[16,16], 那么当图像缩小为200×200时,速度变为[8,8]。当缩小为100*100时,速度减少到[4,4]。所以在源图像经过缩放后,运动幅度就会减小。这时LK算法又变得适用了起来,我们在缩放的图像上运用LK光流法,就可求得准确的光流矢量。
以上是对于光流的简介,接下来介绍视频编解码中光流的运用:
首先LK光流法在视频编解码中的例子,最为人熟知的是双向光流法(BDOF)它是在双向预测的像素上加上了一个修正项。这个修正项是通过在前向以及后向的预测像素上建立光流方程,通过类似LK光流法方式进行求解得到运动矢量的修正项。利用修正的运动矢量,来对预测像素进行修正。
在VVC仿射运动估计的求解中,也是利用了光流的概念,它以4X4块为单位,在预测像素与原始像素之间建立光流场。通过求超定方程的方式,对仿射的运动矢量进行搜索更新。
在AV1中也有光流的例子出现:比如在获取全局仿射变换参数上。AV1采用了基于匹配的方法计算运动矢量。首先在参考帧和当前帧上检测出若干特征点。然后将检测出的特征点进行配对,计算出特征点之间的相对位移,即运动矢量。这样就得到了一个稀疏的光流场。然后再通过RANSAC算法。求解出全局的仿射参数,进而得到了密集的光流场。
 关 注 我 们 
  实验室网站:http://viplab.fudan.edu.cn/
  OpenASIC官方网站:www.openasic.org
  知乎专栏:http://zhuanlan.zhihu.com/viplab
  微信公众号:OpenASIC
继续阅读
阅读原文