ORB_SLAM2中特征提取之图像金字塔尺度不变性理解

ORB_SLAM2 原理、论文解读、代码流程 分析了算法原理,和某些重要策略的用意 汇总了代码流程,文件间的调用关系 分析了部分代码,和某些流程的用意 阅读详情

本文参考:泡泡机器人提供的带注释的ORB_SLAM2源代码
转载本文请注明出处:
https://blog.youkuaiyun.com/RobotLife/article/details/87194017

在这里插入图片描述
在orb_slam2中,为了实现特征尺度不变性采用了图像金字塔,金字塔的缩放因子为1.2,。其思路就是对原始图形(第0层)依次进行1/1.2缩放比例进行降采样得到共计8张图片(包括原始图像),然后分别对得到的图像进行特征提取,并记录特征所在金字塔的第几层,这样得到一帧图像的特征点,如图1所示。
在这里插入图片描述
现在假设在第二层中有一特征点F,为了避免缩放带来特征点F在纵向的移动,为简化叙述,选择的特征点F位于图像中心,如图2所示。根据相机成像“物近像大,物远像小”的原理,如图2所示为相机成像的示意图。假设图1中摄像机原始图像即金字塔第0层对应图2中成像视野I0 ,则图1中图像金字塔第2层图像可以相应对应于图2中成像视野I2 。


其中特征点F所在patch的相应关系如图3所示。根据图2可以得到 结论1: d2 / d0 = 1.22 。


有了以上铺垫现在,来说说,尺度不变性,这里不直接说明,而是看看对于第m层上的一个特征点,其对应尺度不变时相机与特征点对应空间位置之间距离(简称物距)的范围。


假设第m层上有一特征点Fm,其空间位置与拍摄时相机中心的位置为dm ,显然这是原始图像缩放1/1.2m 倍后得到的特征点patch,考虑“物远像小”的成像特点,要使得该第m层特征点对应patch变为图像金字塔第0层中同样大小的patch,其相机与空间点的距离d=dm * 1.2m ,即尺度不变的最大物距dmax = dm*1.2m 。


要求尺度不变的最小物距则这样考虑:根据“物近像大”的成像特点,使得当前第m层的特征点移到第7层上则,真实相机成像图像得放大1.27-m倍,故对应最小物距dmin=dm *1.2m-7 。


orb_slam2中原始代码如下:
注意:上面变量与代码中变量的对应关系:
7 <–> nLevels-1
m <–> level
1.2m <–> levelScaleFactor
dmax <–> mfMaxDistance
dmin <–> mfMinDistance

void MapPoint::UpdateNormalAndDepth()
{
    map<KeyFrame*,size_t> observations;
    KeyFrame* pRefKF;
    cv::Mat Pos;
    {
        unique_lock<mutex> lock1(mMutexFeatures);
        unique_lock<mutex> lock2(mMutexPos);
        if(mbBad)
            return;

        observations=mObservations; // 获得观测到该3d点的所有关键帧
        pRefKF=mpRefKF;             // 观测到该点的参考关键帧
        Pos = mWorldPos.clone();    // 3d点在世界坐标系中的位置
    }

    if(observations.empty())
        return;

    cv::Mat normal = cv::Mat::zeros(3,1,CV_32F);
    int n=0;
    for(map<KeyFrame*,size_t>::iterator mit=observations.begin(), mend=observations.end(); mit!=mend; mit++)
    {
        KeyFrame* pKF = mit->first;
        cv::Mat Owi = pKF->GetCameraCenter();
        cv::Mat normali = mWorldPos - Owi;
        normal = normal + normali/cv::norm(normali); // 对所有关键帧对该点的观测方向归一化为单位向量进行求和
        n++;
    } 

    cv::Mat PC = Pos - pRefKF->GetCameraCenter(); // 参考关键帧相机指向3D点的向量(在世界坐标系下的表示)
    const float dist = cv::norm(PC); // 该点到参考关键帧相机的距离
    const int level = pRefKF->mvKeysUn[observations[pRefKF]].octave;
    const float levelScaleFactor =  pRefKF->mvScaleFactors[level];
    const int nLevels = pRefKF->mnScaleLevels; // 金字塔层数

    {
        unique_lock<mutex> lock3(mMutexPos);
        // 另见PredictScale函数前的注释
        mfMaxDistance = dist*levelScaleFactor;                           // 观测到该点的距离下限
        mfMinDistance = mfMaxDistance/pRefKF->mvScaleFactors[nLevels-1]; // 观测到该点的距离上限
        mNormalVector = normal/n;                                        // 获得平均的观测方向
    }
}
ORB-SLAM2特征提取原理解【李哈哈B站视频第三讲配套食用】 写在前边的话 这篇文章写于录制ORB-SLAM2特征提取详解视频期间 因为发现有必要说一说ORB的原理,毕竟很多小伙伴可能还不是很了解 另外考虑到别人的帖子直接拿过来讲不太好,我就简单整理以下别人的(很多大佬写的超级好!) 本篇文章大部分参照:【理解】ORB特征提取与ORBSLAM特征匹配简要剖析 这篇写的很详细,我只是添加了一些自己的理解认识进去,可以直接去看这篇嗷 不墨迹,上干货!???? ORB概述 ORB名词解释: ORB:Oriented FAST and Rotated BRIEF Orient 阅读详情

