当前位置: 首页 > news >正文

【SLAM】 前端-视觉里程计之特征点

前端-视觉里程计之特征点

参考资料:
以不变应万变:前端-视觉里程计之特征点
视觉SLAM——特征点法

task05 本次了解了特征点是由关键子和描述子组成,并且对比了SIFT、SURF等七种获取特征点的方法,同时对比了SIFT、SURF和ORB方法之间的优劣,如果需要尺度和旋转不变性,SIFT和SURF可能更合适,但如果需要实时性和计算效率,ORB可能是更好的选择。

1.特征点

SLAM(Simultaneous Localization and Mapping)中的特征点是指在地图构建和定位过程中,用于描述环境中显著性特征的数据点或区域。这些特征点通常具有独特的几何或视觉属性,使它们容易在不同帧之间进行识别和匹配,从而用于机器或传感器设备的定位和地图构建。

1.1特征点组成

特征点由关键点和描述子组成。

关键点:特征点在图像中的位置、大小、方向等。
描述子:特征点周围的图像信息。
当两个特征点的描述子在向量空间上的距离相近,就可以认为这两个是相同的特征点。

1.2特征点常见类型

SLAM中的特征点可以是各种类型,取决于传感器类型和SLAM系统的设计。以下是一些常见的特征点类型:

  • 角点(Corners):角点是图像中具有明显角度变化的像素点,通常是两个边缘相交的地方。由于它们在不同视角下保持几何特性,角点是常用的特征点类型。

  • 边缘(Edges):边缘是图像中明显的亮度或颜色变化的线段,通常位于物体之间的边界。边缘也可以用于定位和地图构建。

  • 描述符(Descriptors):特征点通常伴随着描述符,这些描述符是特征点周围像素值的数值或二进制表示。描述符用于匹配相同特征点在不同图像帧之间的对应关系。

  • ORB特征点(Oriented FAST and Rotated BRIEF):ORB是一种常用的特征点检测和描述符生成算法,它结合了FAST角点检测和BRIEF描述符,具有计算速度快和鲁棒性高的特点。

  • SIFT特征点(Scale-Invariant Feature Transform):SIFT是一种具有尺度不变性的特征点检测和描述符生成算法,通常用于在不同尺度和旋转条件下匹配特征点。

特征点的选择和提取是SLAM系统中的关键步骤,因为它们直接影响定位的准确性和地图的质量。SLAM系统会不断追踪这些特征点,并根据它们的运动来估计机器的位姿,并使用它们来构建环境地图。这些特征点的稳定性、鲁棒性和性能对SLAM的成功运行至关重要。

1.3特征点的特点

前端直接通过图片矩阵方面处理,获取特征点,可以估计目标的运动轨迹。
在此,希望特征点有一下的特点

  • 可重复性(在不同的图像中可以找到相同的特征)
  • 可区别性(不同的特征点有不同的表达)
  • 高效性(在一张图片中,特征点的数量远远小于整个图片的像素点)
  • 本地性(每一个特征点仅与自己附近的一小片区域有关联)

2.常见特征点的获取方法

详细介绍见以不变应万变:前端-视觉里程计之特征点

2.1 SIFT

2.2 SURF

2.3 KAZE

2.4 Harris角点

2.5 Shi-Tomasi角点

2.6 Fast

2.7 ORB

3.思考

3.1请说说SIFT或SURF的原理,并对比它们与ORB之间的优劣。

SIFT(Scale-Invariant Feature Transform)、SURF(Speeded-Up Robust Features)和ORB(Oriented FAST and Rotated BRIEF)都是用于计算机视觉中的特征点检测和描述符生成的算法。以下是它们的原理以及它们之间的一些优劣比较:

