第七讲 视觉里程计

概要:前端视觉里程计(Visual Odometry, VO)。视觉里程计的主要任务是估算相邻图像间相机的运动,以及局部地图的样子。VO又称前端。


主要学习目标:

1.理解图像特征点的意义,并掌握在单幅图像中提取特征点及多幅图像中匹配特征点的方法。
2. 理解对极几何的原理,利用对极几何的约束,恢复出图像之间的摄像机的三维运动
3.理解PNP问题,以及利用已知三维结构与图像的对应关系求解摄像机的三维运动
4.理解ICP问题,以及利用点云的匹配关系求解摄像机的三维运动
5.理解如何通过三角化获得二维图像上对应点的三维结构


视觉里程计的算法主要分为两大类:特征点法和直接法。
  • 特征点法
  • 特征点:尽管灰度图像中的单个图像像素也是一种”特征“,但是我们希望特征点在相机运动后仍能保持稳定,所以我们更倾向于把图像中的角点、边缘和区块都当成图像中具有代表性的地方,但是光是如此还不够,单纯的角点并不具备尺度和旋转不变性,可能远处看是角点,近处看却不是角点,旋转后外观也会发生变化。
    因此,计算机领域的研究者们提出了一些人工设计的特征点,如:SIFT、SURF、ORB等,它们拥有如下性质:
 1.可重复性:相同的特征可以在不同的图像中找到。2.可区别性:不同的特征有不同的表达方式。3.高效率:同一图像中特征点的数量应该远远小于像素的数量。4.本地性:特征仅与一小片图像区域相关。
  • 特征点由关键点(Key-point)和描述子(Descriptor)两部分组成。
  • 关键点是指该特征点在图像里的位置,有些特征点还具有朝向、大小等信息。
  • 描述子通常是一个向量,按照某种人为设计方式,描述了该关键点周围像素的信息。
    描述子是按照”外观相似的特征应该由相似的描述子“的原则设计的。因此,只要两个特征点的描述子在向量空间上的距离相近,就可以认为它们是同样的特征点。

  • 常用特征点简介:
  • SIFT:(尺度不变特征变换,Scale-Invariant Feature Transform)充分考虑了在图像变换中出现的光照、尺度、旋转等变换,但计算量庞大。
  • ORB:它改进了FAST关键点检测不具备方向性的问题,并采用了速度极快的二进制描述子BRIEF。
  • 同一幅图像特征点的提取速度,ORB>SURF>>SIFT。目前SLAM中ORB是质量和性能之间较好的折中选择。

  • ORB

  • 提取ORB特征分为如下两个步骤:

1.FAST角点提取:找出图像中的“角点”。相较于原版的FAST,ORB中计算了特征点的主方向,为后续的BRIEF描述子增加了旋转不变特性。
2.BRIEF描述子:对前一步提取出特征点的周围图像区域进行描述。ORB对BRIEF进行了一些改进,主要是指在BRIEF中使用了先前计算的方向信息。

  • FAST关键点:FAST是一种角点,主要检测局部像素灰度变化明显的地方,以速度快著称。

1.选取像素p,假设它的亮度为Ip;
2.设置一个阈值T(比如Ip的20%);
3.以像素p为中心,选取半径为3的圆上的16个像素点;
4.假如选取的圆上,有连续的N个点的亮度大于Ip+T或小于Ip-T,那么像素p可以被认为是特征点;
5.循环以上4步,对每一个像素执行相同操作。

  • FAST 描述子
    论文:BRIEF: Binary Robust Independent Elementary Features
    BRIEF算法的核心思想是在关键点P的周围以一定模式选取N个点对,把这N个点对的比较结果组合起来作为描述子。为了保持踩点固定,工程上采用特殊设计的固定的pattern来做

  • 原始的FAST关键点没有方向信息,这样当图像发生旋转后,brief描述子也会发生变化,使得特征点对旋转不鲁棒。

  • 解决方法:orientated FAST,使用灰度质心法计算特征点的方向

  • 什么是灰度质心法?
    所谓质心是指以图像块灰度值作为权重的中心,其具体操作步骤如下:

  • 此时我们拥有了旋转不变性,但是还需要解决尺度不变性,而尺度不变性可以通过构建图像金字塔,并在图像金字塔上的每一层检测角点来实现。


