SLAM学习
sxxblogs
研究生在读,3D视觉
展开
-
ORB-SLAM2 TRACKING
bool Tracking::TrackWithMotionModel()//匀速运动追踪模式{ ORBmatcher matcher(0.9,true);//ORB匹配器,用于后面在当前帧上搜索与重映射之后的地图点匹配的特征点 //第一个参数是一个接受最佳匹配的系数,只有当最佳匹配点的汉明距离小于次加匹配点距离的0.9倍时才接收匹配点。 //第二个参数表示匹配特征点时是否考虑方向。 // Update last frame pose according to its原创 2021-01-06 09:56:45 · 95 阅读 · 0 评论 -
特征点法构建视觉里程计(代码实践)
#ifndef VISUALODOMETRY_H#define VISUALODOMETRY_H #include "myslam/common_include.h"#include "myslam/map.h" #include <opencv2/features2d/features2d.hpp> namespace myslam {class VisualOdometry{public: //定义指向自身的智能指针,在后面传递参数是使用VisualOdome原创 2021-01-06 09:54:36 · 323 阅读 · 1 评论 -
ORB-SLAM2 关于初始化流程和代码解释
SLAM系统最关键的部分是tracking和maping。除此之外还有让系统更加完整和完善的初始化、回环检测、可视化等模块。初始化是SLAM系统在运行时是都要经历的一步,系统一定要有一个初始的传感器位姿和初始的地图。单目相机需要两帧具有一定视差的图像来完成这一任务。为什么说ORB_SLAM2是相对完美的系统,因为它改进了初始化,在该系统中初始化是自动完成的。针对平面场景(planar scene)和非平面场景(non-planar scene), ORB-SLAM2提供了单应(homography)和基原创 2020-08-27 11:47:46 · 1094 阅读 · 0 评论 -
【从零搭建视觉里程计前端】--camera类
Camera 类存储相机的内参和外参,并完成相机坐标系、像素坐标系、和世界坐标系之间的坐标变换。除此之外还需要外参,手动传入。本期来实现Camera类。#ifndef CAMERA_H //宏定义,防止头文件重复引用#define CAMERA_H#include "myslam/common_include.h"//把一些常用的头文件放在一个 common_include.h 文件中,这样就可以避免每次书写一个很长的一串 includenamespace myslam //用命名空间 nam原创 2020-08-07 10:09:22 · 239 阅读 · 0 评论 -
《SLAM十四讲》8.3 使用LK光流法useLK.hpp
LK光流法的步骤:1.对第一帧提取FAST特征点存到keypoints中2.对其他帧用LK跟踪特征点3.更新keypoints列表,从prev_keypoints到next_keypoints4.画出 keypoints圆圈本博客不讲解理论部分,直接上主程序。因为本博客是博主的学习分享帖子,可能有些繁琐,见谅~#include <iostream>#include<fstream>//fstream是对文件操作的头文件#include <list>#in原创 2020-08-01 20:53:39 · 665 阅读 · 2 评论 -
《SLAM十四讲》3D-3D位姿估计 pose_estimation_3d3d.cpp(代码详解+原理)
3D-3D的位姿估计的求解需要两张RGB-D图像,经过特征匹配得到配对的特征点,再经过SVD方法求解出相机位姿(R和t)。P和P’为两组匹配点,pi与p’i分别为两幅RGB-D图像的特征点。还是先看代码:void pose_estimation_3d3d( const vector<Point3f>& pts1,//第一幅图像3D坐标点 const vector<Point3f>& pts2,//第二幅图像3D坐标点 Mat&原创 2020-08-01 12:09:14 · 1911 阅读 · 0 评论 -
《SLAM十四讲》7.6 三角测量 triangulation.cpp
三角测量是为了解决单目图像无法获取深度的问题,本博客是代码解释所以不解释三角测量的原理。先上全部代码:#include <iostream>int main ( int argc, char** argv ){ if ( argc != 3 ) { cout<<"usage: triangulation img1 img2"<<endl; return 1; } //-- 读取图像 Mat原创 2020-07-31 10:35:44 · 2288 阅读 · 3 评论 -
《SLAM十四讲》7.4 对极约束求解相机运动(代码详解)
先上完整代码,稍后进行详细解释完整代码包括上一章讲到的ORB特征检测与匹配部分,在这里ORB部分的内容封装到了函数find_feature_matches()中。关于该代码的介绍《十四讲》中的原话是:“上一节实践部分的程序提供了特征匹配,而这次我们就使用匹配好的特征点来计算 E,F 和 H,进而分解 E 得到 R,t。整个程序使用 OpenCV 提供的算法进行求解。我们把上一节的特征提取封装成函数,以供后面使用。”#include <iostream>#include <openc原创 2020-07-30 12:55:21 · 1170 阅读 · 5 评论 -
OpenCV3 ORB特征检测与匹配 (程序实战)代码详解
ORB特征提取分为两步:①FAST角点提取,找出图片中的角点、计算特征点的主方向为后续BRIEF描述子增加了旋转不变特性。②BRIEF特征点描述。OpenCV3中ORB特征检测主要分为五步:–读取图像–初始化①检测Oriented FAST角点位置②根据焦点位置计算BRIEF描述子③使用Hamming距离对两幅图像中的描述子进行匹配④匹配点对筛选⑤绘制匹配结果下面贴上代码详解代码是《SLAM十四讲》中的,博主正在学习中,所以自己加上了注释,非常详细的~(大部分是自己查的,一小部分是借原创 2020-07-24 21:54:22 · 1826 阅读 · 1 评论 -
SLAM中的 ORB特征检测与匹配(理论篇)
《SLAM十四讲》视觉里程计第一部分的实践便是ORB特征检测下面来讲讲ORB的理论:ORB算法分为两部分,第一部分是特征提取算法即FAST算法,第二部分是特征描述子BRIEF,BRIEF将第一个算法发现的关键点变成特征向量,这些特征向量可以共同表示一个对象。FAST给与一个像素点 p,FAST 比较目标 p 圆圈范围中的 16 个像素,每个像素按高于 p、小于 p或者与 p 相似,分为三类。在 FAST-12 算法中,为了更高效,可以添加一项预测试操作,以快速地排除绝大多数不是角点的像素。具体操原创 2020-07-23 20:24:11 · 897 阅读 · 0 评论