SIFT(Scale-Invariant Feature Transform)

  • 原理:SIFT基于图像中的局部特征点,具有尺度不变性和旋转不变性。它通过以下步骤生成特征点:

    1. 尺度空间极值检测:在不同尺度下寻找极值点。
    2. 关键点定位:通过局部极值点周围的梯度信息来定位关键点。
    3. 方向分配:为每个关键点分配主方向,提供旋转不变性。
    4. 描述符生成:生成与关键点周围图像区域相关的描述符。
  • 优势

    • 尺度和旋转不变性:SIFT在不同尺度和旋转条件下仍能匹配特征点。
    • 鲁棒性:对光照变化和一定程度的遮挡具有一定鲁棒性。
  • 劣势

    • 计算量大:SIFT的计算成本相对较高,不适合实时应用。
    • 受专利保护:SIFT算法曾受到专利保护,使用时需要考虑专利问题。

SURF(Speeded-Up Robust Features)

  • 原理:SURF是一种计算速度较快的特征点检测和描述符生成算法,它基于积分图像和箱子滤波器。其步骤包括:

    1. 快速积分图像计算:通过积分图像加速滤波器响应的计算。
    2. 关键点检测:检测极值点作为关键点。
    3. 描述符生成:生成描述符以描述关键点周围的图像区域。
  • 优势

    • 计算速度快:SURF相对于SIFT具有更快的计算速度,适合实时应用。
    • 尺度不变性:SURF具有尺度不变性。
  • 劣势

    • 对旋转不变性较差:相对于SIFT,SURF的旋转不变性较差。
    • 对强照明变化和视角变化较敏感。

ORB(Oriented FAST and Rotated BRIEF)

  • 原理:ORB是一种结合了FAST角点检测和BRIEF二进制描述符的算法,具有如下步骤:

    1. 使用FAST算法检测关键点。
    2. 为关键点分配方向以提供旋转不变性。
    3. 使用BRIEF生成二进制描述符。
  • 优势

    • 计算速度快:ORB相对于SIFT在计算速度上更快。
    • 适用于实时应用:ORB适用于实时应用,如移动机器人和自动驾驶。
    • 开源:ORB是一个开源算法,没有专利限制。
  • 劣势

    • 对尺度变化和视角变化较敏感:相对于SIFT和SURF,ORB的尺度和旋转不变性较差。
    • 描述符维度较低:相对于SIFT和SURF,ORB生成的描述符维度较低,可能不如它们在复杂场景下精确。

选择适当的特征点检测和描述符生成算法取决于应用场景、计算资源和性能需求。如果需要尺度和旋转不变性,SIFT和SURF可能更合适,但如果需要实时性和计算效率,ORB可能是更好的选择。

5.2我们发现,OpenCV提供的ORB特征点在图像中分布不够均匀。你是否能够找到或提出让特征点分布更均匀的方法?

在使用ORB特征点检测时,特征点的分布可能会不够均匀,导致在某些区域出现特征点密集,而在其他区域特征点稀疏。这可能会影响SLAM或计算机视觉应用的性能,因为不均匀分布的特征点可能会导致匹配不准确或者无法覆盖整个场景。以下是一些方法,可以改善特征点的均匀分布:

  1. 自适应阈值:调整ORB算法的阈值参数,使其在不同区域产生不同数量的特征点。通常,可以根据图像区域的梯度或纹理信息来自适应地调整阈值,以确保特征点在不同区域均匀分布。

  2. 多尺度处理:在图像的不同尺度上运行ORB算法,以便在不同尺度下检测特征点。这有助于覆盖不同大小和距离的特征。

  3. 非极大值抑制(Non-Maximum Suppression):在ORB算法中,通常会使用FAST角点检测器,可以通过调整FAST检测器的非极大值抑制参数,以控制在一个区域内保留的特征点数量。

  4. 区域采样:将图像分成不同的区域,然后在每个区域内运行ORB算法,以确保每个区域都有足够的特征点。这可以通过图像分割或网格采样来实现。

  5. 均匀化权重:在ORB特征点检测之后,可以对特征点的分布进行后处理。通过对特征点分布进行重新加权,使其在图像中更均匀分布。

  6. 自定义特征点选择:根据应用的需求,可以自己实现特征点的选择和过滤算法,以确保它们在图像中均匀分布,并且适合特定任务。

需要注意的是,改善特征点的均匀分布可能需要一些实验和参数调整,以适应不同的图像和应用场景。最佳方法取决于您的具体需求和数据集。