金字塔底层是原始图像,每往上一层,就对图像进行一个固定倍率的缩放,如图所示:假如相机在后退,那我们能够在上一个图像金字塔的上层和下一个图像金字塔的下层中找到匹配。
通过以上方法,FAST角点便具备了尺度和旋转不变性。

  • BRIEF描述子:是一种二进制描述子,其描述向量由许多个0和1组成,这里的0和1编码了关键点附近两个随机像素(比如q和p的关系):如果p比q大,则取1,反之就取0。最后得到一个二进制字符串组成的向量。

  • 特征匹配:主要是计算两个特征之间的描述子距离,来刻画两个特征之间的相似程度,对于浮点类型的描述子,使用欧氏距离进行度量即可,对于二进制描述子,通常采用汉明距离(Hamming distance)作为度量-两个二进制串之间的汉明距离,指的是其不同位数的个数。

待续…

视觉SLAM十四讲学习笔记 第7讲 视觉里程计相关推荐

  1. 乔利斯基三角分解_《视觉SLAM十四讲课后作业》第二讲

    1.设线性⽅程 Ax = b,在 A 为⽅阵的前提下,请回答以下问题: 1. 在什么条件下,x 有解且唯⼀? 非齐次线性方程在A的秩与[A|B]的秩相同时方程有解,当R(A)=R(A,B)=n时方程有 ...

  2. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践

     专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第 ...

  3. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵

    专栏系列文章如下:  专栏汇总 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLA ...

  4. 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理

    第六讲学习笔记如下: 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题_goldqiu的博客-CSDN博客 ​​​​​​视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_ ...

  5. 视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机

    第四讲---第五讲学习笔记如下: 视觉SLAM十四讲学习笔记-第四讲-李群与李代数基础和定义.指数和对数映射_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模 ...

  6. 视觉SLAM十四讲学习笔记---前三讲学习笔记总结之SLAM的作用、变换和位姿表示

    经过半年学习SLAM相关知识,对SLAM系统有了一些新的认识,故回看以前的学习记录,做总结和校正. 前三讲学习笔记如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉S ...

  7. 视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点法和特征提取和匹配实践

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  8. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的实践-高斯牛顿法和曲线拟合

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  9. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  10. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

最新文章

  1. 【Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 )
  2. 历届冬奥会中国金牌得主一览
  3. python for loop循环程序语句_python-带for循环的格式化输出_for-loop_酷徒编程知识库...
  4. 步步为营 .NET 设计模式学习笔记 十三、Bridge (桥接模式)
  5. 《软件需求十步走》阅读笔记06
  6. 安装mysql8.0配置环境_Windows环境下MySQL 8.0 的安装、配置与卸载
  7. Hyperledger Fabric 或 Composer的configtx.yaml配置文件解析
  8. 2020-11-06
  9. EXCEL 电子游戏销售数据分析项目
  10. 《嵌入式 – GD32开发实战指南》第9章 呼吸灯
  11. matlab中nc值是什么意思,科学网-.nc数据读取详细资料matlab2010a及后面的版本-张凌的博文...
  12. Faulty Robot-(dfs或者dijkstra)
  13. keepalived配置虚拟ip无法ping通解决方法
  14. 炒币风潮又起,区块链不该这么玩
  15. StartAllBack v3.5.4.4550 Win11经典开始菜单增强工具
  16. [LGOJ5558]心上秋(倍增)
  17. 巴黎圣母院重建设计竞赛辟谣!“巴黎心跳”夺冠,仅仅只是自嗨?
  18. [脚本]百度网盘直接下载助手:解决客户端限制
  19. node pkg 打包一个为一个可执行程序(linux、windows、mac)
  20. python随机出现外星人飞船_python外星人入侵游戏如何改变飞船的大小

热门文章

  1. 私房菜谱大放送之第三弹——红烧小排
  2. pytorch中的squeeze和unsqueeze的用法小结
  3. 使用阿里云服务器建站WordPress博客网站上线全流程
  4. nginx php 404 not found,解决项目中出现的404 Not Found nginx/1.15.0
  5. 机器学习之特征选择与稀疏学习
  6. Python 集合 14 -计算集合之间的差集
  7. java.sql.SQLException: Access denied for user ‘kuber‘@‘localhost‘ (using password: YES)报错的解决方法
  8. 成都榆熙:转化率的定义是什么?如何提升?
  9. 评分卡模型开发-主标尺设计及模型验证
  10. 借口,找女朋友,怎么会没有时间呢?