1.ORBSLAM3--学习总结(5)将ORB-SLAM3及相关依赖打包成Docker镜像
2.ORB特征提取与匹配
3.(四十三)特征点检测-LBP
4.ORB-SLAM2 的编译运行(ubuntu20.04)以及ROS1安装
ORBSLAM3--学习总结(5)将ORB-SLAM3及相关依赖打包成Docker镜像
为了便于在不同环境中部署和使用ORB-SLAM3,我尝试将ORBSLAM3及其依赖打包成Docker镜像。以下是构建过程的简要记录,可能存在技术上的不足,期待您的指正。1. 准备Docker环境
首先,app源码怎么解包确保你的系统已经安装了Docker。如果镜像下载速度慢,可以考虑添加国内和国外的镜像加速器,重启Docker服务以应用更改。2. Dockerfile创建镜像
使用Dockerfile构建镜像时,我开始了一个基础示例,但实际操作时,可能需要根据具体环境调整。例如,基础镜像FROM ubuntu:.,可以通过添加加速器解决下载问题。3. 构建镜像与测试
在Dockerfile中,定义镜像名称和标签(如orbslam3:latest),然后在容器中定位到ORBSLAM3源代码,并进行功能测试。网络源码搭建系统3. 直接容器启动方式
除了Dockerfile,也可以通过拉取基础镜像创建容器,然后在容器中安装所需依赖,如cmake、ros等。在Ubuntu容器中,通过apt包管理器安装,例如opencv和Eigen,最后将ORBSLAM3源码添加到容器内。4. 镜像制作与发布
所有依赖安装完毕后,使用docker commit命令将容器转化为镜像。镜像可以通过DockerHub发布,需要先注册账号,然后登录并使用docker push命令将镜像上传到公共仓库,以便他人下载使用。以上步骤记录了将ORBSLAM3打包成Docker镜像的基本流程,如有问题或优化建议,欢迎分享。
ORB特征提取与匹配
本文主要回顾了ORB特征提取的过程,并解决了个人对这一主题的脚本精灵iua源码疑惑,但未深入探讨OpenCV源码,原因在于个人懒于解析。文章参考了高翔的《视觉SLAM十四讲》和相关opencv实现,欢迎读者指正错误。
好的特征点在于其显著性和匹配的准确性。角点特征,如E和F,因其特征明显,是理想的匹配对象。ORB算法采用OFAST快速提取这些特征点,下面将介绍OFAST和Oriented FAST的原理。
OFAST角点检测基于亮度变化,例如,如果圆周上的连续个点亮度超过或低于特定阈值,像素可能被识别为特征点。Oriented FAST在此基础上增加方向信息,以保持旋转不变性。
图像金字塔通过高斯模糊和降采样处理,解决了尺度不变性问题,确保不同尺度下的成品直播源码推荐角点特征能准确匹配。接下来是BRIEF描述子,ORB算法使用的改进BRIEF描述特征,通过二进制编码存储角点邻域信息,以便判断匹配性。
特征方向与BRIEF描述子的结合,保证了旋转不变性。尽管旋转后BRIEF描述子会发生变化,但根据角点方向调整pattern,可以恢复旋转前的状态。
总的来说,ORB特征提取包括角点检测、方向信息添加、尺度不变性处理以及BRIEF描述子编码,这些步骤共同确保了特征点的稳定性和匹配效率。通过《视觉SLAM十四讲》的实例,我们可以理解并应用这些技术。
(四十三)特征点检测-LBP
时间为友,记录点滴。
特征点检测领域并非只有一种算法,大神们总能带来新颖的小程序找茬源码想法。虽然不可能掌握所有算法,但有些思路是值得借鉴的。
比如SIFT就是一个宝库,总能给我们带来启发。
既然已经了解了Harris、SIFT、FAST等特征检测算法,以及特征点的定义和评判标准,那么我们就来探讨LBP如何在特征检测领域脱颖而出。
思考一下特征点的优良性质:
什么是LBP?
LBP(Local Binary Pattern,局部二值模式)是一种描述图像局部纹理特征的算子,它具有旋转不变性和灰度不变性等显著优点。由T. Ojala、M. Pietikäinen和D. Harwood在年提出,用于纹理特征提取。它提取的是图像的局部纹理特征;
它是如何实现的?
首先谈谈原始LBP算子:
通过比较3*3邻域内的8个点,可以得到8位二进制数(通常转换为十进制数即LBP码,共种,即2 Byte),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理信息。
虽然简单,但略显简陋(是不是与FAST算子有些类似)。这个LBP算子显然不能表示优良特征点,还好它出现的早(),所以后人对LBP做了很多优化,使其满足尺度不变、旋转不变、光照不变。
尺度不变:
无论是SIFT还是ORB,要做到尺度不变,我们通常采用金字塔扩展到多尺度空间,但LBP有它独特的方法。
在原始的LBP中,我们选择的是以目标点为中心,3x3的8邻域,经历过FAST的我们很容易想到半径的概念。那么3x3代表的就是以目标点为圆心,半径为1的邻域,如果我们把半径扩展一下会怎么样呢?
Ojala等人对LBP算子进行了改进,将3×3邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的LBP算子允许在半径为R的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子;
这种情况下,对应黑点像素可能不是整数,要得到该点准确的像素值,必须对该点进行插值计算才能得到该点像素值,常见的插值方式为双线性插值或者立方插值。
这种思路有点像“山不转,水转;水不转,人转”;
旋转不变性:
Maenpaa等人又将LBP算子进行了扩展,提出了具有旋转不变性的LBP算子,即不断旋转圆形邻域得到一系列初始定义的LBP值,取其最小值作为该邻域的LBP值。
举一个具体的例子:下图所示的8种LBP模式,经过旋转不变的处理,最终得到的具有旋转不变性的LBP值为。也就是说,图中的8种LBP模式对应的旋转不变的LBP模式都是。
光照不变:
从LBP的差值计算可以看出,LBP本身就具有光照不变的特性(灰度值按比例缩放,强者恒强),但是我们可以引入权重概念,计算LBP码和对比度。
好了,LBP就这么多。是不是感觉SIFT/ORB后什么都简单了些?
在网上搜了个Python实现的LBP,实验了下,贴在这里:
Python
惯例,OpenCV早就给我们提供了LBP的算子,而且可以结合FaceDetect来用,
C++
1、lbpcascade_frontalface_improved文件我使用的是我们自己编译出来的,在Binfile\install\etc\lbpcascades目录下(你可以用everything搜索一下,OpenCV源码中也有提供) 2、今天我们首次使用了CascadeClassifier,这个我觉得有必要在后面详细解释一下。用OpenCV做人脸检测简直简单得不要不要的。
ORB-SLAM2 的编译运行(ubuntu.)以及ROS1安装
在 Ubuntu . 环境中,编译并运行 ORB-SLAM2 需要一系列的准备工作和库的安装。首先,确保已安装了所需的依赖项,然后按照指定链接从 GitHub 下载并安装 Pangolin-0.6 稳定版。
接着,进行 OpenCV-3.4.5 的安装,包括下载、配置编译环境和查询版本信息以验证安装是否成功。对于 Eigen3,建议源码安装默认的 Eigen 版本(3.3.9),并将其头文件复制到相应目录以确保正常工作。若需要使用特定版本(如3.3.7),需手动安装并调整位置。
在编译 ORB-SLAM2 时,需处理常见的报错,例如在 `System.h` 中添加 `#include` 以解决 `usleep` 报错,并根据特定链接调整 `LoopClosing.h` 文件中的代码以解决第二个报错。第三个报错需删除 `CMakeCache.txt` 文件并重新执行 `cmake ..` 和 `make` 命令。
成功编译后,需在特定目录下运行 ORB-SLAM2,确保使用正确的终端打开以找到可执行文件。此外,安装 ROS1 可以通过一键安装工具完成,注意管理日志目录的大小以避免警告。在安装完成后,启动 ROS Master、小海龟仿真器和海龟控制节点,以验证 ROS1 是否已成功安装。
安装过程中可能遇到的问题包括 ROS 目录的位置和库查找问题,以及如何在编译 ORB-SLAM2 时指定依赖目录。通过将 ROS 目录添加到环境变量(如 `PYTHONPATH` 或 `LD_LIBRARY_PATH`)中,可以解决这些问题并确保库的正确查找。