- 博客(63)
- 收藏
- 关注
原创 视觉SLAM ch8 直接法
一、直接法的提出1.特征点法的缺点:①关键点的提取和描述子的匹配非常耗时。②忽略了特征点以外的所有信息。一张图像的像素有几十万,特征点只要几百个。③相机有时会运动到特征缺失的地方,比如白墙,或者空荡的走廊。这些场景特征点数量明显减少。④由于只提取特征点,因此通过特征点法只能重构出稀疏地图。2.解决这些缺点的思路:①保留特征点,但只计算关键点(必须是角点),不计算描述子。使用光流法跟踪特征点的运动,这样可以减少计算和匹配描述子带来的时间,光流本身的计算时间小于描述子的计算与匹配。
2022-04-03 20:57:22
1056
原创 视觉SLAM ch8代码总结
一、LK光流1.使用LK光流用OpenCV的光流追踪特征点的运动。第一张图像中提取角点,利用光流追踪角点在第二张图像中的位置。使用cv::calcOpticalFlowPyrLK函数可以得到追踪后的点。void cv::calcOpticalFlowPyrLK ( InputArray prevImg,InputArray nextImg,InputArray prevPts,InputOutputArray nextPts,OutputArray status,
2022-04-03 20:29:14
3840
原创 视觉SLAMch7 课后题
课后习题1.除了ORB特征点,还有哪些特征点?说说SIFT与SURF的原理,并对比它们与ORB之间的优势。仅提取关键点:Harris角点、FAST角点、GFTT(goodFeaturesToTrack)角点既有关键点又有描述子:SIFT、SURF、ORB。Harris角点Harris角点检测是一种基于图像灰度的一阶导数矩阵检测方法。检测器的主要思想是局部自相似性/自相关性,即在某个局部窗口内图像块与在各个方向微小移动后的窗口内图像块的相似性。GFTT角点调用的是Shi-Toma
2022-03-27 22:04:43
3537
1
原创 视觉SLAM ch7代码总结(二)
目录一、求解对极约束求解相机运动二、三角测量一、求解对极约束求解相机运动1.特征提取与匹配函数//特征提取和匹配void find_feature_matches( const Mat &img_1,const Mat &img_2, vector<KeyPoint> &keypoints1, vector<KeyPoint> &keypoints2, ve
2022-03-23 17:09:24
5468
原创 视觉SLAM ch7 计算相机运动(求位姿)
目录计算相机运动一、2D-2D:对极几何二、三角测量三、3D-2D:PnP四、3D-3D:ICP计算相机运动在已经有匹配好的点对基础上来估计相机的运动(其实就是求R和t)根据相机不同的种类有以下几种情况:1.相机为单目时,只有2D的像素坐标(缺少了深度信息),因此问题就是根据两组2D点估计相机运动,用对极几何解决。2.相机为双目、RGB-D时,或者通过某种方式得到了距离信息,问题就是根据两组3D点估计相机运动,通常用ICP解决。3.如果一组为3D,...
2022-03-23 17:09:03
5680
原创 视觉SLAM ch7代码总结(一)
目录一、OpenCV的 ORB特征二、手写ORB特征一、OpenCV的 ORB特征1.Keypoint类opencv中Keypoint类的默认构造函数为:CV_WRAP KeyPoint() : pt(0,0), size(0), angle(-1), response(0), octave(0), class_id(-1) {} pt(x,y):关键点的点坐标; size():该关键点邻域直径大小;angle:角度,表示关键点的方向,值为[0,360),负值表示不使
2022-03-14 17:00:05
4121
1
原创 视觉SLAM ch7 ORB特征点
一、视觉里程计方法:特征点法和光流法。(视觉里程计的核心是如何根据图像估计相机运动)1.1 特征点法:提取和匹配特征点,然后根据配对的特征点估计相机的运动。特征点由关键点和描述子组成。关键点是指特征点在图像里的位置,有些特征点还具有朝向、大小信息;描述子通常是一个向量,描述了该关键点周围像素的信息。1.2 常用的特征点方法:一、SIFT(尺度不变特征变换),充分考虑了图像变换过程中出现的光照、尺度、旋转等变化,但需要大量的计算。二、SURF(加速稳健特征),SURF算法是SIFT算法
2022-03-14 10:54:46
2746
原创 视觉SLAM ch6代码总结
一、手写高斯牛顿法三个步骤:1、先根据模型生成x,y的真值,并在真值中添加高斯分布的噪声2、使用高斯牛顿法进行迭代3、求解高斯牛顿法的增量方程增量方程的推到过程图片来源 该公式等同于133页6.41式Σ 是 高斯噪声的方差CMakeLists.txtcmake_minimum_required(VERSION 3.0)project(ch6)set(CMAKE_BUILD_TYPE Release)set(CMAKE_CXX_FLAGS "-std=c+...
2022-02-24 16:44:15
4803
2
原创 视觉SLAM ch6 非线性优化
一、首先理解运动方程和观测方程(1)运动方程: x表示相机的位姿,每个时刻位姿记为x1, x2...... xk,构成了运动的轨迹。uk 是传感器的输入;wk 是噪声,假设噪声服从高斯分布。运动方程的意义是: k-1 到 k 时刻,机器人位姿x 是如何变化的。 SLAM中的定位问题就是估计 x的值。区分位姿和位置:位姿代表位置和姿态。任何一个刚体在空间坐标系(OXYZ)中,可以用位置和姿态来精确、唯一表示其位置状态。位姿是六自由的量,包括旋转和平移;位置是三维的量,表示具体位置(X,
2022-02-17 18:09:17
2183
1
原创 视觉SLAM ch5代码总结(三)
RGB-D视觉(1)根据内参计算一对RGB-D图片对应的点云(2)根据每张图的相机位姿(外参)把点云加起来,组成地图遍历图像的每个像素,并将深度图的深度信息提取出来,将像素点归一化后,乘上深度信息就得到了相机坐标系下的点,在左乘T 就得到了世界坐标系下的点1. 相机的内外参数 99-1002. return 0 return 1 区别return 1;//return 0 代表程序正常退出,return 1代表程序异常退出!3.boost/formatc++中的b
2022-02-15 12:12:56
1558
4
原创 视觉SLAM ch5代码总结(二)续
前面代码是使用灰度图实现去畸变和双目视觉的,本部分内容用彩色图来实现双目视觉。视觉SLAM学习【7】-----基于ubuntu16.04的深度及彩色图像立体匹配,并生成深度和彩色3D点云 - 古月居 (guyuehome.com)https://www.guyuehome.com/23903代码就不讲了,讲一下我写的时候遇到一些问题。一、彩色图的左右两图像素一定要相同,截图完以后使用画图工具修改像素保持纵横比取消对勾,水平和垂直像素两张图一样就行,不然使用SGBM算法会报错,错误信息提示两.
2021-12-23 10:17:28
211
2
原创 视觉SLAM ch5代码总结(二)
图像去畸变CMakeLists.txtcmake_minimum_required(VERSION 3.10)project(basics)#Eigeninclude_directories("/usr/include/eigen3")#opencvfind_package(OpenCV REQUIRED)#添加头文件include_directories(${OpenCV_INCLUDE_DIRS})add_executable(imageBasics imageBasic
2021-12-22 10:25:38
6400
原创 视觉SLAM ch5代码总结(一)
1.int argc,char **argvargc 表示输入参数的个数 *argv 是指针数组 存放输入的参数(可能比较抽象,看下面例子会清晰点)例如 make 以后再终端输入./imageBasics ../ubuntu.pngargc = 2argv[0] 是./imageBasics ,argv[1] 是 ../ubuntu.pngcout<<argc<<" "<<argv[0]<<" "<<...
2021-12-17 20:39:28
4245
2
原创 视觉SLAM ch5相机与图像
世界坐标系、相机坐标系 、图像(物理成像平面)坐标系(Z=1, 归一化坐标系),像素坐标系这四个坐标系的坐标依次为 Pw , Pc , , Puv (二维平面内)注意书中的 P 就是这里的 Pc,看的时候不认真,把Pw 和 Pc 搞混了(1) Pc = R Pw + t = [X,Y,Z](XYZ是相机坐标系坐标) 或者 Pc = Tcw Pw 从世界坐标系变换到相机坐标系(2)Pw = R Pc + t 或者 P...
2021-12-16 16:00:23
339
原创 视觉SLAM ch4李群和李代数
这一部分我把书中的内容认认真真的看了三遍,高博书中已经写的很详细了,不懂的地方去网上找找相关资料就没什么大问题了。看完后要明白几个问题 1.为什么李群要转换成李代数计算?有什么优势?为了求导。使用李代数的一个动机是为了进行优化,而在优化过程中导数是很重要的信息 2.为什么引入指数和对数映射?跟李代数和李群又是什么关系? 为了更好的计算李群和李代数引入了指数和对数映射 李群通过对数映射转化为李代数,反过来李代数通...
2021-12-14 17:30:03
1127
原创 视觉SLAM ch3课后题 (笔记)
(1)旋转矩阵,变换矩阵,旋转向量,欧拉角,四元数之间的相互联系1.四元数---->旋转向量: v_rotate = AngleAxisd (q)2.旋转向量----->四元数: q = Quaterniond (v_rotate)3.旋转向量----->旋转矩阵: R = v_rotate.matrix() 或 R = v_rotate.toRotationMatrix()4.旋转矩阵----->旋转向量: v_rotate = AngleAxisd (R
2021-12-10 20:53:45
223
原创 视觉SLAM ch3代码总结 (三)
(1)重载运算符<< 和 >>为什么要重载运算符?C++语言中已经给出的运算符(包括算数运算符和逻辑运算符)只是针对C++语言中已经给定的数据类型进行运算,假如我们想要对我们的自定义数据类型进行运算的话,则需要重载运算符,我们可以把重载运算符理解成对已有的运算符的一种重新定义。语法格式如下<返回类型> operator <运算符符号>(<参数>){ <定义>;}举个栗子 重载运算符<struct.
2021-12-09 19:50:50
262
原创 视觉SLAM ch3代码总结 (二)
coordinateTransform.cpp首先小萝卜一号坐标变换到世界坐标系Pw = T w1 * P 1其次世界坐标系再变换到小萝卜二号坐标系P2 = T 2w * P w所以 P2 = T 2w * Tw1 * P1T2w 是使用四元数q2初始换欧式变换矩阵 Isometry3d T2w(q2);Tw1 = T1w的逆矩阵 初始化和上面代码一样 Isometry3d T1w(q1);在加上平移向量 T1w.pretranslate...
2021-12-08 21:31:33
1154
原创 视觉SLAM ch3 代码总结(一)
useGeometry代码分别用几种旋转方式如 angle axis 、matrix 、变换矩阵、四元数旋转一个向量v(1,0,0)最后得出的结果就是旋转以后的 v丶坐标 。不过变换矩阵的结果加入了平移向量。在书中不懂的地方自己进行了注释...
2021-12-08 10:44:23
388
原创 在ROS使用usb深度相机跑ORBSLAM3
关于orbslam3的代码以及安装配置参考下面这篇文章(12条消息) 在ROS中使用usb摄像头跑ORB SLAM2_Goding_learning的博客-CSDN博客https://blog.csdn.net/Goding_learning/article/details/52950993上面文章使用的是单目相机 我使用的是乐视深度相机 关于驱动安装参考下面文章(12条消息) Uubuntu16.04安装华硕ASUS Xti...
2021-11-02 09:44:08
2680
9
原创 关于slam14讲 ch5 imageBasics
第一种使用vim进行编辑程序写好以后退后输入下面的指令g++ opencv_test.cpp -o a.out `pkg-config opencv --libs --cflags opencv`会生成 a.out文件./test.out 1.jpg //1.jpg 是图片 和cpp文件放在同一目录下第二种在CMakeLists.txt 写set( CMAKE_CXX_FLAGS "-std=c++11")project(imageBasics)...
2021-10-11 16:04:41
668
1
转载 vscode在ubantu下c++的环境配置
task.json{ "version": "2.0.0", "tasks": [ { "type": "shell", "label": "g++ build active file", "command": "/usr/bin/g++", "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"], ...
2021-10-09 09:44:16
121
原创 关于eigen3使用时头文件报错问题
视觉SLAM十四讲书中头文件#include<Eigen/Core>改为#include<eigen3/Eigen/Core>
2021-10-08 21:18:34
1137
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