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

news2025/6/24 19:08:54

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

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

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

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

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

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

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

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

半直接法则是结合一下。

一、特征点法:

特征点法(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.coloradmin.cn/o/1823025.html

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

相关文章

【C语言】一篇文章带你深度理解函数

目录 1. 函数的概念 2. 库函数 2.1 标准库和头文件 2.2 库函数的使用方法 2.2.1 举例 sqrt 2.2.2 库函数文档的一般格式 3. 自定义函数 3.1 函数的语法形式 3.2 函数的举例 4. 形参和实参 4.1 实参 4.2 形参 4.3 实参和形参的关系 5. …

【区块链】记账的千年演化:从泥板到区块链

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 记账的千年演化:从泥板到区块链引言一、古代记账:泥板与…

ComfyUI-全民舞王-MusePose

musepose-demo 项目介绍 https://github.com/TMElyralab/MusePose发布的模型能够根据给定的姿势序列,生成参考图中人物的舞蹈视频,结果质量超越了同一主题中几乎所有当前开源的模型。发布pose align算法,以便用户可以将任意舞蹈视频与任意参…

基于Matlab的纸币币值检测系统设计(GUI界面) 【含Matlab源码 MX_004期】

简介: 基于Matlab的纸币币值检测系统是一种利用数字图像处理技术来自动识别和鉴别纸币面额的系统。 图像获取:获取纸币的图像。 预处理:对获取到的图像进行预处理,包括去噪、灰度化、边缘检测等操作,以便后续的处理。…

电脑找不到vcruntime140_1.dll的原因分析及5种解决方法分享

电脑已经成为我们生活和工作中不可或缺的工具。然而,在使用电脑的过程中,我们常常会遇到一些常见的问题,其中之一就是电脑显示vcruntime140_1.dll丢失。那么,这个问题是怎么回事呢?又有哪些解决方法呢?如何…

首期“软件企业 AI 开发提效实战营”成功举办

人工智能是国家战略的重要组成部分,是未来国际竞争的焦点和经济发展的新引擎。随着人工智能科技的飞速发展,软件企业如何借助 AI 工具辅助编程,提升开发效率,成为业界关注的焦点。此前,浙江省软件行业协会携手阿里云成…

GitCode热门开源项目推荐:Spider网络爬虫框架

在数字化高速发展时代,数据已成为企业决策和个人研究的重要资源。网络爬虫作为一种强大的数据采集工具受到了广泛的关注和应用。在GitCode这一优秀的开源平台上,Spider网络爬虫框架凭借其简洁、高效和易用性,成为了众多开发者的首选。 一、系…

网络编程---Java飞机大战联机

解析服务器端代码 代码是放在app/lib下的src下的main/java,而与之前放在app/src/main下路径不同 Main函数 Main函数里只放着创建MyServer类的一行 public static void main(String args[]){new MyServer();} MyServer构造函数 1.获取本机IP地址 //获取本机IP地…

上网行为管理的作用是什么?有哪些上网行为管理软件?

上网行为管理在现代企业及家庭环境中扮演着至关重要的角色,其作用不仅限于提升网络安全性,还涉及保护企业信息安全、提高员工工作效率等多个方面。以下将详细阐述上网行为管理的作用,并介绍几款主流的上网行为管理软件。 一、上网行为管理的作…

CANoe连接Option Scope使用方法

系列文章目录 文章目录 系列文章目录前言一、前提条件二、CANoe配置三、PicoScope接线四、CANoe捕捉报文五、眼图功能前言 本文档主要介绍如何使用CANoe Option .Scope捕获CAN总线上的物理波形,并利用眼图进行分析。 一、前提条件 使用CANoe Option .Scope,需要具备以下条件…

Folx软件下载及安装教程

简介: Folx Pro是一款适合Mac的专业下载工具也是一款BT下载器,Folx中文版有一个支持Retina显示的现代界面,提供独特的系统排序、存储下载内容与预览下载文件。Folx中文官网提供Folx教程、激活码、下载。 安 装 包 获 取 地 址: …

c->c++(一):部分KeyWord

本文主要探讨c相关关键字的使用。 char char默认是unsigned/signed取决平台,wchar_t宽字符:用于Unicode编码(超过一个字节),用wcin和wcout输入输出,字符串为wstring char8_t(20),char16_t(11起),char32_t(11):指定占用字节数且是无符号,字符串类u8string,u16s…

传闻Google谷歌代投印度slots游戏广告效果备受关注

传闻Google谷歌代投印度slots游戏广告效果备受关注 在印度,随着互联网的普及和移动设备的广泛使用,网络游戏和在线娱乐产业逐渐兴起。其中,“slots游戏”作为一种受欢迎的在线博彩形式,吸引了大量玩家。对于广告主而言&#xff0…

这世上又多了一只爬虫(spiderflow)

让我们一起默念: 爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫爬虫 接着大声喊出来: 一!只!爬!虫!呀!爬!呀!爬&#xf…

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

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

惠海 H6213L降压恒压IC 支持3.3V5V12V30V40V60V100V电动车仪表供电稳压芯片方案

H6213L高压降压开关控制器是一款功性能良好的电源管理解决方案。它集成了众多先进的功能,使其在各种高压输入的应用场景中都能表现出色。 首先,H6213L具备高达150V的耐压能力,并支持高达120V的宽压输入范围。这意味着它可以轻松应对各种高压…

时间卷积网络与膨胀卷积:深入理解其原理与应用

TCN, Temporal Convolutional Networks 时间卷积网络与膨胀卷积:深入理解其原理与应用一、时间卷积网络(TCN)简介二、膨胀卷积的核心概念1. **膨胀卷积(Dilated Convolution)**2. **Kernel(卷积核&#xff…

Rejetto HTTP文件服务器 未授权RCE漏洞复现(CVE-2024-23692)

0x01 产品简介 Rejetto HTTP File Server(HFS)是一个基于HTTP协议的文件服务器软件,旨在为用户提供简单、轻量级且易于使用的文件共享解决方案。功能强大、易于使用的文件服务器软件,无论是个人使用还是团队协作,HFS都能满足用户的需求,提高工作效率。 0x02 漏洞概述 …

Zig标准库:最全数据结构深度解析(2)

1.1 queue structures LinearFifo:缓冲区是FIFO内部的一个组成部分,其大小按照指定的尺寸设定。初始化时,这个缓冲区是以切片的形式传递给初始化函数的。为了动态管理缓冲区,使用了一个名为mem.Allocator的内存分配器。 fifo.zi…

鸿蒙轻内核Kconfig使用笔记

鸿蒙轻内核使用Kconfig进行图形化配置,本文专门讲解下鸿蒙轻内核LiteOS-M和LiteOS-A的图形化配置方法。本文中所涉及的源码,均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_a 、 https://gitee.com/openharmony/kernel_liteos_m 获取。本…