什么是光流法

维基百科的定义

光流(Optical flow or optic flow)是关于视域中的物体运动检测中的概念。用来描述相对于观察者的运动所造成的观测目标、表面或边缘的运动。光流法在样型识别、计算机视觉以及其他影像处理领域中非常有用,可用于运动检测、物件切割、碰撞时间与物体膨胀的计算、运动补偿编码,或者通过物体表面与边缘进行立体的测量等等。

光流法实际上是通过检测图像像素点的强度随时间的变化进而推断出物体移动速度及方向的方法。

光流(Optical Flow)

光流定义另外两种有趣的说法:

1.光流就是你能感觉到的视觉运动

2.光流是空间运动物体在观察成像平面上的像素运动的瞬时速度(这种似乎更加合适)

光流的概念最早是Gibson在1950年提出。

被称为「光流」的原因:当人的眼睛观察运动物体时,物体在人眼的视网膜上形成一系列连续变化的图像,这一系列连续变化的信息不断“流过”视网膜(即图像平面),好像一种光的“流”,故称之为光流(optical flow)。

光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。

光流法

光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。

研究「光流场」的目的就是为了从图片序列中近似得到不能直接得到的「运动场」(让机器也可以“看到”运动信息)。

这里有两个概念需要解释:

  • 运动场:物体在三维真实世界中的运动。

  • 光流场:运动场在二维图像平面上(人的眼睛或者摄像头)的投影。

什么是光流法_第1张图片

上图为:三维运动在二维平面内的投影

通俗地讲就是通过一个图片序列(比如视频),==把每张图像中每个像素的运动速度和运动方向找出来就是光流场。==那怎么找呢?直观理解是:第t帧的时候A点的位置是(x1, y1),那么我们在第t+1帧的时候再找到A点,假如它的位置是(x2,y2),那么我们就可以确定A点的运动了: u ⃗ = ( u x , v y ) = ( x 2 , y 2 ) − ( x 1 , y 1 ) \vec{u} = \left(u_{x}, v_{y}\right)=\left(x_{2}, y_{2}\right)-\left(x_{1}, y_{1}\right) u =(ux,vy)=(x2,y2)(x1,y1)

需要注意的是这里的速度矢量 u ⃗ = ( u , v ) \vec{u}=(u, v) u =(u,v)是一个矢量,同时包含「运动速度大小」和「运动方向」的信息。

那怎么知道第t+1帧的时候A点的位置呢? 这就存在很多的光流计算方法了。

Barron等人将光流计算方法分为四种:

  • 基于梯度的方法(微分法)
  • 基于匹配的方法(基于特征和区域匹配)
  • 基于能量的方法(基于频域/频率的方法)
  • 基于相位的方法

近年来「神经动力学方法」(是对生物视觉系统功能与结构比较直接的模拟)也颇受学者重视。

除了根据原理的不同来区分光流法外,还可以根据所形成的光流场中二维矢量的疏密程度将光流法分为稠密光流与稀疏光流两种:

  • 稀疏光流:计算某些点集的光流,这组点最好具有某种明显的特性,例如Harris角点等。
  • 稠密光流:计算图像上所有像素点的光流(计算量大)。

光流法的前提假设:

  • 相邻帧之间的亮度恒定(对灰度图而言颜色一致可以理解为亮度一致)— 光流法不适用与光线变化多的场景
  • 即取帧频率足够快,或者物体小速度运动
  • 保持空间一致性(即同一子图像的相邻像素点具有相似的运动)

其中前两点是光流法的基本前提假设,LK光流法增加了第三点。

LK光流法

  • 优点:消除光流方差多义性,且对图像噪声不敏感。
  • 缺点:属于稀疏光流法,精度较低。

金字塔LK光流法

  • 优点:通过缩小图像尺寸,解决了LK算法速度要求小的问题。
  • 缺点:属于稠密光流法,计算复杂度高,时效性差。

基于光流的运动目标检测(前景算法)

使用光流法进行前景检测是基于这样一个共识:若运动物体和背景存在相对运动,那么它们的光流场必然不同,就能将它们区分开来,得到运动物体的位置。

步骤:预处理 -> 计算光流场,并进行阈值分割,区别出背景和前景 -> 形态学滤波和开、闭运算,使目标区域成为整体 -> 光流场区域连通、分割得到目标区域并统计其特征信息

总结

  • 对光流法来说,时效性和精确度难以同时保证;
  • 光流法建立在两个基本假设上,现实生活中难以保证;

你可能感兴趣的:(计算机视觉,目标跟踪,人工智能)