zoukankan      html  css  js  c++  java
  • 光流法(optical flow)

    光流分为稠密光流和稀疏光流

    光流(optic flow)是什么呢?名字很专业,感觉很陌生,但本质上,我们是最熟悉不过的了。因为这种视觉现象我们每天都在经历。从本质上说,光流就是你在这个运动着的世界里感觉到的明显的视觉运动(呵呵,相对论,没有绝对的静止,也没有绝对的运动)。例如,当你坐在火车上,然后往窗外看。你可以看到树、地面、建筑等等,他们都在往后退。这个运动就是光流。而且,我们都会发现,他们的运动速度居然不一样?这就给我们提供了一个挺有意思的信息:通过不同目标的运动速度判断它们与我们的距离。一些比较远的目标,例如云、山,它们移动很慢,感觉就像静止一样。但一些离得比较近的物体,例如建筑和树,就比较快的往后退,然后离我们的距离越近,它们往后退的速度越快。一些非常近的物体,例如路面的标记啊,草地啊等等,快到好像在我们耳旁发出嗖嗖的声音。

           光流除了提供远近外,还可以提供角度信息。与咱们的眼睛正对着的方向成90度方向运动的物体速度要比其他角度的快,当小到0度的时候,也就是物体朝着我们的方向直接撞过来,我们就是感受不到它的运动(光流)了,看起来好像是静止的(这很好理解,因为光流分析是基于连续多帧的图像来进行分析的,如果方向为0,那么每一帧改物体的位置相对于相机来说是相对静止的(假设不考虑物体的透视效应,因此就察觉不到光流。当它离我们越近,就越来越大。当然了,我们平时看到感觉还是有速度的,因为物体较大,它的边缘还是和我们人眼具有大于0的角度的)。

           呵呵,说了那么多,好像还没进入比较官方的,研究性的定义。那就贴上一个吧。

           光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。

           当人的眼睛观察运动物体时,物体的景象在人眼的视网膜上形成一系列连续变化的图像,这一系列连续变化的信息不断“流过”视网膜(即图像平面),好像一种光的“流”,故称之为光流(optical flow)。光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。

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

           那通俗的讲就是通过一个图片序列,把每张图像中每个像素的运动速度和运动方向找出来就是光流场。那怎么找呢?咱们直观理解肯定是:第t帧的时候A点的位置是(x1, y1),那么我们在第t+1帧的时候再找到A点,假如它的位置是(x2,y2),那么我们就可以确定A点的运动了:(ux, vy) = (x2, y2) - (x1,y1)。  那怎么知道第t+1帧的时候A点的位置呢? 这就存在很多的光流计算方法了。

           1981年,Horn和Schunck创造性地将二维速度场与灰度相联系,引入光流约束方程,得到光流计算的基本算法。人们基于不同的理论基础提出各种光流计算方法,算法性能各有不同。Barron等人对多种光流计算技术进行了总结,按照理论基础与数学方法的区别把它们分成四种:基于梯度的方法(导数,比如LK算法)、基于匹配的方法、基于能量的方法、基于相位的方法。近年来神经动力学方法也颇受学者重视。

    这其中基于匹配的方法就是和视频编码中的motion estimation的类似的,但是计算cost的方法有些不同。编码的cost是为了压缩使用的(比如MV本身也需要耗费bit在encoder中,cost需要考虑到这个cost,但是optical flow不需要考虑这些),而optical flow的搜索需要的是精确。另外,在视频编码中ME针对的运动是刚体的平移,如果有rotation,scale等就没有办法处理了,因此需要进行ME的改进。一种方法就是先对图像抽取特征点比如harris corner等,这些特征点本身具有旋转不变性,再对这些sparse的特征点进行block matching。

     

    二维人体运动常用的跟踪方法

    目前常用的跟踪方法有:块匹配法(Block Matching)、光流法(optical flow)。每一类方法都有自己的优势和不足,根据具体问题的不同,分别应用在不同的方面。接下来我们将简要介绍这几类方法。

    2.1.1 块匹配方法

    块匹配方法(Block Matching Algorithm,简称BMA)实质上是在图像序列中做一种相邻帧间的位置对应任务。它首先选取一个图像块,然后假设块内的所有像素做相同的运动,以此来跟踪相邻帧间的对应位置。 块匹配法把一个像素块作为一个整体进行计算,运动表示简单。其算法比较规则、简单,硬件上易于实现,因简单高效的特点而常被采用,在活动视频图像编码的国际标准H. 261,H. 263和MPEG I,MPEG II中实际都采用了块匹配法。 块匹配算法如下所示:在给定两帧顺序图像I帧和I+1帧,对于图像1中的每个像素点(x,y),以此像素为中心形成一个大小为(2n + 1)X(2n + 1)的块Bo围绕图像卜1帧中的对应像素点(x,y)建立一个尺寸为(2N十1)X(2N十1)的搜索窗口R。搜索窗口可根据有关两图像间最大可能位移的先验知识来确定。假设一个像块内所有的像素作速度相同的平移运动,然后在搜索窗口R内进行搜索匹配,在基于一定的误差度量准则下寻找与其最匹配的像素块B'。

    2.1.2 光流跟踪方法

    光流(optical flow)法是目前运动图像分析的重要方法,它的概念是由Gibso。于1950年首先提出的,是指时变图像中模式运动速度。因为当物体在运动时,它在图像上对应点的亮度模式也在运动。这种图像亮度模式的表观运动(apparent motion)就是光流。光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。 由光流的定义可以引申出光流场,它是指图像中所有像素点构成的一种二维(2D)瞬时速度场,其中的二维速度矢量是景物中可见点的三维速度矢量在成像表面的投影。所以光流不仅包含了被观察物体的运动信息,而且还包含有关景物三维结构的丰富信息。 对光流的研究成为计算机视觉及有关研究领域中的一个重要部分。因为在计算机视觉中,光流扮演着重要角色,在目标对象分割、识别、跟踪、机器人导航以及形状信息恢复等都有着非常重要的应用。从光流中恢复物体三维结构和运动则是计算机视觉研究所面临的最富有意义和挑战性的任务之一。正是由于光流的这种重要地位和作用,使得众多的心理物理学家、生理学家和工程研究人员都加入了它的研究行列。十多年来,他们提出了许多种计算光流的方法,而且新的方法还在不断涌现。

  • 相关阅读:
    Java上等价类划分测试的实现
    软件测试の因果图法的测试运用
    display: block; 和 display: inline; 的区别
    CSS实现垂直居中
    CSS中实现水平居中
    HTTP头部信息
    HTTP PUT方法和POST方法的区别
    理解 ajax xhr jsonp
    深入理解JavaScript系列
    Angular 1.x 指令笔记
  • 原文地址:https://www.cnblogs.com/sddai/p/10275837.html
Copyright © 2011-2022 走看看