相关推荐

orb特征 稠密特征_ORB_SLAM2初探系列: ORB特征提取与匹配

ORB_SLAM2是一套基于单目、双目以及RGB-D的完整方案,可以实现地图重用、回环检测以及重新定位的功能.后端主要采用BA优化方法.从名字就能看出来,整个过程跟ORB有关,那下面就说说ORB特征提取与匹配过程.ORB在2011年由Ethan Rublee等人提出ORB:An Efficient Alternative to SIFT or SURF提出之后逐渐引起了人们的注意,ORB...

weixin_42412194的博客 511

特征提取之旋转不变性和尺度不变性的通俗理解

没有图片,直接看原文链接:https://blog.youkuaiyun.com/julialove102123/article/details/80822076 特征匹配(Feature Match)是计算机视觉中很多应用的基础,比如说图像配准,摄像机跟踪,三维重建,物体识别,人脸识别,所以花一些时间去深入理解这个概念是不为过的。本文希望通过一种通俗易懂的方式来阐述特征匹配这个过程,以及在过程中遇到的一些...

远方传来风铃 1万+

视觉SLAM十四讲——ch7

SLAM十四讲第二版ch7

weixin_58021155的博客 4705

图像金字塔的作用,ORBSLAM2金字塔理解

下面是ORBSLAM2提取特征点的效果0-7层金字塔,这里只展示了0-7层全部特征点,仅第0、2、5、7层特征点,可以看到有种离着桌子越来越远的感觉(近大远小)。原始图中红色的可乐易拉罐瓶上有很多特征点,在但在第7层的金字塔图像上整个瓶底就是一个特征点,这符合我们正常的视觉。但是这里的视野没有变的越来越大,这是因为金字塔图像是仅是经过下采样得到,而不是真实的相机后退。 思考问题1:图像金字塔的尺度不变性体现在哪里? 我们常常理解的尺度不变性是指一个东西我近看是它远看还...

a894943069的博客 2128

超详细解读ORB-SLAM3 单目初始化过程(上篇)

点击上方“3D视觉工坊”,选择“星标”干货第一时间送达学习ORB-SLAM3单目视觉SLAM中,发现有很多知识点需要展开和深入,同时又需要对系统有整体的认知,为了强化记忆,记录该系列笔记...

3D视觉工坊 1800

图像局部不变性特征与描述

局部特征是从图像局部区域中抽取的特征,可以提供一种具有统计意义的图像内容表述;全局特征(比如颜色直方图)可以描述图像的内容,具有很好的检索性能

特征不变性的个人理解相关

一、有关池化 链接:https://www.zhihu.com/question/23437871/answer/24696910 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 池化的作用是使特征减少、参数减少,实质是保持某种不变性(旋转、平移、伸缩等) 特征提取的误差主要来自两个方面: 邻域大小受限造成的估计值方差增大。 卷积层参数误差造成估计均值的偏移。 ...

scmales的博客 1202

别再只盯着CXL协议了,聊聊CXL.mem里那个能动态调优内存性能的‘QoS遥测’到底怎么用

