ORB-SLAM2-学习记录1-ORB特征提取

ORB-SLAM2中生成金字塔提取FAST角点和计算BRIEF描述子 //这个是类ORBextractor的带参构造函数,并且使用初始化列表对该类中的这5个变量赋值 ORBextractor::ORBextractor(int _nfeatures, float _scaleFactor, int _nlevels, int _iniThFAST, int _minThFAST): nfeatures(_nfeatures), scale... 阅读详情

ORB-SLAM2-学习记录1-ORB特征提取

代码注释参考
代码讲解参考
主要针对ORB-SLAM2中视觉里程计部分学习记录

函数运行顺序:

 1. ORBextractor 
 2. operator()
 3. ComputePyramid
 4. ComputeKeyPointsOctTree
 5. DistributeOctTree
 6. DivideNode
 7. computeOrientation
 8. computeDescriptors

处理单张图像效果,只做特征提取部分:
在这里插入图片描述

程序调用:

    ORB_SLAM2::ORBextractor* mpORBextractor;
    mpORBextractor = new ORB_SLAM2::ORBextractor(nFeatures,scaleFactor,nLevels,iniThFAST,minThFAST);
    std::vector<cv::KeyPoint> mvKeys;
    cv::Mat mDescriptors;
    (*mpORBextractor)(mImGray,cv::Mat(),mvKeys,mDescriptors);
1.ORBextractor

特征点提取器的构造函数
难点:

        LOG_INFO("This is for orientation");
        //This is for orientation
        //下面的内容是和特征点的旋转计算有关的
        // pre-compute the end of a row in a circular patch
        //预先计算圆形patch中行的结束位置
        //+1中的1表示那个圆的中间行
        umax.resize(HALF_PATCH_SIZE + 1);

        //cvFloor返回不大于参数的最大整数值,cvCeil返回不小于参数的最小整数值,cvRound则是四舍五入
        int v,		//循环辅助变量
        v0,		//辅助变量
        vmax = cvFloor(HALF_PATCH_SIZE * sqrt(2.f) / 2 + 1);	//计算圆的最大行号,+1应该是把中间行也给考虑进去了
        //NOTICE 注意这里的最大行号指的是计算的时候的最大行号,此行的和圆的角点在45°圆心角的一边上,之所以这样选择
        //是因为圆周上的对称特性

        //这里的二分之根2就是对应那个45°圆心角

        int vmin = cvCeil(HALF_PATCH_SIZE * sqrt(2.f) / 2);
        //半径的平方
        const double hp2 = HALF_PATCH_SIZE*HALF_PATCH_SIZE;

		//*通过对称计算umax,0<=v<=vmax*//
        //利用圆的方程计算每行像素的u坐标边界(max)
        for (v = 0; v <= vmax; ++v)
            umax[v] = cvRound(sqrt(hp2 - v * v));		//结果都是大于0的结果,表示x坐标在这一行的边界

        // Make sure we are symmetric
        //这里其实是使用了对称的方式计算上四分之一的圆周上的umax,目的也是为了保持严格的对称(如果按照常规的想法做,由于cvRound就会很容易出现不对称的情况,
        //同时这些随机采样的特征点集也不能够满足旋转之后的采样不变性了)
		
		//*通过对称计算umax,vmin<=v<=HALF_PATCH_SIZE*//
        for (v = HALF_PATCH_SIZE, v0 = 0; v >= vmin; --v)
        {
            while (umax[v0] == umax[v0 + 1])
                ++v0;
            umax[v] = v0;
            ++v0;
        }
2.operator()

用仿函数(重载括号运算符)方法来计算图像特征点,这个函数是该部分的流程化函数,负责整个特征提取计算流程的调用

3.ComputePyramid

构建图像金字塔
将图像进行“补边”,EDGE_THRESHOLD区域外的图像不进行FAST角点检测

