视觉SLAM14讲——视觉里程计1(特征点法)

2023-05-16

前面说过视觉SLAM系统分为前端和后端两个内容,前端也叫做视觉里程计。视觉里程计的主要作用是根据相邻的两张图像的信息粗略的估计出相机运动,给后端一个较好的初始值。视觉里程计的两大算法为:特征点法和直接法。本讲主要是特征点法。

1、特征点法

视觉里程计最核心的问题是如何根据图像来估计相机运动。图像在计算机中是以矩阵的形式存储的,直接从矩阵的角度来估计图像是比较复杂的。一个简便的做法是:在图像中选取一些有代表性的点,这些点在相机视角发生少量变化后仍会保持不变,我们需要在各个图像中找到相同的点,在这些点的基础上来讨论相机位姿估计问题。在SLAM模型中,称这些点为路标,在视觉SLAM中,称路标为图像特征。

特征点是图像中一些特别的地方,我们可以将图像中的角点,边缘,区块都当作图像中有代表性的地方。

我们更容易在两幅图像中指出同一个角点,两幅图像中指出同一个边缘则较为困难,因为边缘附近图像的局部是相似的,两幅图像的同一个区块则是最复杂的。

角点最好辨认,所以一种直观的提取特征方式就是在不同的图像间辨认角点,确认他们的对应关系。角点的提取算法有:Harris角点,Fast角点等。

然而在实际应用中,单纯的提取角点不能够解决问题,图像远处看是一个角点,当相机离近后可能就不是角点了。或者当相机旋转运动时,角点的外观也会发生变化,也不容易辨认是同一个角点。在经过人工设计后有著名的SIFT,SURF,ORB等,特征点有以下性质:

1、可重复性:相同的特征可以在不同的图像中找到

2、可区别性:不同的特征有不同的表达

3、高效率:同一图像中,特征点的数量应远小于像素数量(减少计算量)

4、本地性:特征点仅与小片图像区域有关

特征点由关键点描述子两部分组成。所以当我们说计算ORB的特征点就是计算ORB的关键点和描述子。

关键点是指该特征点在图像里的位置,有些特征点还具有朝向,大小的信息。

描述子通常是一个向量,按照某种人为设计的方式,描述该关键点周围像素的信息。描述子是按照:外观相似的特征应该有相似的描述子这一原则设计的。所以,如果两个特征点的描述子在向量空间中距离相近,就可以认为是同样的特征点。

1、ORB特征

ORB特征由关键点和描述子两部分组成,提取ORB特征主要分为以下两个步骤:

1、FAST角点提取:找出图像中的角点。ORB相比原版的FAST,ORB中计算了特征点的主方向,为后续的BRIEF描述子增加了旋转不变特性。

2、BRIEF描述子:对前一步提取的特征点的周围图像区域进行描述。ORB在对BRIEF进行了一些改进,主要是指在BRIEF中使用了先前计算的方向信息。

FAST关键点

FAST是一种角点,主要检测局部像素灰度变化明显的地方,速度快。思想为:如果一个像素与领域的像素差别较大(过亮或过暗),那么可能是角点。FAST只需要比较像素亮度的大小即可:

在FAST-12算法中,为了高效,增加了一项预测试操作。对于每个像素,直接检测邻域圆上的1,5,9,13像素,当这四个像素中有三个同时大于亮度±阈值时候,才可能是一个角点,这样大大加快了检测速度。

FAST特征点仅仅是比较像素间亮度的差异,所以速度很快,但是FAST具备尺度问题,由于它只取半径为3的圆,远处看是角点的地方,在近处也许就不是角点。针对这样的问题,ORB增加了尺度和旋转的描述。尺度不变性由构建图像金字塔解决,旋转问题由灰度质心法解决。

 金字塔底层是原始图像,每往上一层,就对图像进行一定倍率的缩放,这样就有了不同分辨率的图像。较小的图像看作是远处看过来的场景。我们可以匹配不同层上的图像,从而实现尺度不变性。假如相机在倒退,我们应该在上一层或者下一层找到匹配。

