slam14讲-ch13 和 orb-slam2

news/2024/11/28 19:41:06/

OpenSLAM.org

1、基础知识

1.1 c++

      1.1.1 h文件的撰写规则

#pragma once

#ifndef MYSLAM_CAMERA_H
#define MYSLAM_CAMERA_H
#endif  // MYSLAM_CAMERA_H

    1.1.2 共享指针

        在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃、程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的。比如:

  • 有些内存资源已经被释放,但指向它的指针并没有改变指向(成为了野指针),并且后续还在使用;
  • 有些内存资源已经被释放,后期又试图再释放一次(重复释放同一块内存会导致程序运行崩溃);
  • 没有及时释放不再使用的内存资源,造成内存泄漏,程序占用的内存资源越来越多

         C++ 11 后实现了unique_ptr、shared_ptr 以及 weak_ptr 这 3 个智能指针来实现堆内存的自动回收。具体来讲,智能指针和普通指针的用法是相似的,不同之处在于,智能指针可以在适当时机自动释放分配的内存。也就是说,使用智能指针可以很好地避免“忘记释放内存而导致内存泄漏”问题出现。

C++ 智能指针底层是采用引用计数的方式实现的。简单的理解,智能指针在申请堆内存空间的同时,会为其配备一个整形值(初始值为 1),每当有新对象使用此堆内存时,该整形值 +1;反之,每当使用此堆内存的对象被释放时,该整形值减 1。当堆空间对应的整形值为 0 时,即表明不再有对象使用它,该堆空间就会被释放掉。

  •         std::shared_ptr 和 unique_ptr、weak_ptr 不同之处在于,多个 shared_ptr 智能指针可以共同使用同一块堆内存。并且,由于该类型智能指针在实现上采用的是引用计数机制,即便有一个 shared_ptr 指针放弃了堆内存的“使用权”(引用计数减 1),也不会影响其他指向同一堆内存的 shared_ptr 指针(只有引用计数为 0 时,堆内存才会被自动释放)。
  •         std::weak_ptr 定位为智能指针的一种,但该类型指针通常不单独使用(没有实际用处),只能和 shared_ptr 类型指针搭配使用。甚至于,我们可以将 weak_ptr 类型指针视为 shared_ptr 指针的一种辅助工具,借助 weak_ptr 类型指针, 我们可以获取 shared_ptr 指针的一些状态信息,比如有多少指向相同的 shared_ptr 指针、shared_ptr 指针指向的堆内存是否已经被释放等等。需要注意的是,当 weak_ptr 类型指针的指向和某一 shared_ptr 指针相同时,weak_ptr 指针并不会使所指堆内存的引用计数加 1;同样,当 weak_ptr 指针被释放时,之前所指堆内存的引用计数也不会因此而减 1。也就是说,weak_ptr 类型指针并不会影响所指堆内存空间的引用计数。除此之外,weak_ptr<T> 模板类中没有重载 * 和 -> 运算符,这也就意味着,weak_ptr 类型指针只能访问所指的堆内存,而无法修改它。
  •         std::unique_ptr 指针自然也具备“在适当时机自动释放堆内存空间”的能力。和 shared_ptr 指针最大的不同之处在于,unique_ptr 指针指向的堆内存无法同其它 unique_ptr 共享,也就是说,每个 unique_ptr 指针都独自拥有对其所指堆内存空间的所有权。这也就意味着,每个 unique_ptr 指针指向的堆内存空间的引用计数,都只能为 1,一旦该 unique_ptr 指针放弃对所指堆内存空间的所有权,则该空间会被立即释放回收。

2、特征提取

2.1 ORB特征点

        特征点是由关键点(keypoint) 和描述子(descriptor),关键点是描述特征点在图像中的位置,描述子用来量化描述该关键点周围像素的信息。

        ORB特征点的关键点是Oriented-FAST,描述字是Steered BRIEF。

2.1.1 Oriented-FAST

2.1.2 Steered BRIEF

2.2 特征点均匀化

        OpenCV的ORB特征提取方法存在一个问题,就是特征点往往集中在纹理丰富的区域,而在缺乏纹理的区域提取到的特征点的数量会少很多。会带来特征点冗余的问题(一个小区域一个特征点可以表示清楚,而提取到了十个特征点,导致其余9个多余)和影响位姿的解算(特征点在空间中分布的层次越多,越均匀,特征匹配越能精确的表达出空间的几何关系)。

2.2.1 四叉树实现特征点均匀化分布

3、特征匹配


http://www.ppmy.cn/news/241531.html

相关文章

oppor9android6.0版本,好消息!OPPO R9 Plus能升级至安卓6.0

有了问题&#xff0c;还是得想办法反映给手机 厂商啊&#xff0c;不然坐等的话&#xff0c;没人会理财你。经过国产手机牌子OPPO R9 Plus手机用户的强烈抗议&#xff0c;官方终于改变了最初的决定。就这儿去查询了一下官方论坛&#xff0c;通告时间是发表于 2017-1-5 14:07:51。…

RenderThread线程报错记录

RenderThread线程报错是很蛋疼的&#xff0c;它是属于native报错&#xff0c;而且还会有各种情况。 04-23 16:31:38.343 17895 17895 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 04-23 16:31:38.344 17895 17895 F DEBUG : Build finger…

Android Q 获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID)

Android Q获取设备唯一ID&#xff08;UDID\GUID\UUID\SSAID\GAID&#xff09; 一、简介1.1 问题背景1.2 关键技术 二、解决方案2.1 谷歌官方推荐方案 (4种) 2.2 实现方案1——GUID方案2.3 实现方案2——数字版权管理&#xff08;DRM&#xff09;方案2.4 实现方案3——自定义ID硬…

java调用clang编译的so_NDK clang编译器的一个bug

NDK clang编译器的一个bug 问题代码 float32_t Sum_float(float32_t *data, const int count) { float32x4_t res vdupq_n_f32(0.0f); for(int i 0; i < (count & (~15)); i 16) { #if 01 float32x4x4_t v0 vld1q_f32_x4(data i); float32x4_t v00 v0.val[0]; flo…

vue cli怎么添加浏览器标签页图标

在build文件夹 1. 找到webpack.dev.conf.js&#xff0c;再找到HtmlWebpackPlugin&#xff0c;添加favicon:‘favicon.ico路径’ new HtmlWebpackPlugin({filename: index.html,template: index.html,favicon:./nationalEmblem.png, //这里设置图标路径inject: true}) 2. 然后…

android 堆栈 分析,Android JNI堆栈分析工具简介

8种机械键盘轴体对比 本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f; | 导语 从事Android开发的同事如果在碰到JNI的bug一般都是比较头疼的&#xff0c;因为JNI出错的日志信息比较少&#xff0c;不像Java层的堆栈那样&#xff0c;可…

Java集成openCV实现图片背景切换

下载openCV 官网地址&#xff1a;Releases - OpenCV 下载地址&#xff1a;Download OpenCV from SourceForge.net 这里我用的opencv440的windows版本 下载完成后点击exe进行安装&#xff0c;安装完成后会生成opencv文件夹&#xff0c;里面有各个环境文件 boot 示例 1.在ope…

android 设备 root,Root Android 设备

android手机root过程 设备Root难易度排名 个人理解。手机root的困难度排名&#xff1a; 华为系列 小米系列 oppo以及一加等 谷歌的nexsus 6p以及pixel等。 实际测试华为mate8,root完成之后&#xff0c;发现内核的一个debug参数设置为0&#xff0c;不能切换到su root。导致无法使…