//把源图像拷贝到目的图像的中央,四面填充指定的像素。图片如果已经拷贝到中间,只填充边界
//这样做是为了能够正确提取边界的FAST角点
//EDGE_THRESHOLD指的这个边界的宽度,由于这个边界之外的像素不是原图像素而是算法生成出来的,所以不能够在EDGE_THRESHOLD之外提取特征点
copyMakeBorder(mvImagePyramid[level],//源图像
				temp,//目标图像(此时其实就已经有大了一圈的尺寸了)
                EDGE_THRESHOLD, EDGE_THRESHOLD, 			//top & bottom 需要扩展的border大小
                EDGE_THRESHOLD, EDGE_THRESHOLD,			//left & right 需要扩展的border大小
                BORDER_REFLECT_101+BORDER_ISOLATED);     //扩充方式,opencv给出的解释:

                if(level == 1)
                {
                    cv::imshow("Result.jpg", temp);
                }

扩充像素后图像
在这里插入图片描述

else
{
     //对于第0层未缩放图像,直接将图像深拷贝到temp的中间,并且对其周围进行边界扩展。此时temp就是对原图扩展后的图像
     copyMakeBorder(image,//这里是原图像
                    temp, EDGE_THRESHOLD, EDGE_THRESHOLD, EDGE_THRESHOLD, EDGE_THRESHOLD,
                    BORDER_REFLECT_101);
     cv::imshow("Result.jpg", temp);//只是对原图拓展
}

第0层图像,拓展后
第0层图像

4.ComputeKeyPointsOctTree

以八叉树分配特征点的方式,计算图像金字塔中的特征点,分布均匀

4.ComputeKeyPointsOld

使用传统的方法提取并平均分配图像的特征点,虽然分布不均匀,但是颜色变化明显的地方较多
效果
在这里插入图片描述

5.DistributeOctTree

对于某一图层,分配其特征点,通过八叉树的方式

6.DivideNode

在八叉树分配特征点的过程中,实现一个节点分裂为4个节点的操作

7.computeOrientation

这个函数用于计算特征点的方向,这里是返回角度作为方向

8.computeDescriptors

计算某层金字塔图像上特征点的描述子

ORB-SLAM2特征提取原理解【李哈哈B站视频第三讲配套食用】 写在前边的话 这篇文章写于录制ORB-SLAM2特征提取详解视频期间 因为发现有必要说一说ORB的原理,毕竟很多小伙伴可能还不是很了解 另外考虑到别人的帖子直接拿过来讲不太好,我就简单整理以下别人的(很多大佬写的超级好!) 本篇文章大部分参照:【理解】ORB特征提取与ORBSLAM特征匹配简要剖析 这篇写的很详细,我只是添加了一些自己的理解认识进去,可以直接去看这篇嗷 不墨迹,上干货!???? ORB概述 ORB名词解释: ORB:Oriented FAST and Rotated BRIEF Orient 阅读详情

相关推荐

ORB-SLAM2:Tracking线程学习随笔【李哈哈:看看总有收获篇】

