目标追踪——光流法optical flow

光流法简介

  • 光流
    • 光流法
    • 光流的物理意义
    • 光流场
  • 光流法基本原理
  • 金字塔方法
  • 基于光流的运动目标检测(前景检测)算法
    • 实现原理

光流

光流(optical flow)是空间运动物体在观察成像平面上的像素运动的瞬时速度。

光流法

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

通常将二维图像平面特定坐标点上的灰度瞬时变化率定义为光流矢量,所谓光流就是瞬时速率,在时间间隔很小(比如视频的连续前后两帧之间)时,也等同于目标点的位移。

光流的物理意义

光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。当人的眼睛观察运动物体时,物体的景象在人眼的视网膜上形成一系列连续变化的图像,这一系列连续变化的信息不断“流过”视网膜(即图像平面),好像一种光的“流”,故称之为光流。光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。

三维空间内物体的运动在二维成像平面上的投影。得到的是一个描述位置变化的二维矢量,但在运动间隔极小的情况下,我们通常将其视为一个描述该点瞬时速度的二维矢量u=(u,v),称为光流矢量。

光流场

在空间中,运动可以用运动场描述,而在一个图像平面上,物体的运动往往是通过图像序列中不同图像灰度分布的不同体现的,从而,空间中的运动场转移到图像上就表示为光流场(optical flow field)。

研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。运动场,其实就是物体在三维真实世界中的运动;光流场,是运动场在二维图像平面上(人的眼睛或者摄像头)的投影。

光流场是一个二维矢量场,它反映了图像上每一点灰度的变化趋势,可看成是带有灰度的像素点在图像平面上运动而产生的瞬时速度场。它包含的信息即是各像点的瞬时运动速度矢量信息。
研究光流场的目的就是为了从序列图像中近似计算不能直接得到的运动场。光流场在理想情况下,光流场对应于运动场。

所谓光流场就是很多光流的集合。当我们计算出了一幅图片中每个图像的光流,就能形成光流场。构建光流场是试图重现现实世界中的运动场,用以运动分析。

光流法基本原理

  • 基本假设条件
    (1)亮度恒定不变。即同一目标在不同帧间运动时,其亮度不会发生改变。这是基本光流法的假定(所有光流法变种都必须满足),用于得到光流法基本方程;
    (2)时间连续或运动是“小运动”。即时间的变化不会引起目标位置的剧烈变化,相邻帧之间位移要比较小。
  • 基本约束方程
    考虑一个像素 I ( x , y , t ) I(x,y,t) I(x,y,t)在第一帧的光强度(其中t代表其所在的时间维度)。它移动了 ( d x , d y ) (dx,dy) (dx,dy)的距离到下一帧,用了 d t dt dt时间。因为是同一个像素点,依据上文提到的第一个假设我们认为该像素在运动前后的光强度是不变的,即: I ( x , y , t ) = I ( x + d x , y + d y , t + d t ) (1) I(x,y,t)=I(x+dx,y+dy,t+dt) \tag{1} I(x,y,t)=I(x+dx,y+dy,t+dt)(1)
    将(1)式右端进行泰勒展开
    I ( x + d x , y + d y , t + d t ) = I ( x , y , t ) + ∂ I ∂ x d x + ∂ I ∂ y d y + ∂ I ∂ t d t + ε I(x+dx,y+dy,t+dt)=I(x,y,t)+\frac{\partial I}{\partial x}dx+\frac{\partial I}{\partial y}dy+\frac{\partial I}{\partial t}dt+\varepsilon I(x+dx,y+dy,t+dt)=I(x,y,t)+xIdx+yIdy+tIdt+ε
    其中 ε ε ε代表二阶无穷小项,可忽略不计。再将(2)代人(1)后同除 d t dt dt,可得:
    ∂ I ∂ x d x + ∂ I ∂ y d y + ∂ I ∂ t d t = 0 (3) \frac{\partial I}{\partial x}dx+\frac{\partial I}{\partial y}dy+\frac{\partial I}{\partial t}dt=0 \tag 3 xIdx+yIdy+tIdt=0(3)
    u , v u,v u,v分别为光流分别为沿X轴与Y轴的速度矢量,得:
    u = d x d t , v = d y d t u=\frac{dx}{dt},v=\frac{dy}{dt} u=dtdx,v=dtdy
    I x = ∂ I ∂ x , I y = ∂ I ∂ y , I t = ∂ I ∂ t I_x=\frac{\partial I}{\partial x},I_y=\frac{\partial I}{\partial y},I_t=\frac{\partial I}{\partial t} Ix=xI,Iy=yI,It=tI,分别表示图像中像素点的灰度沿X,Y,T方向的偏导数。
    综上,式(3)可以写为:
    I x u + I y v + I t = 0 (4) I_xu+I_yv+I_t=0 \tag4 Ixu+Iyv+It=0(4)
    ( u , v ) (u,v) (u,v)即为所求光流矢量。
    约束方程只有一个,而方程的未知量有两个,这种情况下无法求得u和v的确切值。此时需要引入另外的约束条件,从不同的角度引入约束条件,导致了不同光流场计算方法。按照理论基础与数学方法的区别把它们分成四种:基于梯度(微分)的方法、基于匹配的方法、基于能量(频率)的方法、基于相位的方法和神经动力学方法

金字塔方法

在最开始的假设中,第一条指出点的位移应该是较小的。从上面的分析可以看出,当位移较大时,Taylor展开式一阶近似误差较大。其修正方法就是这里要介绍的金字塔方法。我们通过将图像下采样,就能够使得较大的位移在高层金字塔图像中变小,满足假设条件1.如下所示。
目标追踪——光流法optical flow_第1张图片

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

基于光流运动目标检测是在对摄像机采集到的图像序列进行重采样和去噪预处理后,利用光流法计算出各点的光流值,得出各点的光流场。然后对光流场进行阈值分割,区分出前景与背景,得到清运动目标区域。一般还会再采用形态学滤波中的开、闭运算滤除孤立噪声点,最后经过区域连通便可识别出目标区域并统计其特征信息。流程图如下:

计算输入图像的光流场
对光流场进行阈值分割
形态学滤波
光流区域分割

实现原理

使用光流法进行前景检测是是基于这样一个认识:

如果图像中没有运动目标,则光流矢量在整个图像区域是连续变化的。当图像中有运动物体时,目标和背景存在着相对运动。运动物体所形成的速度矢量必然和背景的速度矢量有所不同,如此便可以计算出运动物体的位置。
通过观察上图我们可以看到,发生运动的物体的光流矢量与背景光流矢量之间存在差异。使用阀值分割可以将整幅图片的光流矢量分成两个部分,即区分出背景与前景。阀值的选取可以使用最大类间方差法来确定。它是按图像的灰度特性,将图像分成背景和目标两部分。背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。

光流场经过阈值分割后,有一些独立的点或者有凹区域,影响了运动目标的提取。可先利用开运算,去除那些光流值与结构元素不相吻合的凹区域,同时保留那些相吻合的凹区域。然后,利用形态学滤波的闭运算,填充凹区域。

通过前面的处理,一帧图像中可能的目标区域已经成为一个可以连成一体的区域,采用合理的区域连通合并和分割技术来找出最终的目标区域。

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