前言

  本文较为详细地介绍了一种经典的光流法 - HS 光流法。

光流法简介

  当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像信息不断 "流过" 视网膜,好像是一种光的  "流",所以被称为光流。

  光流是基于像素点定义的,所有光流的集合称为光流场。通过对光流场进行分析,可以得到物体相对观察者的运动场。在这过程中分析的算法称为光流法。

HS 光流法的推导

  HS光流计算基于物体移动的光学特性的两个假设:

    1. 运动物体的灰度在很短的间隔时间内保持不变

    2. 给定邻域内的速度向量场变化是缓慢的

  由 1 可得:

    (1)

  上式右边在 x y 处泰勒展开,得:

    (2)

  ε 是包含有 δx,δy 和 δt 的二阶和更高阶项。两边减去 I(x,y,t),再除以δt有:

    (3)

  O (δt) 是含δt的一个小量。在极限中当δt->0时,上式变成:

    (4)

  令 u = dx/dt  v = dy / dt,得:

    (5)

  这条式子就是光流约束方程,它反映了灰度与速度的一个对应关系。

  但,一个式子中有两个变量:u 和 v,显然不能将速度解出,因此需要引入一个新的条件:光流的全局平滑约束条件。

  即 u 和 v 随着像素点移动而发生的改变是缓慢的,局部区域的变化不大,尤其是在目标做无变形刚体运动时,局部区域速度的空间变化率为0。

  因此,引入以下速度平滑项:

    (6)

  对于所有的像素点,需要满足上式和最小。

  综合光流约束条件 (5) 和速度平滑约束条件 (6),可建立以下的极小化方程:

    (7)

  式中的 α 是平滑权重系数,表示速度光滑项所占的权重。

  即:

    (8)

  采用变分计算,根据欧拉方程,

    (9)

    (10)

  得到:

    (11)

    (12)

  式中,拉普拉斯算子可以用某一点的速度与其周围速度平均值之差来近似,有:

  (13)

  (14)

  化简 (13) 和 (14),可得:  ( 这一步运算量比较大 )

    (15)

    (16)

  这样便可以考虑使用迭代法进行求解了,但在此之前,还需要明确其中几个量的求法。

  对于 u 和 v 的均值,采用九点差分格式进行计算:

    (17)

    (18)

  而对于其中的灰度梯度,可以采用以下方法近似计算:

    (19)

    (20)

    (21)

  至此,所有的量都已明确下来,输入前后两帧灰度进行迭代运算便可以得到速度场了,下面是具体的执行过程。

HS光流法执行流程图

  

  1. 读取雷达拼图数据并初始化

  2. 计算求解点的灰度梯度

  3. 设定速度平滑权重系数( 一般设为1 ),初始速度( 一般设为0 ),迭代误差等。

  4. 计算 k-1 次速度平均值

  5. 计算 k 次迭代的速度值

  6. 计算两次迭代光流值的误差,如果小于给定误差阈值,或者者迭代次数超过迭代次数,则计算过程结束,否则进行k+1次迭代。

  

HS 光流法详解的更多相关文章

  1. HS光流算法详解<转载>

    HS 光流法详解 前言 本文较为详细地介绍了一种经典的光流法 - HS 光流法. 光流法简介 当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像 ...

  2. 光流法详解之一(LK光流)

    Lucas–Kanade光流算法是一种两帧差分的光流估计算法.它由Bruce D. Lucas 和 Takeo Kanade提出 [1]. LK光流法有三个假设条件: 1. 亮度恒定:一个像素点随着时 ...

  3. 光流法详解之二(HS光流)

    Horn–Schunck光流算法[1]是一种全局方法估算光流场. 参考博文:https://blog.csdn.net/hhyh612/article/details/79216021 假设条件: H ...

  4. RAII惯用法详解

    [1]什么是RAII惯用法? RAII是Resource Acquisition Is Initialization的缩写,意为“资源获取即初始化”. 它是C++之父Bjarne Stroustrup ...

  5. SLAM入门之视觉里程计(6):相机标定 张正友经典标定法详解

    想要从二维图像中获取到场景的三维信息,相机的内参数是必须的,在SLAM中,相机通常是提前标定好的.张正友于1998年在论文:"A Flexible New Technique fro Cam ...

  6. KKT条件和拉格朗日乘子法详解

    \(\frac{以梦为马}{晨凫追风}\) 最优化问题的最优性条件,最优化问题的解的必要条件和充分条件 无约束问题的解的必要条件 \(f(x)\)在\(x\)处的梯度向量是0 有约束问题的最优性条件 ...

  7. 扩展欧几里得算法详解(exgcd)

    一.前言 本博客适合已经学会欧几里得算法的人食用~~~ 二.扩展欧几里得算法 为了更好的理解扩展欧几里得算法,首先你要知道一个叫做贝祖定理的玄学定理: 即如果a.b是整数,那么一定存在整数x.y使得$ ...

  8. lca(最近公共祖先(在线)) 倍增法详解

    转自大佬博客 : https://blog.csdn.net/lw277232240/article/details/72870644 描述:倍增法用于很多算法当中,通过字面意思来理解 LCA是啥呢 ...

  9. 后缀数组 DC3构造法 —— 详解

    学习了后缀数组,顺便把DC3算法也看了一下,传说中可以O(n)复杂度求出文本串的height,先比较一下倍增算法和DC3算法好辣. DC3 倍增法 时间复杂度 O(n)(但是常数很大)   O(nlo ...

随机推荐

  1. CDH4.5.0下安装lzo

    参考 http://www.cloudera.com/content/cloudera-content/cloudera-docs/Impala/1.0.1/Installing-and-Using- ...

  2. Leetcode463. Island Perimeter

    题目 给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域. 网格中的格子水平和垂直方向相连(对角线方向不相连).整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表 ...

  3. C++的队列和pair

    C++队列的成员函数: back()返回最后一个元素 empty()如果队列空则返回真 front()返回第一个元素 pop()删除第一个元素 push()在末尾加入一个元素 size()返回队列中元 ...

  4. BZOJ1050: [HAOI2006]旅行comf(并查集 最小生成树)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4021  Solved: 2257[Submit][Status][Discuss] Descript ...

  5. js | JavaScript中数据类型转换总结

    转载 在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换. 1, 显式数据类型转换 a:转数字: 1)Number转换: 代码: var a = “123”; a = Number(a); ...

  6. PHP中json_encode后,在json字符串中依然显示中文的解决方案

    <?php header("Content-Type:text/html;charset=utf-8;"); $arr = array ('Version_code'=> ...

  7. PHP siege 压测 QPS大小

    1.使用 PHP-FPM SOCKET的形式通讯 2.配置 PHP-FPM配置 [root@bogon php-fpm.d]# ls -al 总用量 drwxr-xr-x. root root 8月 ...

  8. C语言真正的编译过程(4个步骤~~预编译,编译,汇编,连接)

    转载自:https://www.cnblogs.com/wuyouxiaocai/p/5701088.html#commentform 说实话,很多人做了很久的C/C++,也用了很多IDE,但是对于可 ...

  9. linux最大进程数

    使用 ulimit -a 命令,查看 max user processes 的输出,就是系统最大进程数 core file size (blocks, -c) unlimited data seg s ...

  10. Git的使用--将本地项目上传到Github

    Git的使用--将本地项目上传到Github 感谢作者 --> 原文链接 很早之前就注册了Github,但对其使用一直懵懵懂懂,很不熟练.直到昨天做完百度前端技术学院的task,想把代码托管到G ...