相关文章:

【SLAM】 前端-视觉里程计之特征点

前端-视觉里程计之特征点 参考资料: 以不变应万变:前端-视觉里程计之特征点 视觉SLAM——特征点法 task05 本次了解了特征点是由关键子和描述子组成,并且对比了SIFT、SURF等七种获取特征点的方法,同时对比了SIFT、SURF和ORB方法…...

Android笔记(二十九):利用python自动生成多语言

背景 项目需要支持十几种多语言,而且每个版本的新功能ui都有很多地方需要多语言,如果手动添加非常耗时,于是设计了一个python脚本,通过excel表格转化多语言到项目values/strings文件内 步骤 android工程项目结构 脚本位于langu…...

【C++STL基础入门】list的运算符重载和关于list的算法

文章目录 前言一、list运算符1.1 逻辑运算符1.2 赋值运算符 二、list相关算法2.1 查找函数总结 前言 C标准模板库(STL)是一组强大而灵活的工具,用于处理数据结构和算法。其中,std::list是STL中的一个重要容器,它实现了…...

查找内轮廓(孔洞)

一 说明 findContours( InputOutputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode,int method, Point offset=Point());参数列表中有个数据结构参数:hierarchy(译层次结构),hierarchy是一个向量,其元素个数与查找到的轮廓总数相同,每一个…...

Git(6)——GitHub

目录 一、简介 二、概要 三、注册 ​四、创建仓库 五、推送本地代码 六、拉取远端代码 一、简介 在Git(5)中,我们已经对Git分支的概念和用法有了一定了解,对于在本地进行代码版本管理,其实当前所学的东西基本已经…...

【RocketMQ专题】快速实战及集群架构原理详解

目录 课程内容一、MQ简介基本介绍*作用(解决什么问题) 二、RocketMQ产品特点2.1 RocketMQ介绍2.2 RocketMQ特点2.3 RocketMQ的运行架构 三、RocketMQ快速实战3.1 快速搭建RocketMQ服务3.2 快速实现消息收发3.3 搭建Maven客户端项目3.4 搭建RocketMQ可视化…...

[设计模式] 浅谈SOLID设计原则

目录 单一职责原则开闭原则里氏替换原则接口隔离原则依赖倒转原则 SOLID是一个缩写词,代表以下五种设计原则 单一职责原则 Single Responsibility Principle, SRP开闭原则 Open-Closed Principle, OCP里氏替换原则 Liskov Substitution Principle, LSP接口隔离原则 …...

基于Java+SpringBoot+Vue的旧物置换网站设计和实现

基于JavaSpringBootVue的旧物置换网站设计和实现 源码传送入口前言主要技术系统设计功能截图数据库设计代码论文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 摘 要 随着时代在一步一步在进步,旧物也成人们的烦恼,…...

Java基本语法2

目录 Java基本语法 第一个Java程序 基本语法 Java标识符 Java修饰符 Java变量 Java数组 Java枚举 Java关键字 Java注释 Java 空行 继承 接口 Java基本语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介…...

【数据结构】树的存储结构;树的遍历;哈夫曼树;并查集

欢~迎~光~临~^_^ 目录 1、树的存储结构 1.1双亲表示法 1.2孩子表示法 1.3孩子兄弟表示法 2、树与二叉树的转换 3、树和森林的遍历 3.1树的遍历 3.1.1先根遍历 3.1.2后根遍历 3.2森林的遍历 3.2.1先序遍历森林 3.2.2中序遍历森林 4、树与二叉树的应用 4.1哈夫曼树…...

CSS选择器练习小游戏

请结合CSS选择器练习小游戏进行阅读(网页的动态效果是没有办法通过静态图片展示的) 网址:请点击 有些题有多种答案,本文就不一一列出了 第一题 答案:plate第二题 答案:bento第三题 答案:#fa…...

Python运算符、函数与模块和程序控制结构

