zoukankan      html  css  js  c++  java
  • 光流定位原理是什么??【转】

    转自:https://www.zhihu.com/question/35980316

    HIT/控制/无人机
     
     
    光流是测速算法,并不是直接定位的。简单理解,光流就是通过检测图像中光点和暗点的移动,来判断图像中像素点相对于飞行器的移动速度。如果地面是静止的,自然就可以得到飞行器相对于地面的移动速度啦。所谓光流定位,其实是利用光流测速再积分定位而已啦。
     
    一步步来
     
     
    图像上每个像素可以转换为看到的点在相机坐标系下的射线方向(两个自由度)。光流就是两帧图像之间像素的映射关系,每个点对应一个向量(二维)。光流场和相机运动(六个自由度),环境中点的位置(n*3个自由度,n为点的个数)有关。
    一帧图像包含已知了每个点的方向:n*2个已知量,光流场2*n个方程约束了剩下的n+6个未知量。
    当然细扣会复杂点,但基本就这样。
     
    知乎用户
     
     

    光流传感器通过IAS以一定速率连续采集物体表面图像,再由DSP对所产生的图像数字矩阵进行分析。由于相邻的两幅图像总会存在相同的特征通过对比这些特征点的位置变化信息,便可以判断出物体表面特征的平均运动,这个分析结果最终被转换为二维的坐标偏移量,并以像素数形式存储在特定的寄存器中,实现对运动物体的检测。



    光流的概念是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等人对多种光流计算技术进行了总结,按照理论基础与数学方法的区别把它们分成四种:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法。近年来神经动力学方法也颇受学者重视。
    --------------------------来自百度
     
    小型空中机器人爱好者
     
     
    特征点移动,估算出xy位移的增量
     
  • 相关阅读:
    页面跳转时,统计数据丢失问题探讨
    JSBridge 知识点
    数据埋点 知识点
    ES6 模块与 CommonJS 模块的差异
    koa 学习资料
    浏览器渲染流程
    Object.create() 的含义:从一个实例对象,生成另一个实例对象
    this、new,容易混淆的地方
    为什么js 的constructor中是无限循环嵌套:Foo.__proto__.constructor.prototype.constructor.prototype.constructor.prototype.xxx ?
    实例对象与 new 命令
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/7552358.html
Copyright © 2011-2022 走看看