旋转方面,计算特征点附近的图像灰度质心,质心是指以图像块灰度值作为权重的中心,步骤为:

在一个小的图像块B中,定义图像块的矩为:

 2、通过矩来寻找图像块的质心:

 3、连接图像块的几何中心O和质心C,得到方向向量OC,特征点的方向定义为:

 通过图像金字塔和计算图像灰度质心,FAST角点有了尺度和旋转的描述,增强了鲁棒性。

BRIEF描述子

BRIEF是一种二进制描述子,描述向量由许多0,1组成,这里的0,1编码了关键点附近两个随机像素(p和q)的大小关系:如果p大于q,取1,反之取0。取128个这样的p,q,则最后得到128维由0,1组成的向量。由BRIEF是由二进制组成,存储起来也很方便,适用于实时图像匹配。但是BRIEF不具备旋转不变性,使得图像在旋转时容易丢失,但是ORB的FAST特征点在提取的时候解决了旋转问题,所以ORB方法在SLAM中很受欢迎。

2、特征匹配

特征匹配是视觉SLAM中极为重要的一步,特征匹配确立当前看到的路标与之前看到的路标之间的对应关系。通过对图像与图像或者图像与地图之间的描述子进行准确匹配,可以为后续的优化减轻负担。

考虑两个时刻的图像,在图像中提取到特征点,在图像

中提取到特征点 。如何寻找这两个元素的对应关系?最简单的是暴力匹配。即对每一个特征点与所有的测量描述子的距离。对于BRIEF描述子,往往使用汉明距离作为度量——两个二进制串之间的汉明距离,指的是其不同位数的个数。如果特征点数量很大,暴力匹配的方法的运算量会很大。快速近似最近邻算法更适合与匹配点数量极多的情况,该算法集成于OpenCV,可以直接使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