本文深入解析CXL.mem协议中的QoS遥测功能,探讨如何通过DevLoad指标动态调优内存性能。文章详细介绍了QoS遥测的核心机制、多QoS类别设备的实战配置,以及AI训练、金融交易和视频处理场景中的优化案例,帮助数据中心实现高效内存资源管理。

weixin_33725722的博客 437

【计算机视觉】MOPS特征描述的邻域点为啥是偶数行/列的矩阵?

MOPS特征描述什么是MOPS为啥它关心的关键点邻域范围是偶数行?关键点的原始位置和待提取的特征仿射变换基于opencv-python具体实现 什么是MOPS MOPS是一种特征描述的手段,即为每个特征点提供一个描述符,此描述符将用于比较不同图像中的要素以查看它们是否匹配。优秀的描述不会随图像的变化而改变(尽可能具有尺度不变性、旋转不变性等特征不变性),并且对于每一点描述是唯一的。 MOPS描述(Multiscale Oriented PatcheS descriptor) 步骤: 1、 以检测点为中心取4

DDLAK的博客 3001

新手必看!无人机定高PID调参避坑指南:从理论到实战的完整流程

本文为无人机新手提供定高PID调参的完整指南,从传感器融合到抗风策略,详细解析多传感器融合、PID控制参数调试及环境干扰应对。通过实战案例和代码示例,帮助开发者快速掌握无人机定高技术,避免常见调参陷阱,提升飞行稳定性。

spark7igniter的博客 221

地质建模师必备:用Petrel快速生成浅地层TST/TVT厚度图的5个关键步骤

本文详细解析了地质建模师如何利用Petrel平台,将二维浅地层SEG-Y数据高效转化为真实地层厚度图(TST)和真实垂直厚度图(TVT)。文章系统梳理了从数据规范化导入、坐标系统一、地质界面解释到厚度计算与成图的5个关键实战步骤,并强调了误差控制与工程应用,为海上风电等工程地质评估提供了完整解决方案。

weixin_29204205的博客 518

计算机视觉大型攻略 —— 特征与匹配(2)特征的变与不变

上一篇文章写了Harris角点。这篇文章以Harris角点为基础,进一步分析角点特征。讨论特征不变性,或者说可重复性。 本文参考书籍:Computer Vision: Algorithms and Applications,Richard Szeliski 所谓的变与不变,指的是同一特征,如果图像的光强发生了变化,或者对其进行仿射变换,该特征是否还能保持稳定(不变)。只有稳定(不变)的特征...

plateros的专栏 2087

2.13寸电子墨水屏HINK-E0213+esp8266

很久以前买的一块电子墨水屏,运气很好,这个型号HINK-E0213资料很全,而且微雪官网也有相关电路资料等。

梦境虽美,却不长. 3004

ORB-SLAM学习总结

ORB-SLAM学习总结

雪中冰雨 1万+

电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异

电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异

Soly_kun的博客 734

【报错】raise pickle.UnpicklingError(_get_wo_message(str(e))) from None_pickle.UnpicklingError: Weigh

File "/opt/conda/envs/py_3.12/lib/python3.12/site-packages/torch/serialization.py", line 1470, in load raise pickle.UnpicklingError(_get_wo_message(str(e))) from None _pickle.UnpicklingError: Weights only load failed.

静谧、淡雅 785

ORB-SLAM2源码分析和学习笔记03:ORB特征提取(1)

ORB-SLAM2源码分析和学习笔记03:ORB特征提取

weixin_45590487的博客 1461

手把手教你安装 OpenClaw 小龙虾(MAC安装教程),一次成功不踩坑

本文详细介绍了在Mac上安装OpenClaw的完整流程。主要内容包括:1)准备工作(磁盘空间、网络环境、终端工具);2)安装Homebrew包管理器及常见问题解决;3)安装Node.js 22+版本(环境核心);4)Git安装与验证;5)OpenClaw项目克隆、依赖安装及运行配置;6)大模型配置方法(以MiniMax为例)。文章提供了详细的命令行操作步骤和常见错误解决方案,特别强调了网络环境要求和Apple Silicon芯片的原生支持注意事项。最后展示了验证配置成功的方法和资源获取渠道。