给我家憨憨写的python教程 ——雁丘 Python运算符、函数与模块和程序控制结构 关于本专栏一 运算符1.1 位运算符1.1.1 按位取反1.1.2 按位与1.1.3 按位或1.1.4 按位异或1.1.5 左移位 1.2 关系运算符1.3 运算顺序1.4 运算方向 二 函数与模块2.1 内建函数2.2 库函数2.2.1 标准库…...

微服务保护-Sentinel

初识Sentinel 雪崩问题及解决方案 雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时&a…...

Doris 导出表结构或数据

MYSQLDUMP 导出表结构或数据 Doris 在0.15 之后的版本已经支持通过mysqldump 工具导出数据或者表结构 使用示例​ 导出​ 导出 test 数据库中的 table1 表:mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables table1导出 test 数…...

SELECT * from t_user where user_id = xxx,可以从那几个点去优化这句sql

优化SQL查询可以从以下几个方面入手: 1. 索引优化:通过为查询涉及的列添加合适的索引,可以提高查询的效率。在该SQL语句中, user_id 列被用作查询条件,可以为 user_id 列创建一个索引。 2. 避免使用 SELECT *&#xf…...

解决报错 java.lang.IllegalArgumentException: Cannot format given Object as a Date

报错原因:我们在SimpleDateFormat.format转化时间格式的时候,传入的值无法转换成date而报的错 我的代码大概就是下面这种 LocalDate now LocalDate.now();String format1 new SimpleDateFormat("yyyy-MM-dd").format(now); 发现SimpleDateF…...

【Git】03-GitHub

文章目录 1. GitHub核心功能2. GitHub搜索项目3. GitHub搭建个人博客4. 团队项目创建5. git工作流选择5.1 需要考虑的因素5.2 主干开发5.2 Git Flow5.3 GitHub Flow5.4 GitLab Flow(带生产分支)5.4 GitLab Flow(带环境分支)5.4 GitLab Flow(带发布分支) 6. 分支集成策略7. 启用…...

Java手写最短路径算法和案例拓展

Java手写最短路径算法和案例拓展 1. 算法手写的必要性 在实际开发中,经常需要处理图的最短路径问题。虽然Java提供了一些图算法库,但手写最短路径算法的必要性体现在以下几个方面: 理解算法原理:手写算法可以帮助我们深入理解最…...

深度学习实战51-基于Stable Diffusion模型的图像生成原理详解与项目实战

大家好,我是微学AI,今天给大家介绍一下深度学习实战51-基于Stable Diffusion模型的图像生成原理详解与项目实战。大家知道现在各个平台发的漂亮小姐姐,漂亮的图片是怎么生成的吗?这些生成的底层原理就是用到了Stable Diffusion模型。Stable Diffusion是一种基于深度学习的图…...

基于matlab实现的多普勒脉冲雷达回波仿真

完整程序: clear all;clc;close all; fc3e9; %载波频率 PRF2000; Br5e6; %带宽 fs10*Br; %采样频率 Tp5e-6; %脉宽 KrBr/Tp; %频率变化率 c3e8; %光速 lamda…...

Linux服务器中安装Anaconda+Tensorflow+Keras

Anaconda安装 从https://repo.anaconda.com/archive/查看你需要下载的Anaconda版本,例如2020.11的x86_64(uname -a 查看linux框架)版下载Anaconda到linux服务器, wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Li…...

ubuntu+.net6+docker 应用部署教程

先期工作 1、本地首先安装 Docker Desktop 2、本地装linux in windows 3、生成镜像 后期工作 1、云服务器部署 生成镜像方法 1、生成Dockerfile配置文件 开发工具visual studio 2022 如果项目已经存在,可以选中项目,右键点击->选择添加Docker…...

Spring常见面试题总结

什么是Spring Spring是一个轻量级Java开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题,以提高开发效率。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序…...

Git全套命令使用

日升时奋斗,日落时自省 目录 1、Git安装 1.1、创建git本地仓库 1.2、配置Git 1.3、认识Git内部区分 2、Git应用操作 2.1、添加文件 2.2、查看日志 2.3、查看修改信息 2.4、查看添加信息 3、版本回退 4、撤销修改 4.1、工作区撤销 4.2、已经add&#xf…...