视觉SLAM14讲——视觉里程计1(特征点法) 的相关文章

  • Linux基础之网络编程

    网络编程篇 一 网络编程概述二 字节序三 socket编程步骤四 socket服务端和客户端代码的初步实现五 简单的ftp项目实现的功能有哪些 xff1f 六 ftp项目服务器和客户端代码实现 一 网络编程概述 1 进程间通信 xff1a
  • F450无人机组装与调试

    文章目录 认识无人机零部件机架图片 电机电调螺旋桨飞控套件 包括飞控 LED信号灯 xff0c GPS模块 xff0c 电源管理模块 遥控器及遥控器接收机电池护桨 确认工具清单组装过程1 组装机架2 组装电机判断电机正反选择螺丝组装电机连接
  • Openstack-mitaka安装部署

    openstack 一台controller xff0c 一台compute 且两台均为双网卡 xff0c ens33为主网卡 xff0c ens36不需要配置IP 主机名称 网卡名称 网卡类型 网卡IP ens33 controllere
  • Vue history模式路由 部署到二级目录 配置

    1 nginx配置 https xxxx com cms gt C static server cms location cms root C static server 项目部署资源所在磁盘目录 index index html try
  • 【Docker】将本地镜像推送到远程库/私有库

    前言 这里记录如何将本地镜像推送到远程库和私有库 区别 xff0c 一个是存放到阿里云 xff0c 同一个团队可以登录到同一个阿里云仓库 xff0c 去拉取镜像 一个是存放到本地私有库 xff0c 同一个团队可以连接同一个私有库 xff0c
  • HTTP协议--几种数据传输方式

    1 xff09 无状态 http协议是一种自身不对请求和响应之间的通信状态进行保存的协议 xff0c 即无状态协议 这种设置的好处是 xff1a 更快的处理更多的请求事务 xff0c 确保协议的可伸缩性 不过随着web的不断发展 xff0c
  • PDU 超链接

    http blog sina com cn s blog 453226290102wvnu html http blog sina com cn s blog 453226290102wvnv html http blog sina com
  • Canal监控MySQL数据到Kafka详细步骤(jdk+zookeeper+kafka+canal+mysql)

    目录 一 前言二 环境准备三 安装JDK四 安装zookeeper五 安装Kafka六 安装MySQL七 安装canal服务端 xff08 canal监控mysql数据发送到kafka xff09 八 测试是否可以监控到数据九 结语 一 前
  • 流媒体服务器搭建

    本文介绍如何在阿里云 腾讯云等云主机上搭建流媒体服务器 xff0c 包括如何选择云主机配置 如何选择带宽和流媒体服务器软件选择等 流媒体服务器是支撑视频播出的基础系统 xff0c 具有视频直播 视频点播的播出能力 xff0c 有些使用场景下
  • 什么是BGP

    文章目录 1 基本概念什么是BGPBGP路由协议的特点IBGP水平分割规则BGP的路由器号 Router ID BGP工作原理BGP分类 1 基本概念 自治系统 xff0c 指的是在同一个组织管理下 使用相同策略的设备的集合 xff1b 不
  • Web服务------Nginx域名重定向(Location匹配与Rewrite重写)

    目录 一 常用的Nginx正则表达式二 location1 location 的分类2 location 常用的匹配规则3 location 优先级4 location 示例说明5 优先级总结6 匹配规则 二 rewrite1 rewrit
  • 华为云-计算云服务介绍

    前言 相信很多小伙伴在刚开始接触各类云产品的时候 xff0c 被各种各样的云产品类如规格 型号 价格 适用场景等问题所困扰 本文就给大家介绍一下华为云常见云产品的规格区别和适用场景 帮助大家选择合适的云产品 文章目录 前言一 计算云服务1
  • 数据资源 | 八大板块!数据公开下载渠道

    本文综合整理自网站企研 中国学术大数据平台 xff08 https r qiyandata com xff09 来源 xff1a 企研 中国学术大数据平台 公共数据资源 目录 三农 地理信息 生态环境 碳中和 调查数据 省级统计局 省级政府
  • [C++] std::vector

    std vector template lt class T class Alloc 61 allocator lt T gt gt class vector generic template vector是表示可以改变大小的数组的序列容器
  • centos克隆

    下一步 下一步 选中创建完整克隆 启动克隆的系统 编辑 xff1a vi etc udev rules d 70 persistent net rules 修改之后 修改端口号和attr 修改完 执行 重启 xff1a reboot pin
  • 用pyhon下载jupyter遇到的问题(pip版本过低)

    首先安装jupyter 的前提是需要提前安装python 3 3版本及以上 然后输入 pip install jupyter 出现下面问题 python V 在命令行窗口输入 xff0c 验证python的版本 pip install ju
  • ubuntu利用usb_cam打开摄像头

    一 安装摄像头驱动usb cam 想要标定多个相机 xff0c 首先得把相机打开吧 xff0c usb cam是针对usb摄像头的ros驱动包 xff0c 简单来说就是得有这个功能包 xff0c 才能在ros中把摄像头打开 首先打开终端 x
  • Jmeter性能测试(1)---基础介绍

    jmeter xff08 一 xff09 基础介绍 参考书籍 xff1a 段念 软件性能测试与案例剖析 第二版 推荐一本书 零成本实现web性能测试 基于Apache jmeter xff0c 主要内容是一些关于jmeter的实战使用 xf
  • 利用Opencv实现物体的跟踪(1)

    目前感觉 xff0c 利用opencv实现的物体追踪 xff0c 关键要设置好你所检测对象的area xff0c 不然很容易出现混乱 本人也是自学 xff0c 敬请批评指正 import cv2 定义运算的核算子 BLUR RADIUS 6
  • C语言连连看秒杀辅助

    图像处理第一课 连连看秒杀辅助 项目效果 直接使用C语言 xff0c 实现 连连看 最强辅助 项目分析 项目的技术核心 不是逆向 xff0c 而是图像处理 图像处理 xff0c 更高维度的技术手段 电影中的图像处理应用 无人机战争 电影 完

随机推荐