第02讲 SLAM系统的构造函数、特征点图像金字塔、构造灰度质心图


一、单目的主函数 分析

1. 入口:

····ORB-SLAM2/Examples/mono_tum.cc
mono_tum.cc入口

2. System的构造函数

····System.h
System构造函数

····System.cpp
重点:Tracking
在这里插入图片描述

····Tacking.cc
Tacking.cc

重点:提取ORB特征
ORB特征提取1
ORB提取

比如要提取1000个特征点,那怎么分配每一层的特征点呢:
在构造函数里面,先是根据配置文件初始化好了每一层的缩放因子和sigma2(倒数),然后分配特征点数量:
在这里插入图片描述
在这里插入图片描述

对应代码:
在这里插入图片描述


二、ORB特征学习

1. 提取特征点FAST和描述子BRIEF

对应代码:
src\ORBextractor.cc
在这里插入图片描述

2. 灰度质心法

保证旋转不变性,使用灰度质心法计算特征点的方向,要用圆形
在这里插入图片描述
在这里插入图片描述

为什么不要用正方形:因为如果用正方形,可能旋转之后该点已经在范围外。
下面求圆内的坐标范围
目的:求方向时,为了索引像素点使用。
umax:1/4圆的每一行的u轴坐标边界
在这里插入图片描述

对应代码:
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用ORB SLAM2提取一幅像的特征点需要按照以下步骤进行: 1. 创建一个ORBextractor对象,该对象用于提取特征点和描述符。ORBextractor类是ORB-SLAM2库中的一个类,可以通过构造函数指定特征点数量、图像金字塔层数等参数。 2. 读取像并将其转换为灰度像,ORB-SLAM2只能处理灰度像。可以使用OpenCV的cv::imread函数读取像,并使用cv::cvtColor函数将其转换为灰度像。 3. 调用ORBextractor的operator()函数提取像的特征点和描述符。该函数的输入参数为灰度像和一个可选的掩码像。 4. 获取提取的特征点和描述符。特征点是一个std::vector<cv::KeyPoint>对象,每个KeyPoint对象包含特征点的坐标、响应值等信息。描述符是一个cv::Mat对象,每行包含一个特征点的描述符,描述符的列数等于ORBextractor构造函数中指定的描述符维数,默认为32。 下面是一个示例代码: ``` #include <opencv2/opencv.hpp> #include "ORBextractor.h" int main(int argc, char **argv) { // 创建ORBextractor对象 ORB_SLAM2::ORBextractor orb_extractor(1000, 1.2, 8, 20, 7); // 读取像并将其转换为灰度像 cv::Mat image = cv::imread("test.png", cv::IMREAD_GRAYSCALE); // 提取特征点和描述符 std::vector<cv::KeyPoint> keypoints; cv::Mat descriptors; orb_extractor(image, cv::Mat(), keypoints, descriptors); // 输出特征点数量 std::cout << "Number of keypoints: " << keypoints.size() << std::endl; return 0; } ``` 在上面的代码中,ORBextractor构造函数中的参数分别为特征点数量、图像金字塔层数、尺度因子、尺度空间中每个层的特征点数量、FAST角点检测阈值等。可以根据实际需要调整这些参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值