前言 继之前学习特征提取之后,终于要开始SLAM正经线程的学习了 因为感觉做不完毕设了,所以后期会看的快一些,几篇文章将以随笔形式展开,主要记录学习过程中的一些心得体会 随笔 描述子是个矩阵是怎么回事 描述子是在该函数中提取的: /** * @brief 用仿函数(重载括号运算符)方法来计算图像特征点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * @param[in] _image

qq_41883714的博客 717

ORB-SLAM2 从理论到代码实现(三):ORB 特征提取和匹配理论和代码详解

摘要:ORB特征点由Oriented FAST角点和BRIEF描述子组成,具有计算速度快(SIFT的100倍,SURF的10倍)的特点。FAST角点检测通过比较像素亮度快速定位特征点,ORB通过构建高斯金字塔实现尺度不变性,并利用灰度质心法确定特征点方向。BRIEF描述子通过二进制编码描述特征点,匹配时采用汉明距离。ORB-SLAM2中通过ORBextractor类实现特征提取,包括图像金字塔构建、FAST角点检测、非极大值抑制、四叉树均匀分布特征点等步骤,最终通过BRIEF描述子和汉明距离完成特征匹配。

人无远虑,必有近忧 4144

SLAM ORB-SLAM2(10)轨迹跟踪过程

轨迹跟踪的主要目的是估计相机的位姿。先处理每一帧图像,提取ORB特征点,如果尚未初始化地图,则先进行初始化。再根据地图信息和当前机器人运动状态来估计相机位姿或者进行重定位,然后在局部地图中完成轨迹跟踪, 并根据一定的规则生成新的关键帧。

氢键H-H 1万+

ORBSLAM2源码学习(1)ORBextractor

      关于ORBSLAM2的学习已经有一段时间了,开始是照着网上各路大神的博客,对着代码梳理了下流程,算是对这个代码的工作过程有了个了解,接下来详细阅读源码,学习各部分的具体实现。这部分是特征点的提取和描述子的计算。        ORBSLAM使用的是ORB特征,即Oriented FAST and Rotated BRIEF,是对FAST特征点与BREIF特征描述子的一种结合与改进。关...

Fearless的博客 5182

SLAM ORB-SLAM2(7)轨迹跟踪器

介绍轨迹跟踪器的成员变量、成员函数、构造函数和一些函数

氢键H-H 1万+

《MySQL高级篇》十四、多版本并发控制

《MySQL高级篇》十四、多版本并发控制

LXYDSF的博客 3992

ORB-SLAM2提取特征点

构造函数ORBextractor() BRIEF:特征点提取器的构造函数 参数说明 int nfeatures 整个图像金字塔中,要提取的特征点数目 double scaleFactor 图像金字塔层与层之间的缩放因子 int nlevels 图像金字塔的层数 int iniThFAST 初始的FAST响应值阈值 int minThFAST 最小的FAST响应值阈值 vector<int> mnFeaturesPerLevel 分配到每层图像中,要提取的特

zantax233的博客 704

DC-DC电源PCB布局实战:从EMI优化到热管理

本文深入探讨了DC-DC电源PCB布局的核心实战技巧。文章从分析电流环路入手,强调通过优化“黄金三角”布局以最小化环路面积,从而有效抑制EMI并提升效率。详细阐述了功率器件摆放、地线分割、敏感信号布线、电感下方铺铜策略以及热管理设计等关键步骤,为工程师提供了一套从理论到实践的完整布局指南。

z5a6b的博客 722

【SLAM】ORB-SLAM2的地图保存

“女生不适合弄硬件”,这句话真的深有体会,今天为了让Pioneer 3-AT给Kinect供电,真的是路途坎坷.首先机器人尘封很久,螺丝都是拧死的,LZ拿着螺丝头去拧,发现螺丝纹丝不动,好吧!需要师兄的协助.找到供电板的12V电源接口,因为操作问题…导致保险丝熔断,LZ的心情啊…默默的买了对应的保险丝,心里想着还是乖乖写代码吧… 回归正题,如文章题目所示,如何保存ORB-SLAM的地图? 如何...

Felaim的博客 1万+

GitHub 镜像站点

国内访问 GitHub 有时会遇到速度慢或不稳定的情况,这时 GitHub 镜像站点就能帮上忙。它们通过代理或缓存机制,让你更顺畅地浏览仓库、下载资源甚至克隆代码。希望这些信息能帮你更顺畅地访问 GitHub 资源。下面表格汇总了一些常见的镜像站及其主要用途。

BillKu的博客 6万+

C#里用HttpListener实现WEB API接口服务端

本文介绍了一个基于WinForm的HTTP服务实现方案。该方案使用HttpListener类创建了一个支持JSON POST请求处理的轻量级Web服务器,主要特点包括:1) 纯线程方式实现请求监听和处理;2) 提供标准化的JSON响应格式;3) 支持自定义请求处理逻辑;4) 包含完整的日志记录功能。代码示例展示了如何初始化服务、处理不同类型的请求(包括JSON POST),并提供了线程安全的UI更新机制。该实现适用于需要简单HTTP接口的Windows桌面应用程序,可作为程序间通信的基础设施。

大坡3D软件开发 228

ORB-SLAM3代码详解(一)----代码整体框架

原理五花八门,不如花点时间搞懂代码!(建议看完《视觉SLAM十四讲》再来看我的这个)首先介绍一下整体框架:这是 ORB-SLAM3 系统的主要组件框架图。图中展示了 ORB-SLAM3 的各个关键模块及其交互关系。这张图展示了ORB-SLAM3系统如何通过这些模块实现SLAM功能,包括跟踪、局部建图、回环检测与地图合并,以及全局优化。

qq_50719698的博客 7932

【即插即用模块】Transformer篇 | CVPR 2025 | SADA:多尺度+可变形采样,完美替换自注意力实现涨点!

文章摘要 本文提出了一种尺度自适应可变形注意力模块(SADA),用于处理图像修复中的结构化伪影问题。SADA通过多尺度多头机制捕获远程依赖关系,并引入可变形采样偏移来有效处理非均匀空间分布的模式。该模块适用于底层视觉任务,可替代ViT自注意力,实验证明能显著提升性能。代码已开源,支持即插即用集成。 核心特点: 多尺度头适应不同大小的重复模式 可变形偏移优化非均匀分布采样 轻量级设计,易于集成到现有架构 适用场景:图像去噪、超分辨率等底层视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1431

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

本文参考:泡泡机器人提供的带注释的ORB_SLAM2源代码 转载本文请注明出处: 在orb_slam2中,为了实现特征尺度不变性采用了图像金字塔,金字塔的缩放因子为1.2,。其思路就是对原始图形(第0层)依次进行1/1.2缩放比例进行降采样得到共计8张图片(包括原始图像),然后分别对得到的图像进行特征提取,并记录特征所在金字塔的第几层,这样得到一帧图像的特征点,如图1所示。 现在假设在第二层中...

RobotLife的博客 1万+

操作系统权限提升(十五)之绕过UAC提权-基于白名单DLL劫持绕过UAC提权

先将操作在本地执行,使用procmon进行监控,过滤DLL和 NAME NOT FOUND ,寻找可以替换的DLL文件,注意文件的权限是否可以在目录写入,可以看到在C盘的tools目录的文件中有一个srrstr.dll被调用,但是没有加载,我们生成恶意的DLL文件看看是否可以被劫持。在Windows中许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库文件,即dll文件,放置于系统中,个人理解类似于我们编程中引入的模块。将我们生成的DLL文件改名为我们要劫持的DLL文件名。

把自己活成一道光,因为你不知道,谁会借着你的光,走出了黑暗。请保持心中的善良,因为你不知道,谁会借着你的善良,走出了绝望。请保持你心中的信仰,因为你不知道,谁会借着你的信仰,走出了迷茫。请相信自己的力量,因为你不知道,谁会因为相信你,开始相信了自己.... 1874

036、算子映射:如何将ONNX算子映射到NPU硬件指令?

《算子映射:ONNX到NPU的转换艺术》 本文深入探讨了将ONNX算子映射到NPU硬件指令的技术挑战与实践经验。作者通过真实案例揭示了映射过程中的常见陷阱,如Reshape算子被错误映射导致分类错误。文章详细分析了三种映射策略(直接映射、拆分映射和融合映射),并强调映射表在编译器中的核心作用。特别针对动态形状、精度对齐等难题提供了解决方案,分享了编写映射表时的实用铁律,包括先优化后映射、严格单元测试等。最后指出,成功的算子映射需要在数学语义、硬件约束和性能优化之间找到精确平衡,这种看似枯燥的工作实则决定着N

m0_50546716的博客 189

ORB SLAM3项目:特征提取算法替换

ORB SLAM3项目:特征提取算法替换。使用SURF算法替换ORB算法并评估效果。

yyx13636176615的博客 1418

USB_TYPE-C 母座电路设计

本文详细介绍了USB Type-C接口(C2765186)的电路设计要点,重点解析了电源、识别和数据三部分的关键连接方案。电源部分需并联VBUS和GND引脚并加宽走线以承载3A电流;识别部分必须为CC1/CC2引脚配置5.1kΩ±1%精度的下拉电阻,这是触发PD充电的核心条件;数据部分通过短接正反插引脚实现盲插功能。文档还提供了完整的引脚对照表,并强调PCB布局需注意ESD防护、差分走线阻抗控制等要点,为Type-C接口设计提供了实用指导。

在读研究生,FPGA电路设计与功能开发。 587

ORB-SLAM 系统

ORB-SLAM作为一个完整的SLAM系统,提供了从特征提取、位姿估计到地图管理和闭环检测的全套解决方案。它的高效性、鲁棒性和适用性使其在许多实时应用中广受欢迎。ORB-SLAM系列通过逐步演进,不断提高了系统的精度、鲁棒性和适应性。

ItsWendy的博客 1447

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【ORB-SLAM2:五、 特征匹配】

特征匹配是ORB-SLAM系统中至关重要的一环,其性能直接影响地图构建的精度、位姿估计的稳定性以及闭环检测的可靠性。本章将详细探讨特征匹配在不同模块中的应用,包括单目初始化、视觉词袋方法、局部建图线程中的匹配与三角化,以及闭环线程中的Sim3搜索匹配。通过对特征匹配在单目初始化、视觉词袋、局部建图和闭环线程中的详细讨论,可以看出特征匹配是ORB-SLAM系统中贯穿始终的核心技术。其主要目标是通过多帧的特征点匹配,恢复相机的运动轨迹和初始地图点的三维位置。三角化是这一过程中关键的一步,用于生成新的地图点。

计算机领域博客,与时俱进的思想与技术。 1196

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

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

Yann的博客 5043

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ORB-SLAM2学习简单记录

ORB-SLAM2学习简单记录简要说明 简要说明         由于12月末的时候掏钱买了个orbslam2源码讲解的视频,虽然每一天也有陆陆续续看一点,但是越到后面看的越懵,因为orbslam2的代码还是比较复杂的。于是我打算简单记录一个代码框架,就是文件结构、伪代码和思路之类的,不涉及具体细节,旨在对整个slam框架的思路有个了解。而且网上对orbslam2的好的解说有太多了,我也就不班门弄斧了。这篇博文也就相当于一个学习笔记,比较

gy_Rick的博客 497

ORB Slam2和ORB Slam3的区别

特征提取和描述子:ORB-SLAM2使用ORB特征和ORB描述子,而ORB-SLAM3使用SuperPoint特征和SuperPoint描述子。姿态估计:ORB-SLAM2使用基于EPnP算法的姿态估计方法,而ORB-SLAM3使用基于PnP算法的姿态估计方法。PnP算法相比EPnP算法更加高效和准确。综上所述,ORB-SLAM3相比ORB-SLAM2在特征提取和描述子、姿态估计、语义信息和多相机系统等方面有所改进和优化。-------------------摘自chapgpt回答 用以记录。

Tyandy1的博客 3504

ORB-SLAM3 细读单目初始化过程(上)

学习ORBSLAM3单目视觉SLAM中,发现有很多知识点需要展开和深入,同时又需要对系统有整体的认知,为了强化记忆,记录该系列笔记,为自己图方便,也希望对大家有所启发。 因为知识有限,因此先记录初始化过程中的重要节点,并非全部细节,如果需要看代码的话,建议直接去看作者的源代码。 上一次的笔记 ORB-SLAM3 单目初始化过程剖析1 TrackMonocular->GrabImageMonocular 记录了GrabImageMonocular,调用它的函数TrackMonocular是ORBSLAM单目视

浪浪山已在身后 4466

《视觉SLAM14讲》学习笔记——ORB特征提取与匹配

本篇博客是对于《视觉SLAM十四讲》中第7讲的ORB特征提取和匹配部分进行一个记录,后续会继续完善和补充ORB的其他内容 7.1 特征点法 视觉里程计算法主要分为:特征点法和直接法 特征点法的优点:稳定,对光照、动态物体不敏感 7.1.1 特征点 提取角点的算法有:Harris角点、FAST角点、GFTT角点等 单纯的角点不具有尺度不变性,目前主要的特征点有**SIFT1 、SURF、ORB...

a819096127的博客 1580

ORB特征点提取与均匀化——ORBSLAM2源码讲解(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、ORB特征均匀化策略对性能的影响二、ORB特征金字塔三、ORB提取扩展图像四、ORB特征均匀化总结 前言 本博客结合哔哩大学视频ORBSLAM2【ORBSLAM2源码讲解专题一】ORB特征点提取与均匀化策略总结。 代码参照github的ORB_SLAM2_detailed_comments ORBSLAM2代码很经典,而且代码量大,会分成多个博客研究,下为slam专题的其他链接: 代码要求环境做了总结,解决了配置中的一些常

weixin_45947476的博客 6233
上一篇: c++ 基础知识-模板1
下一篇: c++ 基础知识-模板2
xiaoliyu00
博客等级 码龄9年 4180粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值