光流是一种描述像素随着时间,在图像之间运动的方法,如图所示。随着时间的经过,同一个像素会在图像中运动,而我们希望追踪它的运动过程。计算部分像素运动的称为稀疏光流,计算所有像素的称为稠密光流。稀疏光流以 Lucas-Kanade 光流为代表,并可以在 SLAM 中用于跟踪特征点位置。主要介绍 Lucas-Kanade 光流,亦称 LK光流。

Lucas-Kanade 光流 

在 LK 光流中,我们认为来自相机的图像是随时间变化的。图像可以看作时间的函数:I(t)。那么,一个在 t 时刻,位于 (x,y) 处的像素,它的灰度可以写成

这种方式把图像看成了关于位置与时间的函数,它的值域就是图像中像素的灰度。现在考虑某个固定的空间点,它在 t 时刻的像素坐标为 x,y。由于相机的运动,它的图像坐标将发生变化。我们希望估计这个空间点在其他时刻里图像的位置。怎么估计呢?这里要引入光流法的基本假设:
灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的。

对于 t 时刻位于 (x,y) 处的像素,我们设 t + dt 时刻,它运动到 (x + dx,y + dy) 处。由于灰度不变,我们有:

灰度不变假设是一个很强的假设,实际当中很可能不成立。事实上,由于物体的材质不同,像素会出现高光和阴影部分;有时,相机会自动调整曝光参数,使得图像整体变亮或变暗。这些时候灰度不变假设都是不成立的,因此光流的结果也不一定可靠。然而,从另一方面来说,所有算法都是在一定假设下工作的。如果我们什么假设都不做,就没法设计实用的算法。所以,暂且让我们认为该假设成立,看看如何计算像素的运动。对左边进行泰勒展开,保留一阶项,得:

因为我们假设了灰度不变,于是下一个时刻的灰度等于之前的灰度,从而

两边除以 dt,得:

其中 dx/dt 为像素在 x 轴上运动速度,而 dy/dt 为 y 轴速度,把它们记为 u,v。同时 ∂I/∂x 为图像在该点处 x 方向的梯度,另一项则是在 y 方向的梯度,记为 。把图像灰度对时间的变化量记为,写成矩阵形式,有:

我们想计算的是像素的运动 u,v,但是该式是带有两个变量的一次方程,仅凭它无法计算出 u,v。因此,必须引入额外的约束来计算 u,v。在 LK 光流中,我们假设某一个窗口内的像素具有相同的运动。

考虑一个大小为 w ×w 大小的窗口,它含有数量的像素。由于该窗口内像素具有同样的运动,因此我们共有个方程:

记:

于是整个方程为:

这是一个关于 u,v 的超定线性方程,传统解法是求最小二乘解。最小二乘在很多时候都用到过:

这样就得到了像素在图像间的运动速度 u,v。当 t 取离散的时刻而不是连续时间时,我们可以估计某块像素在若干个图像中出现的位置。由于像素梯度仅在局部有效,所以如果一次迭代不够好的话,我们会多迭代几次这个方程。在 SLAM 中,LK 光流常被用来跟踪角点的运动。

通俗易懂!视觉slam第九部分——光流(Optical Flow)相关推荐

  1. opencv光流Optical Flow

    光流Optical Flow 现在四轴飞行器越来越火,如何在室内进行定位呢?不同于传统四轴的姿态控制,电机驱动,室外定位,都有了一套完整的方案,室内定位还是没有完全成熟.,目前大四轴可以利用的GPS定 ...

  2. 光流Optical Flow介绍与OpenCV实现

    光流Optical Flow介绍与OpenCV实现 文章目录: 一.光流Optical Flow介绍 二.OpenCV实现光流 在学习Super SloMo神经网络生成极慢视频 的时候提到了光流的概念 ...

  3. 光流(Optical flow)-视频分析基础概念

    光流的概念(Optical Flow) 光流是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计 ...

  4. 光流 — Optical Flow

    光流是环境中物体和照相机发生相对移动,物体投影在图像或者视网膜上的运动轨迹,即像素的移动.我们期望通过分析图像序列中像素变化来计算环境中物体和照相机所发生的相对运动轨迹. 光流有一个前提假设:图像采集 ...

  5. 视觉SLAM——稀疏光流法

    环境准备: 代码: #include <opencv2/opencv.hpp> #include <iostream>using namespace cv; using nam ...

  6. 【光流评估】《Optical Flow Estimation using a Spatial Pyramid Network》2016 Tubingen, Germany

    摘要:我们通过结合深度学习和经典空间金字塔结构的方式来计算光流.通过使用每个金字塔级别的光流评估warp图像和更新光流,这种方法以一个粗到精的方式评估图像中的大运动.不同于在每个金字塔层级最小化对象函 ...

  7. opencv求两张图像光流_光流(optical flow)和openCV中实现

    转载请注明出处! ! ! 光流(optical flow)和openCV中实现 光流的概念: 是Gibson在1950年首先提出来的. 它是空间运动物体在观察成像平面上的像素运动的瞬时速度.是利用图像 ...

  8. optical flow 光流的常见可视化方法,光流图像生成

    文章目录 1. 概述 2. [方法一](https://github.com/open-mmlab/mmcv/blob/c47c9196d067a0900b7b8987a8e82768edab2fff ...

  9. 光流法optical flow

    光流(optical flow),字面意思描述的是图像中像素强度的流动.光流法的目的是根据图像中像素点的灰度值强度变化估计出物体移动速度与方向. 光流法的假设 首先,光流估计指的是利用时间上相邻的两帧 ...

最新文章

  1. 使用Spring进行统一日志管理 + 统一异常管理
  2. poj2602(高精度模拟加法)
  3. hash tree算法
  4. KVM、QEMU和KQemu的区别:
  5. myelicesp stepover不能点_市区6处垃圾临时转运点被撤销
  6. 取得NSDate实例各个字段的数字
  7. simplified build configuration
  8. Linux 退出vi编辑模式
  9. Separate Query from Modifier(分离查询和修改)
  10. Android开发笔记(一百一十八)自定义悬浮窗
  11. 写给那些仍旧在公司混日子的人-周鸿祎
  12. Typora数学符号如何表示
  13. 清华大学计算机系成立量子软件研究中心,应明生受聘为主任
  14. oracle ebs fsg报表,Oracle EBS FSG报表迁移
  15. 从本地管理员到域管理员提权
  16. 程序员诗集 - 十月十六游黄浦江(下)
  17. python技巧 黑魔法指南笔记
  18. 英国大学入学要求只是A-level/IB成绩吗
  19. 解决win7电脑无法打开此计算机组策略对象的问题
  20. etch下面,用wine可以安装超星阅览器

热门文章

  1. 最近一周交易所钱包比特币数量减少18425枚
  2. 港股区块链板块持续上行,火币科技涨超50%
  3. PYTHON 100days学习笔记001:初识python
  4. D3、EChart、HighChart绘图demol
  5. Maven学习(三)-----Maven本地资源库
  6. Winform DataGridView修改数据源界面不刷新问题
  7. 『重构--改善既有代码的设计』读书笔记----Replace Temp with Query
  8. Emmet快速编写HTML代码
  9. Spring项目使用Junit4测试配置
  10. Thinkphp5 同时连接两个库