Chengbei11的博客 6341

ORB-SLAM2跟踪之提取ORB特征

ORB-SLAM2跟踪之提取ORB特征ORB-SLAM2跟踪线程对相机输入的每一帧图像进行跟踪处理,如下图所示,主要包括4步,提取ORB特征、从上一帧或者重定位来估计初始位姿、局部地图跟踪和关键帧处理。以下结合相关理论知识,阅读ORB-SLAM2源代码,从而理解ORB-SLAM2算法中ORB特征提取过程。

u011380574的专栏 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【理解】ORB特征提取与ORBSLAM特征匹配简要剖析

ORB特征提取 优势: ORB:Orinted FAST+Rotated BRIEF 顾名思义:ORB特征是基于FAST特征的一个改进算法,它改进了FAST检测子不具有方向性的问题,在FAST特征提取的基础上加入了特征点的主方向。从而为后续的BRIEF描述子增添旋转不变的特征,同时构建图像金字塔实现尺度不变性。这样一来,图像帧与帧之间的特征匹配就变得容易许多,减少了特征点丢失,不匹配或误匹配的现象。 ORB特征提取采用速度极快的二进制描述子BRIEF,使得图像特征提取的速度大大提升。由原论文的测试数据可知(

Yann的博客 5043

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ORB-SLAM2之ORB特征提取

它的关键点称为“Oriented FAST”,是一种改进的 FAST 角点,什么是 FAST 角点我们将在下文介绍。.BRIEF算法的核心思想是在关键点P的周围以一定模式选取N个点对,把这N个点对的比较结果组合起来作为描述子。为了保持踩点固定,工程上采用特殊设计的固定的pattern来做。通过计算两个描述子的余弦来计算两者的相似性。FAST的思想是,如果一个像素与它邻域的像素差别较大(过亮或过暗), 那它更可能是角点。Harris是一种根据像素点的一阶导数构建结构矩阵判断该点性质的方法。

weixin_43263382的博客 696

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Jetson Nano学习 - ORB-SLAM2理论研读(二):ORB特征提取

本文介绍了SLAM系统中的ORB特征提取方法,重点分析了FAST关键点和BRIEF描述子的工作原理。

weixin_41957687的博客 1120

ORBSLAM2--特征提取

ORBSLAM2--特征提取特征提取(ORBextractor.h and ORBextractor.cpp)ORBextractoroperator()ComputePyramidComputeKeyPointsOctTreecomputeOrientationIC_Angle高斯模糊computeDescriptors最后操作结语 说白了特征提取也就是对图像进行一定的操作,也就是对像素点进行一...

weixin_43205582的博客 3866

深入解析ORB-SLAM2中的ORB特征点提取:定义、用途、工作过程与原理

ORB(Oriented FAST and Rotated BRIEF)是一种结合了FAST关键点检测器和BRIEF描述符的特征提取算法。ORB通过对FAST和BRIEF的改进,克服了它们各自的局限性,提供了一种高效、旋转不变且具有尺度不变性的特征点检测与描述方法。ORB特征点提取在ORB-SLAM2中扮演了至关重要的角色,负责从输入图像中高效、鲁棒地提取有意义的特征点及其描述符。

m0_73640344的博客 1354

ORB-SLAM3源代码精读:从特征提取到回环检测的核心算法详解

ORB-SLAM3是一款功能强大的开源SLAM(同步定位与地图构建)库,支持视觉、视觉-惯性以及多地图SLAM,适用于单目、双目和RGB-D相机,并兼容针孔和鱼眼镜头模型。作为实时SLAM领域的佼佼者,ORB-SLAM3在保持鲁棒性的同时实现了高精度定位,其核心算法涵盖特征提取、视觉里程计、回环检测等关键技术模块。本文将深入剖析ORB-SLAM3的源代码架构,揭秘从特征点提取到回环检测的完整技术流

gitblog_00709的博客 625
上一篇: C++在成员函数中创建thread多线程, 以成员函数作为回调函数时的范例
下一篇: Linux C++多线程编程学习笔记
RobotLife
博客等级 码龄10年 39粉丝 40原创
评论 21
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值