【陕西理工大学-数学软件实训】数学实验报告(8)(数值微积分与方程数值求解)

目录 一、实验目的 二、实验要求 三、实验内容与结果 四、实验心得 一、实验目的 1. 掌握求数值导数和数值积分的方法。 2. 掌握代数方程数值求解的方法。 3. 掌握常微分方程数值求解的方法。 二、实验要求 1. 根据实验内容,编写相应的MATLAB程序&#xff0c…...

Vue3为什么推荐使用ref而不是reactive

为什么推荐使用ref而不是reactive reactive本身具有很大局限性导致使用过程需要额外注意,如果忽视这些问题将对开发造成不小的麻烦;ref更像是vue2时代option api的data的替代,可以存放任何数据类型,而reactive声明的数据类型只能是对象; 先抛出结论,再详细说原因:非必要不用rea…...

JavaScript函数this指向

一、this的指向规则 1.this到底指向什么呢? 我们先来看一个让人困惑的问题: 定义一个函数,我们采用三种不同的方式对它进行调用,它产生了三种不同的结果 // 定义函数 function foo(name) {console.log("foo函数:", …...

Java的序列化

写在前面 本文看下序列化和反序列化相关的内容。 源码 。 1:为什么,什么是序列化和反序列化 Java对象是在jvm的堆中的,而堆其实就是一块内存,如果jvm重启数据将会丢失,当我们希望jvm重启也不要丢失某些对象&#xff…...

计算机二级python简单应用题刷题笔记(一)

计算机二级python简单应用题刷题笔记(一) 1、词频统计:键盘输入一组我国高校所对应的学校类型,以空格分隔,共一行。2、找最大值、最小值、平均分:键盘输入小明学习的课程名称及考分等信息,信息间…...

Spring注解家族介绍: @RequestMapping

前言: 今天我们来介绍RequestMapping这个注解,这个注解的内容相对来讲比较少,篇幅会比较短。 目录 前言: RequestMapping 应用场景: 总结: RequestMapping RequestMapping 是一个用于映射 HTTP 请求…...

有没有网站做杠杆股票的/自己做网站如何赚钱

知识人网访问学者老师为大家分享美国访问学者J1签证申请材料准备,供大家参考: 一、 有效护照:如果您的护照将在距您预计抵美日期的六个月内过期、或已损坏、或护照上已无空白的签证签发页, 请在前来面谈之前先申请一本新护照。 二、DS-160表…...

网站构建培训/seo关键词库

前段时间,朋友让我推荐一款运动耳机,说是给孩子跑步的时候使用。对了,他还提出了耳机最好能脱离手机听歌的要求。其实这也不是什么难事啊,作为一个运动爱好者,我也是比较喜欢一边听歌一边跑步,其中也用不少…...

咔咔做受视频网站/全网热度指数

Python的安装登录官网:www.python.org,选择版本3.6.4进行下载(下文中皆以MacOS为例)并安装。 PyCharm的安装登录网址:www.jetbrains.com,选择专业版进行下载并安装。 激活PyCharm时,在License Server中填入&#xff1a…...

上海官网seo/优化公司

一、基于PaddlePaddle 新工具 API 的【猴痘识别】 还记否,曾经开始学习神经网络,需要手动遍历文件夹,手动生成数据列表?还记否,曾经划分数据集,不断for循环抽取数据? 多看看飞桨 API&#xff0…...

wordpress zipposter/指数基金什么意思

我们首先来测试随机写的IOPS,可以看到随机写的IOPS可以达到5082,顺序写的IOPS可以达到5087: $ sudo fio -filename/data/testfile -direct1 -iodepth 1 -thread -rwrandwrite -ioenginelibaio -bs16k -size10G -numjobs20 -runtime60 -group_…...

上海网站建设_永灿品牌建站/关键词歌曲歌词

今天,从全球视角转到中国,越来越多的用户也正在面临数据从本地向云端数据库(DBaaS)迁移,数据库迁移到云端 DBaaS,可以为用户带来两个方面的主要价值:1、降低成本;2、提高数据库高可用…...