4、视觉里程计:特征点法、直接法和半直接法

先说一下我自己的总体理解:

特征点法,基于最小化重投影误。

提取特征点,计算描述子,匹配,运动估计。

计算描述子和匹配部分可以用光流法跟踪替代

总体上先知道像素之间的关系,在估计运动(最小化重投影误)。

直接法是从光流演变而来的,基于最小化光度误差。

不需要点与点之间的对应关系。

光流描述像素在图像中的运动,直接法则是直接对运动位姿进行优化(最小化光度误差寻找最好的位姿

半直接法则是结合一下。

一、特征点法:

特征点法(Feature-based Methods)是一种通过提取、描述和匹配图像中的显著特征点来估计相机运动的方法。它在视觉里程计(VO)和SLAM(同步定位与地图构建)中广泛应用。以下将详细介绍特征点法的各个步骤及其优缺点。

特征点法的基本步骤

  1. 特征检测
  2. 特征描述
  3. 特征匹配
  4. 运动估计
  5. 优化与滤波

1. 特征检测

特征检测是特征点法的第一步,旨在找到图像中显著且易于识别的特征点。常见的特征检测算法有:

  • Harris角点检测器:检测图像中的角点。
  • FAST(Features from Accelerated Segment Test):快速检测角点,适用于实时应用。
  • SIFT(Scale-Invariant Feature Transform):检测尺度不变的特征点,适用于尺度和旋转变化的环境。
  • SURF(Speeded-Up Robust Features):类似SIFT,但速度更快。
  • ORB(Oriented FAST and Rotated BRIEF):结合FAST和BRIEF描述子的特征检测器,适合实时应用。

2. 特征描述

特征描述的目的是为每个检测到的特征点生成一个独特的描述子,用于匹配和识别。常见的特征描述算法有:

  • SIFT描述子:基于梯度方向直方图,具有良好的鲁棒性。
  • SURF描述子:类似于SIFT描述子,但计算速度更快。
  • BRIEF(Binary Robust Independent Elementary Features):基于二进制模式的描述子,计算效率高。
  • ORB描述子:结合FAST特征检测和BRIEF描述子,适用于实时应用。
3. 特征匹配

特征匹配是将连续图像帧中的特征点进行匹配,以便估计相机的运动。常用的匹配方法有:

  • 暴力匹配(Brute-Force Matching):计算每对特征描述子的距离,选择最小距离作为匹配。
  • KNN匹配(K-Nearest Neighbors):找到每个特征点的k个最近邻点,通过最近邻距离比(NNDR)进行匹配筛选。
  • FLANN(Fast Library for Approximate Nearest Neighbors):用于大规模数据集的快速近似最近邻搜索。

4. 运动估计

特征匹配完成后,可以通过几何方法估计相机的运动。常用的方法有:

  • 本质矩阵(Essential Matrix):用于单目视觉系统,通过五点算法求解。
  • 基础矩阵(Fundamental Matrix):用于单目视觉系统,通过八点算法求解。
  • PnP(Perspective-n-Point):用于单目视觉系统,结合RANSAC进行鲁棒估计。
  • 立体视觉(Stereo Vision):利用双目相机的视差进行三角化计算。

5. 优化与滤波

为了提高估计的精度和鲁棒性,通常还会进行优化和滤波处理:

  • Bundle Adjustment:通过全局优化所有特征点和相机位姿,最小化重投影误差。
  • 滑动窗口优化(Sliding Window Optimization):在局部窗口内进行优化,提高实时性。
  • 卡尔曼滤波(Kalman Filter):基于状态估计和更新的滤波方法。
  • 粒子滤波(Particle Filter):基于概率分布的滤波方法。

特征点法的优缺点

优点
  1. 鲁棒性高:特征点法对光照变化、旋转、尺度变化具有较好的鲁棒性。
  2. 计算效率高:处理相对较少的特征点,计算开销较低,适合实时应用。
  3. 匹配准确性高:特征描述子提供了强大的判别能力,匹配准确性高。
缺点
  1. 依赖特征点质量:在低纹理或特征不明显的环境中,性能会显著下降。
  2. 信息利用率低:仅利用图像中的少量特征点信息,未充分利用图像的全部信息。
  3. 对遮挡和动态场景敏感:特征点可能因遮挡或场景中的动态物体而丢失。

二、直接法(Direct Methods):

直接法(Direct Methods)在视觉里程计(VO)和SLAM(同步定位与地图构建)中,通过直接利用图像的像素强度信息来估计相机的运动和三维重建。这种方法通过最小化图像帧之间的光度误差来优化相机位姿和场景结构。

直接法的基本思想

直接法利用图像的全部或部分像素信息,直接通过光度一致性假设(即同一场景点在不同图像中具有相同的像素强度)来进行运动估计和三维重建。与特征点法不同,直接法不依赖于特征点的检测和描述,而是通过像素强度的直接比较来进行优化。

直接法的工作流程

  1. 选择像素区域
  2. 光度误差计算
  3. 运动估计
  4. 优化方法

1. 选择像素区域

直接法可以分为稠密直接法和稀疏直接法,根据所使用的像素区域不同,具体选择如下:

  • 稠密直接法:使用图像的全部像素信息进行优化。这种方法计算量大,但能提供精细的运动估计。
  • 稀疏直接法:选择图像中梯度较大的像素区域(如边缘和角点)进行优化。计算量较小,适合实时应用。

2. 光度误差计算

在选定像素区域后,通过光度一致性假设计算光度误差。具体步骤如下:

  • 重投影:将当前帧的像素坐标根据估计的相机位姿投影到参考帧。
  • 光度误差:计算重投影后的像素强度与参考帧对应像素的强度差异,通常采用均方误差(MSE)或绝对误差(L1范数)来表示。

光度误差公式如下:

3. 运动估计

通过最小化光度误差来估计相机的运动。直接法通常使用逐帧的运动估计,即在每对相邻帧之间进行优化。

4. 优化方法

直接法的核心在于优化过程,常用的优化方法包括:

  • 高斯-牛顿法(Gauss-Newton Method):一种经典的非线性最小二乘优化方法,适用于光度误差函数的优化。
  • 列文伯格-马夸尔特法(Levenberg-Marquardt Method):在高斯-牛顿法的基础上加入阻尼因子,能够在优化过程初期提供更好的收敛性。
  • 稀疏矩阵求解:在处理大规模优化问题时,通过稀疏矩阵技术加速求解过程。

优点和缺点

优点
  1. 信息利用率高:直接利用图像的全部或部分像素信息,能够提供更精细的运动估计和三维重建。
  2. 适用范围广:在低纹理或重复纹理环境中,依然可以利用像素强度信息进行估计。
  3. 高精度:在高帧率情况下,可以提供非常高的精度。
缺点
  1. 计算开销大:需要处理大量像素信息,计算开销较高,尤其是稠密直接法。
  2. 对光照变化敏感:对光照变化和曝光不一致敏感,可能导致估计误差。
  3. 需要良好的初始估计:对初始位姿估计的要求较高,可能需要借助IMU数据进行初始估计。

应用场景

直接法适用于需要高精度和详细运动估计的场景,典型的应用场景包括:

  • 3D重建:利用直接法的高精度,实现精细的三维场景重建。
  • 增强现实(AR):实时跟踪相机位置,叠加虚拟信息。
  • 机器人导航:在复杂环境中进行高精度的定位和地图构建。

实例应用:LSD-SLAM

LSD-SLAM(Large-Scale Direct Monocular SLAM)

LSD-SLAM是一个基于直接法的大规模单目SLAM系统,利用稠密直接法进行全局地图构建和相机轨迹估计。其主要特点包括:

  • 稠密直接法:使用图像的全部像素信息进行运动估计和地图构建。
  • 图优化:通过全局图优化提高估计的精度和一致性。
  • 大规模应用:能够处理大范围的场景,实现大规模三维重建。

总结

直接法通过直接利用图像的像素强度信息进行运动估计和三维重建,提供了一种高精度、高信息利用率的方法。尽管计算复杂度较高且对光照变化敏感,但通过稠密或稀疏像素的优化,直接法在高精度和详细场景重建中表现出色。LSD-SLAM是直接法的典型实现,展示了其在大规模三维重建和实时高精度视觉里程计中的有效性。

三、半直接法(Semi-Direct Methods)

半直接法(Semi-Direct Methods)结合了特征点法和直接法的优点,旨在利用图像的稀疏特征点和密集的像素信息来实现高效且精确的视觉里程计。半直接法在视觉里程计(VO)和SLAM(同步定位与地图构建)中提供了一种平衡计算效率和估计精度的方法。

半直接法的基本思想

半直接法利用稀疏特征点进行初始匹配和跟踪,同时使用这些特征点周围的像素信息进行细化优化。这种方法可以避免纯粹特征点法对特征点检测和描述的强依赖,同时也不会像直接法那样处理整个图像的每个像素,从而在计算复杂度和精度之间找到一个平衡点。

半直接法的工作流程

  1. 特征点检测
  2. 粗略匹配
  3. 直接光度误差优化
  4. 滑动窗口优化

1. 特征点检测

首先,在图像中检测稀疏的特征点。这些特征点通常使用快速且鲁棒的检测算法,如FAST、ORB等。

2. 粗略匹配

接下来,通过特征点的描述子(如ORB描述子)在连续帧之间进行粗略匹配。这一步为后续的直接优化提供初始匹配点。

3. 直接光度误差优化

在初始匹配的基础上,使用特征点及其周围的像素区域进行直接光度误差优化。具体步骤包括:

  • 选取窗口:在每个特征点周围选取一个小窗口。
  • 计算光度误差:计算窗口内像素的光度误差,即图像亮度值的差异。
  • 非线性优化:通过最小化这些光度误差,优化相机的运动参数。这一步通常使用非线性优化方法,如高斯-牛顿法或列文伯格-马夸尔特法。

4. 滑动窗口优化

为了进一步提高精度和鲁棒性,使用滑动窗口优化技术在一段时间内的多个帧之间进行全局优化。这样可以同时考虑多个帧之间的约束,提高估计的稳定性。

优点和缺点

优点
  1. 鲁棒性高:结合了特征点法和直接法的优点,对特征点检测和描述的依赖减少,同时利用像素信息提高了精度。
  2. 计算效率较高:相比于直接法处理整个图像,半直接法只处理特征点周围的像素区域,计算复杂度较低。
  3. 精度较高:通过光度误差优化提高了运动估计的精度。
缺点
  1. 复杂度增加:需要同时处理特征点匹配和光度误差优化,算法实现复杂度增加。
  2. 对初始估计依赖:光度误差优化需要较好的初始匹配,粗略匹配的质量直接影响最终结果。
  3. 对光照变化敏感:直接光度误差对光照变化敏感,可能需要额外的光照校正。

实例应用:SVO(Semi-Direct Visual Odometry)

SVO是半直接法在视觉里程计中的典型实现。SVO利用稀疏特征点进行初始匹配,然后在特征点周围的像素区域进行光度误差优化。以下是SVO的主要流程:

  1. 特征点检测和匹配:使用FAST检测器检测稀疏特征点,通过ORB描述子进行粗略匹配。
  2. 初步估计:利用初步匹配的特征点进行粗略的运动估计。
  3. 光度误差优化:在特征点周围的小窗口内进行光度误差优化,细化运动估计。
  4. 局部地图管理:维护一个局部地图,通过滑动窗口优化进行全局调整。

通过这种方法,SVO能够在不同环境中提供高效且精确的视觉里程计估计,广泛应用于无人机和机器人导航等领域。

总结

半直接法是一种结合特征点法和直接法优点的视觉里程计方法。通过利用稀疏特征点的初始匹配和密集像素的光度误差优化,半直接法能够在计算效率和估计精度之间找到平衡点。SVO作为半直接法的典型实现,展示了其在实际应用中的有效性和鲁棒性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2的n次方表格

做项目的时候有时候会担心数据溢出,常用的数据长度就有8位、16位、32位、64位。相信八位都很容易记住就是256,16位是65536,但是数字一大就记不住了,甚至连换算为十进制是多少位都不得而知。 下表中就有1 ~ 64位数据的范围。 0次…

linux中sed命令和awk命令如何使用??????

sed命令 作用:修改/替换源文件中的内容 格式: sed 选项 操作 目标文件 选项: -i:修改初始文件【如果不加-i,那就是仅仅修改内存中的文件副本】 案例:将1.txt文件中的tom修改成jerry sed -i "s/…

基于matlab提取一维数组中非nan的数据

一、使用逻辑索引 使用逻辑索引来选择数组中所有非NaN的元素。逻辑索引是与原数组同型的逻辑数组,true对应的位置将会被选中。 % 假设a是一维数组 a [1, 2, NaN, 4, NaN, 6];% 使用逻辑索引提取非NaN元素 non_nan_elements a(~isnan(a)); 二、使用isnan函数和fi…

计算机二级Access选择题考点

在Access中,若要使用一个字段保存多个图像、图表、文档等文件,应该设置的数据类型是附件。在“销售表"中有字段:单价、数量、折扣和金额。其中,金额单价x数量x折扣,在建表时应将字段"金额"的数据类型定义为计算。若…

WebSocket 基础使用

1.基本概念 WebSocket 支持双方通信即服务端可以主动推送给用户端,用户端也可以主动推送消息给服务器。前端必须进行协议升级为 WebSocket 名称值Upgradewebsocket 2. 后端代码 package com.koshi.websocket.server;import com.alibaba.fastjson.JSON; import com…

RBAC权限实战

一、项目结构说明、搭建以及初步验证 引入SSM框架依赖: <dependencies> <dependency> <groupId>javax.servlet…

【算法-力扣】72. 编辑距离(动态规划)

目录 一、题目描述 二、解题思路 三、参考答案 一、题目描述 编辑距离 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#…

解析FTP服务器:从基础知识到vsftpd实战操作

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

组合和外观模式

文章目录 组合模式1.引出组合模式1.院系展示需求2.组合模式基本介绍3.组合模式原理类图4.解决的问题 2.组合模式解决院系展示1.类图2.代码实现1.AbsOrganizationComponent.java 总体抽象类用于存储信息和定义方法2.University.java 第一层&#xff0c;University 可以管理 Coll…

商城系统如何选型?

近日&#xff0c;拼多多发布618百亿补贴活动首周战报。5月19日活动启动一周内&#xff0c;百亿补贴商家参与数量相比去年618首周增长逾90%。其中&#xff0c;农产品商家同比增长83%&#xff0c;数码家电商家同比增长86%&#xff0c;美妆商家同比增长105%。 作为一家成立还不到1…

python中装饰器的用法

最近发现装饰器是一个非常有意思的东西&#xff0c;很高级&#xff01; 允许你在不修改函数或类的源代码的情况下&#xff0c;为它们添加额外的功能或修改它们的行为。装饰器本质上是一个接受函数作为参数的可调用对象&#xff08;通常是函数或类&#xff09;&#xff0c;并返…

uaGate SI自动化状态监测和工业4.0解决方案

克劳斯玛菲集团&#xff08;于2016年被中国化工集团公司收购&#xff09;为其注塑和反应/挤出系统采用了uaGate SI网关技术并实行了开放且独立于平台的OPC UA标准&#xff0c;以用于设备状态自动化监控&#xff0c;这大大提高了产量并避免了机器停机问题。 自动化状态监测提高了…

文件操作学不懂,小代老师带你深入理解文件操作(下卷)

文件操作学不懂&#xff0c;小代老师带你深入理解文件操作下卷 6. ⽂件的随机读写6.1 fseek6.2 ftell6.3 rewind 7. ⽂件读取结束的判定7.1 被错误使⽤的 feof 8. ⽂件缓冲区 6. ⽂件的随机读写 6.1 fseek 根据⽂件指针的位置和偏移量来定位⽂件指针&#xff08;⽂件内容的光…

Golang使用讯飞星火AI接口

一、API申请 https://www.bilibili.com/video/BV1Yw411m7Rs/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 注册申请&#xff0c;需要在此页面获取appid、apisecret、apikey https://www.xfyun.cn/ https://console.xfyun.cn/ser…

wsl子系统ubuntu20.04 设置docker服务开机自启动

docker在重要性毋庸置疑。掌握虚拟化必备工具。大家个人都会有台式机&#xff0c;那么windows的wsl子系统ubuntu应该都会开启来熟悉linux分布式开发。docker是客服OS限制的有利工具。那就开始准备docker环境吧。 docker安装 docker安装前建议apt-get源换国内源。这个题目太多…

Python----多线程使用

在运行代码的时候&#xff0c;总会想让程序同时运行几个东西&#xff0c;这个时候就需要用到多线程。可以说使用python中的threading库来实现多线程&#xff0c;多线程运行的具体线程数量和每个线程的执行时间由操作系统的调度策略决定。 比如我现在需要同时发起请求&#xff…

2024.6.14KMP算法学习记录

目录 一、学习视频 二、跟练代码 主要是想起到一个记录的作用 一、学习视频 【最浅显易懂的 KMP 算法讲解】 https://www.bilibili.com/video/BV1AY4y157yL/?share_sourcecopy_web&vd_sourcedc0e55cfae3b304619670a78444fd795 二、跟练代码 代码来自视频 # KMP算法…

android用Retrofit进行网络请求和解析

Retrofit 的原理 Retrofit的核心原理包括动态代理与Service Method的构建、注解解析与请求配置、网络请求执行与响应处理等。它是一个类型安全的HTTP客户端&#xff0c;用于Android和Java平台&#xff0c;通过将HTTP API转化为Java接口的方式&#xff0c;简化了网络请求的编写…

VMware Workerstation开启虚拟机后,产生乱码名称日志文件

问题情况 如下图所示&#xff0c;我的虚拟机版本是16.1.2版本&#xff0c;每次在启动虚拟机之后&#xff0c;D盘目录下都会产生一个如图下所示的乱码名称文件。同时&#xff0c;虚拟机文件目录也是杂乱不堪&#xff0c;没有按照一台虚拟机对应一个文件夹的形式存在。 问题处理…

机器,学习没有捷径

1 捷径学习 1.1 你捷径学习了么 深度学习因为其优异的学习能力&#xff0c;已经成为推动人工智能发展当之无愧的主力军。深度学习在NLP和CV等不同的场景下都展现了优异的能力。但深度学习也存在一个与生俱来的问题&#xff1a;捷径学习。 捷径学习中的捷径表示的是一种有缺陷…