视觉SLAM十四讲 第五讲 相机和图像共21页
视觉SLAM:从理论到实践特征点法视觉里程计

2. 2D-2D 对极几何
• 小结 • 2D-2D情况下,只知道图像坐标之间的对应关系
• 当特征点在平面上时(例如俯视或仰视),使用H恢复R,t • 否则,使用E或F恢复R,t • t 没有尺度
• 求得R,t后:
• 利用三角化计算特征点的3D位置(即深度)
• 实际中用于单目SLAM的初始化部分
3. 3D-2D PnP
• 利用非线性优化可以将ICP与PnP结合在一起求解。
5. 三角化与深度估计
5. 三角化与深度估计
• 已知运动时,求解特征点的3D位置 • 几何关系: • 求 ������2 时,两侧乘 ������1∧
• 反之亦然
• 或者同时解 ������1, ������2 :
•求
−������������2, ������1
• 雅可比的形式?
P’为P在相机坐标系下的坐标:
第一项:
对P’进行投影:
3. 3D-2D PnP
• 第二项: • 非齐次形式: • 两项相乘:
3. 3D-2D PnP
• 也可以对3D点求导:
1 ������������ = ������������ − ������������ ������exp
������1 ������2
= ������
的最小二乘解 ������ = ������������������ −1������������������
5. 三角化与深度估计
• 三角化中的问题:
• 解得深度的质量与平移相关
• 但是平移大时特征匹配可能不成功
• 方程
−������������2, ������1
• 最少可使用五个点计算R,t,称为五点法
视觉SLAM

用形式更简单的 E 。
三角测量确定深度
• 在得到运动之后,下一步我们需要用相机的运动估计特征点的空间位置。在单目 SLAM 中,仅通过单张图 像无法获得像素的深度信息,我们需要通过三角测量( Triangulation )(或三角化)的方法来估计地图点
回环检测
• 回环检测,又称闭环检测( Loop Closure Detection ),主要解决位置 估计随时间漂移的问题。 • 前端提供特征点的提取和轨迹、地图的初值,而后端负责对这所有的数据
进行优化。然而,如果像 VO 那样仅考虑相邻时间上的关联,那么,之前
产生的误差将不可避免地累计到下一个时刻,使得整个 SLAM 会出现累积 误差。长期估计的结果将不可靠,或者说,我们无法构建全局一致的轨迹
用对极几何恢复出在两帧之间摄像机的运动
• 现在,假设我们从两张图像中,得到了一对配对好的特征点,像图 7-7 里显示的那样。如果我们有若 干对这样的匹配点,就可以通过这些二维图像点的对应关系,恢复出在两帧之间摄像机的运动。
• 1. 根据配对点的像素位置,求出 E 或者 F ;
• 2. 根据 E 或者 F ,求出 R, t 。由于 E 和 F 只相差了相机
视觉 SLAM
蔺志强 苏 敬
• SLAM 是 Simultaneous Lo“同时定位与地图构
建”。它是指搭载特定传感器的主体,在没有环 境先验信息的情况下,于运动过程中建立环境的 模型,同时估计自己的运动。如果这里的传感器 主要为相机,那就称为“视觉 SLAM ”。
和地图。
核心问题是如何计算图像间的相似性
• 最简单的方式就是对任意两张图像都做一遍特征匹配,根据正确匹配的数量确定哪两个图像存在关联。但 计算量大,效率低下。 • 基于里程计的几何关系( Odometry based ), • 基于外观( Appearanc e based )仅根据两张图像的相似性确定回环检测关系,这种做法摆脱了累计误差, 使回环检测模块成为 SLAM 系统中一个相对独立的模块。
【视觉SLAM十四讲】直接法视觉里程计

2 LK 光流(5分,约3小时)2.1光流文献综述(1分)我们课上演示了Lucas-Kanade 稀疏光流,用OpenCV 函数实现了光流法追踪特征点。
实际上,光流法有很长时间的研究历史,直到现在人们还在尝试用Deeplearning 等方法对光流进行改进[1,2]。
本题将指导你完成基于Gauss-Newton 的金字塔光流法。
首先,请阅读文献[3](paper 目录下提供了pdf ),回答下列问题。
问题:1. 按此文的分类,光流法可分为哪几类?答:作者在文中对光流法按照两种不同的方法进行分类。
➢ 按照估计的是参数的叠加增量还是增量Warp 将光流法分为叠加(additional)和组合(compositional)算法➢ 按照Warp 更新规则可以将光流法分为前向(forward )和逆向/反向(inverse)两种算法综上:可以分4类,分别是 FA(Forward Additional), FC(Forward Composition), (Inverse Additional) 和 IC(Inverse Compositional)。
2. 在compositional 中,为什么有时候需要做原始图像的wrap ?该wrap 有何物理意义?答: 与Lucas-Kanade 算法中那样简单地将迭代的更新 p ∆添加到当前估计的参数p 不同,组合(compositional )算法中,对扭曲();W x p ∆的增量更新必须由Warp 的当前估计组成() ;Wx p 。
这两个 warp 的组合可能更复杂。
因此,我们对 warp 集合有两个要求: 1)warp 集合必须包含 identity warp 。
2)warp 集合必须在组合运算中闭合。
需要在当前位姿估计之前引入增量式 warp (incremental warp )以建立半群约束要求(the semi-group requirement )。
机器人SLAM技术及其ROS系统应用教学课件第五章

n
R
R
t
状态更新方程为:
fv
rW new
qWR new
vW new
R new
rW vW V W t
qWR q ( R R )t
vW V W
R R
通过雅可比矩阵计算得到过程噪声协方差 Qv :
Qv
fv n
Pn
fv n
T
5、主动特征测量与地图更新
相机的位置: 图像中特征的位置:
2、局部建图线程
(1)关键帧插入 (2)地图点云筛选 (3)新地图点云创建 (4)局部BA (5)局部关键帧筛选
3、闭环检测
(1)候选关键帧 (2)计算相似变换 (3)回环融合 (4)本征图优化
ORB-SLAM2主要模块
4、单目、双目近处和双目远处特征点
▪ORB-SLAM2直接对输入图像进行预处理,提取一些关键位置上的特征,输入图像直接被弃用 ▪ ORB-SLAM2能处理单目或者双目特征点,进一步分成远处特征点和近处特征点两类。
3、系统初始化
在单目相机SLAM算法中,初始化时通常在相机前面放置一个已知物体作为先验信息 ●在单目相机SLAM中,没有直接的方法来测量特征深度或里程信息 ●初始化时,已知特征信息可有助于直接进入预测、测量、更新的模式
4、运动模型和预测
MonoSLAM采用恒定速度、恒定角速度模型
噪声为:
V W aW t
y pi
riW hˆiW
7、地图管理
●对地图中特征数量的管理,需要动态地决定何时应该识别和初始化新特征,何时需要删除某个特征。 ●使从任何相机位置所可见的可靠特征的数量接近预定值 ●只有当相机经过的区域中可见的特征数量小于阈值时,才会将特征添加到地图中
SLAM入门之视觉里程计(6):相机标定张正友经典标定法详解

SLAM ⼊门之视觉⾥程计(6):相机标定张正友经典标定法详解想要从⼆维图像中获取到场景的三维信息,相机的内参数是必须的,在SLAM 中,相机通常是提前标定好的。
张正友于1998年在论⽂:"A Flexible New Technique fro Camera Calibration"提出了基于单平⾯棋盘格的相机标定⽅法。
该⽅法介于传统的标定⽅法和⾃标定⽅法之间,使⽤简单实⽤性强,有以下优点:不需要额外的器材,⼀张打印的棋盘格即可。
标定简单,相机和标定板可以任意放置。
标定的精度⾼。
相机的内参数设P =(X ,Y ,Z )为场景中的⼀点,在针孔相机模型中,其要经过以下⼏个变换,最终变为⼆维图像上的像点p =(µ,ν):1. 将P 从世界坐标系通过刚体变换(旋转和平移)变换到相机坐标系,这个变换过程使⽤的是相机间的相对位姿,也就是相机的外参数。
2. 从相机坐标系,通过透视投影变换到相机的成像平⾯上的像点p =(x ,y )。
3. 将像点p 从成像坐标系,通过缩放和平移变换到像素坐标系上点p =(µ,ν)。
相机将场景中的三维点变换为图像中的⼆维点,也就是各个坐标系变换的组合,可将上⾯的变换过程整理为矩阵相乘的形式:s µν1=α0c x 0βc y1f 0000f 0001R t 0T1X Y Z1=f x 0c x 00f yc y 001Rt 0T1X Y Z1将矩阵K 称为相机的内参数,K =f x0c x 0f yc y 001其中,α,β表⽰图像上单位距离上像素的个数,则f x =αf ,f y =βf 将相机的焦距f 变换为在x,y ⽅向上像素度量表⽰。
另外,为了不失⼀般性,可以在相机的内参矩阵上添加⼀个扭曲参数γ,该参数⽤来表⽰像素坐标系两个坐标轴的扭曲。
则内参数K 变为K =f xγc x 0f yc y 01对于⼤多数标准相机来说,可将扭曲参数γ设为0. Multiple View Geometry in Computer Vision张⽒标定法在上⼀篇博⽂,介绍的单应矩阵表⽰两个平⾯间的映射。
视觉SLAM十四讲——特征提取和匹配

视觉SLAM⼗四讲——特征提取和匹配主要内容1. 常⽤的特征提取的⽅法:SIFT SURF ORB 其中,SIFT(尺度不变特征变换,Scale-Invariant Feature Transform)最为经典,充分考虑了相机的运动,光照变化,以及尺度和旋转变化,但需要较⼤的计算量, 在普通pc cpu上⽆法实时计算SIFT特征进⾏定位与建图 考虑适当减低精度和健壮性,减⼩计算量,如下两种: FAST关键点:没有描述⼦ ORB (Oriented FAST and Rotated BRIEF): 改进了FAST检测⼦不具有⽅向性的问题,并采⽤速度极快的⼆进制描述⼦BRIEF。
2. ORB特征——FAST关键点 1)选取周围半径为3的圆上的像素点,检测连续超过本像素点正负p%门限的像素点个数,根据个数分别为FAST-9, FAST-11, FAST-12。
2)预处理,排除⾮⾓点像素,增加处理速度 3)避免⾓点集中,采⽤⾮极⼤值抑制,在⼀定区域仅保留响应极⼤值的⾓点 4)提取最终的⾓点数量N,选取前N个最⼤响应值5)尺度不变性:构建图像⾦字塔 6)旋转:灰度质⼼法3. ORB特征——BRIEF描述⼦ 4. 特征匹配 计算所有特征点描述⼦距离,表征了特征点的相似程度 (采⽤不同的距离度量范数,浮点型描述⼦-欧⽒距离,⼆进制描述⼦-汉明距离) 匹配算法: 快速近似最近邻(FLANN)5. 正确匹配筛选的依据:汉明距离⼩于最⼩距离的两倍,⼯程上的经验⽅法 在后⾯的运动估计中,还需要使⽤去除误匹配的算法参考链接代码#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/features2d/features2d.hpp>#include <opencv2/highgui/highgui.hpp>using namespace std;using namespace cv;int main ( int argc, char** argv ){if ( argc != 3 ){cout<<"usage: feature_extraction img1 img2"<<endl;return1;}//-- 读取图像Mat img_1 = imread ( argv[1], CV_LOAD_IMAGE_COLOR );Mat img_2 = imread ( argv[2], CV_LOAD_IMAGE_COLOR );//-- 初始化std::vector<KeyPoint> keypoints_1, keypoints_2;Mat descriptors_1, descriptors_2;Ptr<FeatureDetector> detector = ORB::create();Ptr<DescriptorExtractor> descriptor = ORB::create();// Ptr<FeatureDetector> detector = FeatureDetector::create(detector_name);// Ptr<DescriptorExtractor> descriptor = DescriptorExtractor::create(descriptor_name);Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create ( "BruteForce-Hamming" );//-- 第⼀步:检测 Oriented FAST ⾓点位置detector->detect ( img_1,keypoints_1 );detector->detect ( img_2,keypoints_2 );//-- 第⼆步:根据⾓点位置计算 BRIEF 描述⼦descriptor->compute ( img_1, keypoints_1, descriptors_1 );descriptor->compute ( img_2, keypoints_2, descriptors_2 );Mat outimg1;drawKeypoints( img_1, keypoints_1, outimg1, Scalar::all(-1), DrawMatchesFlags::DEFAULT );imshow("ORB特征点",outimg1); imwrite ("ORB_Feature.png", outimg1);//-- 第三步:对两幅图像中的BRIEF描述⼦进⾏匹配,使⽤ Hamming 距离vector<DMatch> matches;//BFMatcher matcher ( NORM_HAMMING );matcher->match ( descriptors_1, descriptors_2, matches );//-- 第四步:匹配点对筛选double min_dist=10000, max_dist=0;//找出所有匹配之间的最⼩距离和最⼤距离, 即是最相似的和最不相似的两组点之间的距离for ( int i = 0; i < descriptors_1.rows; i++ ){double dist = matches[i].distance;if ( dist < min_dist ) min_dist = dist;if ( dist > max_dist ) max_dist = dist;}// 仅供娱乐的写法min_dist = min_element( matches.begin(), matches.end(), [](const DMatch& m1, const DMatch& m2) {return m1.distance<m2.distance;} )->distance; max_dist = max_element( matches.begin(), matches.end(), [](const DMatch& m1, const DMatch& m2) {return m1.distance<m2.distance;} )->distance; printf ( "-- Max dist : %f \n", max_dist );printf ( "-- Min dist : %f \n", min_dist );//当描述⼦之间的距离⼤于两倍的最⼩距离时,即认为匹配有误.但有时候最⼩距离会⾮常⼩,设置⼀个经验值30作为下限.std::vector< DMatch > good_matches;for ( int i = 0; i < descriptors_1.rows; i++ ){if ( matches[i].distance <= max ( 2*min_dist, 30.0 ) ){good_matches.push_back ( matches[i] );}}//-- 第五步:绘制匹配结果Mat img_match;Mat img_goodmatch;drawMatches ( img_1, keypoints_1, img_2, keypoints_2, matches, img_match );drawMatches ( img_1, keypoints_1, img_2, keypoints_2, good_matches, img_goodmatch );imshow ( "所有匹配点对", img_match );imshow ( "优化后匹配点对", img_goodmatch ); // 保存图像imwrite ("all_feature_matching.png", img_match);imwrite ("good_feature_matching.png", img_goodmatch);waitKey(0);return0;}结果输出。
视觉SLAM综述

通过基于光束平差法 ( Bundle Adjustment,BA) 的图优化理论估计相机的 位姿和地图点坐标,大大 提高了 SLAM 的精度。
目前,基于关键帧的VSLAM成为主流算法。最具代表性的有 两种: 一种是 LSD-SLAM [6] ,属于半稠密的单目的 VSLAM; 一 种是 ORB-SLAM [7,8] ,属于稀疏的 VSLAM。
3、稠密VSLAM
为了降低稠密地图的计算量,Engel J[12,13]提出了半稠 密地图(semi-direct visual odometry,SVO),通过结 合关键点的思想和直接配准的方法,大大降低了计算复 杂度。目前最先进的SVO就是Engel J等提出的LSDSLAM[13],已经能在CPU上实现了实时性。
什么是SLAM?
SLAM问题可以描述为: 机器人在未知环境中从一个未知 位置开始移动,在移动过程中根据位置估计和地图进行 自身定位,同时在自身定位的基础上建造增量式地图, 实现机器人的自主定位和导航。
(1)定位(localization):机器人必须知道自己在环境中位 置。 (2)建图(mapping):机器人必须记录环境中特征的位置 (如果知道自己的位置)
后端图优化流程
2.3 后端优化
2.4 建图
在经典的VSLAM模型中,所谓的建图,即找到所有路标 点,这些路标点的集合即是最终的地图,一旦确定了路 标点的位置,即可以说完成了建图。地图类型分为栅格 地图,拓扑地图,特征地图和混合地图。根据建图需求 不同,可以将建图用途分为两类:
定位:把地图下来,机器人下次开机后仍然能在地图上 定位,不需要再次建模,此类地图,稀疏地图即可完成。
1.2 地图的稠密程度
移动机器人SLAM技术【ch07】视觉SLAM 教学课件

0 2 对极几何
假设两张图像中得到了一对配对好的特征点,对极几何如图7.8所示,若能够得到多 个匹配好的点,则可实现运动轨迹的推测。
如果没有特征点匹配,我们就没法确定p?到底在极线的哪个位置了。那时, 就必须在极线上搜索以获得正确的匹配。
0 2 对极几何
现在,我们从代数角度来看一下这里出现的几何关系。在第一帧的坐标系下,设P的空间位置为 两个像素点p、p?的像素位置为
除了使用线性方法,我们还可以把PnP问题构建成一个定义于李代数上的非线性最 小二乘问题。前面说的线性方法,往往要先求相机位姿,再求空间点位置,而非 线性优化则把它们都看成优化变量,放在一起优化。
02 3D-2D·PnP
考虑n个三维空间点P和它们的投影p,我们希望计算相机的位姿R、t,其李代数表 示为。假设某空间点的坐标为F=[X,,Y,Z,],其投影的像素坐标为μ=[x,,y]],那么 可得像素位置与空间点位置的关系如下:
02
PART ONE
视觉前端——视觉里程计
Hale Waihona Puke 02视觉里程计 7.2.1视觉里程计的数学模型
视觉里程计关心相邻图像之间的相机运动,最简单的情况当然是两张图像 之间的运动 关系。在计算机视觉领域,人类在直觉上看来十分自然的事情,在计算机 视觉中却非常困 难。图像在计算机里只是一个数值矩阵,而在视觉SLAM中,我们只能看到 一个个像素, 知道它们是某些空间点在相机的成像平面上投影的结果。所以,为了定量 地估计相机运动, 必须在了解相机与空间点的几何关系之后进行。
第七章 视觉SLAM
高等院校公共课系列精品教材
大学生礼仪
01
PART ONE
视觉SLAM概述
01视觉SLAM的糖念与框架
计算机视觉技术中的视觉SLAM方法

计算机视觉技术中的视觉SLAM方法计算机视觉技术中的视觉SLAM(Simultaneous Localization and Mapping)是一种重要的技术手段,用于实现机器或无人系统在未知环境中的自主定位和建图。
视觉SLAM方法通过分析场景中的图像或视频流,提取出关键的视觉特征,并通过特征匹配、视觉里程计、重建和优化等步骤,实现对环境的定位和地图的构建。
视觉SLAM方法有着广泛的应用,如无人飞行器、自动驾驶汽车、增强现实等领域。
在这些应用中,视觉SLAM能够帮助机器或系统在未知环境中实现自主导航和场景理解,提高其感知能力和操作能力。
视觉SLAM方法主要可以分为稀疏SLAM和稠密SLAM两大类。
稀疏SLAM方法采用基于特征的方法,即通过提取场景中的显著特征点或关键帧进行定位和建图。
典型的算法有基于滤波的扩展卡尔曼滤波(EKF-SLAM)和基于优化的非线性后端优化(BA)等方法。
扩展卡尔曼滤波是最早提出并应用于SLAM问题的方法之一。
它基于线性化的状态空间模型,通过滤波器进行状态估计和地图更新,但在处理大规模、复杂环境时存在计算效率低和不稳定的问题。
非线性后端优化方法是基于图优化理论的方法,通过最小化误差函数对状态和地图进行联合优化,可以得到更准确的定位和地图。
典型的算法有基于因子图的优化(GTSAM)和基于位姿图的优化(Pose Graph Optimization)等方法。
稠密SLAM方法则采用光流法或深度学习方法,通过计算相邻帧之间的像素位移或深度信息,实现对环境的精确建模。
典型的算法有基于基础矩阵的方法(例如,八点法、五点法)和基于深度学习的全局优化方法(例如,地图拼接网络、深度光度法)等。
八点法是基础矩阵计算中最简单常见的算法之一,通过至少通过八对对应点对计算出两帧之间的基础矩阵,从而实现相机运动的估计和地图的重建。
八点法基于线性方程组的求解,具有计算效率高的优势,但对输入数据质量和数量有一定要求。
机器视觉第五讲-射影几何基础及摄影机定标

前期回顾:视觉三要素•光•物体•人成像和处理装置基于PC的机器视觉系统示意图像表象及以外的信息如何处理一个视觉任务•辨别任务特征•确定方法•实验和分析❝任务特征是什么?❝如何考虑光源?❝如何考虑系统精度?字符识别讨论❝需要哪些步骤处理?❝有干扰怎么办?前期回顾•边缘检测的目的和步骤–突出边缘–滤波→增强→检测射影几何基础人类视觉构造角膜、巩膜;脉络膜、睫状体、虹膜视网膜>黄斑>中央凹锥体细胞-明视觉细胞杆体细胞-暗视觉细胞视网膜=中心直径约6毫米的中央区+周边区;黄斑中央是中央凹(fovea),面积约1平方毫米。
射影几何眼睛:投影中心实物 画布射影几何:研究图形的位置关系直角坐标系和仿射坐标系直角坐标系OE x=OE yOE x⊥OE y仿射坐标系OE x≠OE yOE x、OE y不共面交比不变EI AI EI AO I O E A R x :),,,( 一维与二维射影坐标系1.任何一点坐标由x 轴交比、y 轴交比2.引入无穷远点和无穷远直线无穷远点:理想点 中心投影和平行投影统一yy y y y y y y y y xx x x x x x x x x I E I A I E O A I O E A R y I E I A I E O A I O E A R x :),,,(:),,,(不变量定理•射影变换保持直线,直线与点的接合性以及直线上点列的交比不变。
•仿射变换除具有以上不变性外,还保持直线与直线的平行性、直线上点列的简比不变。
•欧氏变换除具有仿射变换的不变性外,还保持两条相交直线的夹角不变,任意两点的距离不变。
齐次坐标直线上的齐次坐标无穷远点齐次坐标和非齐次坐标•在n 维射影空间中,若某点的非齐次坐标为,则称),,,(21n x x x x 为它的齐次坐标,其中•射影坐标),,,,(121 n n x x x x x 1/ n i i x x x摄影机定标一、基础知识摄像机模型•针眼摄像机–光信息量(以光子为载体)以能量方式经镜头传递给感光材料–暗箱、镜头、感光材料•成像模型:三维空间中的物体到视平面(成像平面)的投影关系针眼相机模型物点:发光点光点(像点):携带了物点的特征,如形状、颜色、光洁度等失真问题:小孔非几何点镜头:光斑分离直线传播小孔成像几何模型ss s s Z Y f y Z X f x ,小孔:投影中心(光学中心)透视投影倒立成像几何示意图焦距x-y-z :固定在摄影机上的直角坐标系z f y y x x x zf x y z f y 最常用的成像模型:所有来自场景的光线都通过一个投影中心(透镜中心)投影轴/光轴:经过投影中心,垂直于成像平面透视投影几何示意图zf y y x x xzfx yzf y视觉系统坐标系•像素坐标:表示图像阵列中图像像素的位置;•图像平面坐标:表示场景点在图像平面上的投影;1m c x 1n c y 21 m j x21n i y•摄象机坐标:即以观察者为中心的坐标,将场景点表示成以观察者为中心的数据形式.(x,y,z)•场景坐标:也称作绝对坐标(或世界坐标),用于表示场景点的绝对坐标;(X,Y,Z)22x s j m x 12y s i n y 12摄影机坐标系和世界坐标系X X X111011w w w w w w Tc c c Z Y M Z Y t R Z Y二、定标定标的基本概念•定义:确定摄像机成像几何模型参数–图像中每一点的亮度反映了空间物体表面对应点反射光的强度–该点在图像上的位置与空间物体表面对应点的几何位置有关摄影机参数:表达上述成像几何变换关系的几何模型的参数•线性摄影机定标(pinhole model)•非线性摄影机定标(计算精度高,广角镜头)与摄像机标定有关的视觉计算任务立体视觉中的摄像机定标:在立体视觉(三维重建)中,一般需要使用两个或更多的摄像机,所以还需要知道各摄像机之间的几何关系机器人手眼定标(手眼坐标转换hand-eye calibration):在机器人视觉中,摄像机一般固定在机器人的末端执行器上(end effector),因此,还需知道摄像机与末端执行器的相对位置机器人的两坐标转换(头眼定标(head-eye calibration)):主动视觉系统中的摄像机平台相当于机器人的末端执行器,其原理同于机器人手眼定标自标定方法:不需要使用标定物线性摄影机定标0v dyy v u dx x u ; u,v: 像素坐标;x,y: 图像坐标,1101001100y x v dy u dx v u110000100v u dy v dy dx u dx y x O 1为原点摄影机坐标系和世界坐标系X X X111011w w w w w w Tc c c Z Y M Z Y t R Z Y透视投影几何示意图zf y y x x xzfx yzf y线性摄影机模型c c Z fX xc fY y0100000001c c c c Z Y X f f y x Z cZ1110010000000010101100w w w T c Z Y X t R ff v dy u dx v u Z110010000000w w w T y x Z Y X t R v a u a ww MX X M M 21M :投影矩阵M 1:内部参数;M 2:外部参数归一化投影关系及坐标•归一化投影关系假定f =10101011c c c 00Z Y X v a u a y xv u Z c •归一化坐标1 1111100v u v a u a y x y xn n ,,ccn c c n Z Y y Z X x线性摄影机定标2423222114131211wi wi wi i i ci Z Y X m m m m m m m m v u Z 如何求解M ?标定参照物1134333231m m m m 14131211m Z m Y m X m u Z wi wi wi i ci 24232221m Z m Y m X m v Z wi wi wi i ci 34333231m Z m Y m X m Z wi wi wi ci 3433323114131211mu m Z u m Y u m X u m m Z m Y m X i wi i wi i wi i wi wi wi 3433323124232221m v m Z u m Y u m X u m m Z m Y m X i wi i wi i wi i wi wi wi 消去Z ci341341242322211413121111111111111111111100001100000001m v m u m m m m m m m m u Z u Y u X u Z Y X Z u Y v X v X X X Z u Y u X u X X X wn n wn n wn n wn wn wn w w w w w w w w w w w w343433323110m v m u m m m Z Y v X v Z Y X n n wn n wnn wnn wnwnwnKm =Um =(K T K)-1K T U问题:需要几个点来定标?M 矩阵乘以任意不为0的常数,不影响投影关系1001000000132100324214134Tz T y Tx T yx T T T t r t r t r v u m m m m m mzT z y y T Ty z x x TT x T T Tt r t v t r v r t u t r u r m m m m m m 30302030132421413413343m m r3123433013300m m m r r u r r r u u T T T x T3223433023300m m m r r v r r r v v T T T y T 31234330131m m m r r u r r r x x x 31234330131m m m r r u r r r x x x 12345 301341m u m m r x302342m v m m r y34m t z 01434u m m t xx02434v m m t yy678910需要注意的问题•M矩阵确定了空间点坐标和对应图像点坐标之间的关系,但其本身没有物理意义。
视觉slam介绍 PPT

3.2 对极几何
• 几何关系:
• P在两个图像的投影为 p 1 , p 2 T 12
• 两个相O 机1 P之间的变换为 e 2 p 2
•
l在2第二个图像上投影为
e1,e2
• 记 ,称为极线,反之亦然
•
p 1 , p 2称为极点
• 实践当T 1中2:
侧重对外在的了解
• 准确的定位需要精确的地图 • 精确的地图来自准确的定位
第一讲 视觉SLAM概述 • How to do SLAM?——Se维码 Marker GPS 导轨、磁条 携带于机器人本体上的 IMU 激光 相机
第一讲 视觉SLAM概述
• 相机 • 以一定速率采集图像,形成视频 • 分类 • 单目 Monocular • 双目 Stereo • 深度 RGBD • 其他 鱼眼 全景 Event Camera, etc.
第一讲 视觉SLAM概述
• 回环检测 • 检测机器人是否回到早先位置 • 识别到达过的场景 • 计算图像间的相似性 • 方法:词袋模型
第一讲 视觉SLAM概述
• 建图 • 用于导航、规划、通讯、
可视化、交互等 • 度量地图 vs 拓扑地图 • 稀疏地图 vs 稠密地图
第二讲 相机与图像 Chapter 2: Cameras and Images
3.1 特征点法
• 特征点:图像当中具有代表性的部分
• 可重复性
• 可区别性
• 高效 • 本地 • 特征点的信息
特征描述应该在光照、视角发生少量变化时 仍能保持一致
• 位置、大小、方向、评分等——关键点
• 特征点周围的图像信息——描述子(Descriptor)
• 主流方法:SIFT/SURF/ORB (OpenCV features2d模块)
视觉SLAM十四讲——LK光流

视觉SLAM⼗四讲——LK光流主要内容 直接法是从光流演变⽽来的。
光流(Optical Flow)描述了像素在图像中的运动,⽽直接法则附带着⼀个相机的运动模型。
1. 定义 描述像素随时间在像素中运动的⽅法,追踪像素在图像中运动。
追踪部分像素或全部像素分为稀疏光流和稠密光流,稀疏光流以Lucas-Kanade光流为代表,可以在SLAM中跟踪特征点的位置。
(避免随时间在两两图像之间进⾏特征点提取匹配,减少计算量,光流本省匹配需要⼀定的时间,跟踪以后可以直接⽤像素坐标信息,使⽤对极⼏何、PnP和ICP算法估计相机运动)2. LK光流 [P186-187] 1)灰度不变假设:同⼀空间点的像素灰度值,在各个图像中是固定不变的。
2) 理论公式:(两个变量的⼀次⽅程) 分别表⽰:在像素点x⽅向的梯度,像素点在x⽅向的运动速度,在像素点y⽅向的梯度,像素点在y⽅向上的梯度,像素点灰度随时间的变化量。
3)在LK光流中,我们假设某⼀个窗⼝内的像素具有相同的运动。
窗⼝⼤⼩w*w,则共有w2个⽅程。
最⼩⼆乘求解(由于像素梯度仅在局部有效,所以如果⼀次迭代不够好,可以多迭代⼏次这个⽅程)3. 光流特点 1)⾓点具有更好的辨识度,边缘次之,区块最少 2)光流法本⾝计算需要⼀定的时间,在具体SLAM系统的应⽤,根据测试进⾏选择 3)LK光流跟踪能够直接得到特征点的对应关系,实际应⽤会出现特征点跟丢的情况,不太会遇到误匹配(相对于描述⼦的⼀点优势) 4)描述⼦匹配在相机运动较⼤时仍能成功,光流必须要求相机运动是微⼩的(采集频率较⾼)。
光流的健壮性相⽐描述⼦差。
4. 代码关键点 1)根据associate.txt匹配时间点的信息,读取图像及深度信息, 2)遍历图像,第⼀幅图像提取FAST的特征点,后继续的图像利⽤光流跟踪这些特征点,删除跟踪失败的特征点 3)光流法函数调⽤: cv::calcOpticalFlowPyrLK (包括参数的调⽤,返回的结果信息等) 4)每⼀帧图像跟踪出来的特征点进⾏显⽰ 5)注意光流跟踪的点数以及光流计算耗费的时间信息参考链接代码#include <iostream>#include <fstream>#include <list>#include <vector>#include <chrono>using namespace std;#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/features2d/features2d.hpp>#include <opencv2/video/tracking.hpp>int main( int argc, char** argv ){if ( argc != 2 ){cout<<"usage: useLK path_to_dataset"<<endl;return1;}string path_to_dataset = argv[1];string associate_file = path_to_dataset + "/associate.txt";ifstream fin( associate_file );if ( !fin ){cerr<<"I cann't find associate.txt!"<<endl;return1;}string rgb_file, depth_file, time_rgb, time_depth;list< cv::Point2f > keypoints; // 因为要删除跟踪失败的点,使⽤listcv::Mat color, depth, last_color;for ( int index=0; index<100; index++ ){fin>>time_rgb>>rgb_file>>time_depth>>depth_file;color = cv::imread( path_to_dataset+"/"+rgb_file );depth = cv::imread( path_to_dataset+"/"+depth_file, -1 );if (index ==0 ){// 对第⼀帧提取FAST特征点vector<cv::KeyPoint> kps;cv::Ptr<cv::FastFeatureDetector> detector = cv::FastFeatureDetector::create();detector->detect( color, kps );for ( auto kp:kps )keypoints.push_back( kp.pt );last_color = color;continue;}if ( color.data==nullptr || depth.data==nullptr )continue;// 对其他帧⽤LK跟踪特征点vector<cv::Point2f> next_keypoints;vector<cv::Point2f> prev_keypoints;for ( auto kp:keypoints )prev_keypoints.push_back(kp);vector<unsigned char> status;vector<float> error;chrono::steady_clock::time_point t1 = chrono::steady_clock::now();cv::calcOpticalFlowPyrLK( last_color, color, prev_keypoints, next_keypoints, status, error );chrono::steady_clock::time_point t2 = chrono::steady_clock::now();chrono::duration<double> time_used = chrono::duration_cast<chrono::duration<double>>( t2-t1 ); cout<<"LK Flow use time:"<<time_used.count()<<" seconds."<<endl;// 把跟丢的点删掉int i=0;for ( auto iter=keypoints.begin(); iter!=keypoints.end(); i++){if ( status[i] == 0 ){iter = keypoints.erase(iter);continue;}*iter = next_keypoints[i];iter++;}cout<<"tracked keypoints: "<<keypoints.size()<<endl;if (keypoints.size() == 0){cout<<"all keypoints are lost."<<endl;break;}// 画出 keypointscv::Mat img_show = color.clone();for ( auto kp:keypoints )cv::circle(img_show, kp, 10, cv::Scalar(0, 240, 0), 1);cv::imshow("corners", img_show);cv::waitKey(0);last_color = color;}return0;}结果及分析LK Flow use time:0.186846 seconds. //t1 ,对应下⾯的第⼀幅图tracked keypoints: 1749LK Flow use time:0.189048 seconds.tracked keypoints: 1742LK Flow use time:0.232017 seconds.tracked keypoints: 1703LK Flow use time:0.17844 seconds.tracked keypoints: 1676LK Flow use time:0.234777 seconds.tracked keypoints: 1664LK Flow use time:0.185145 seconds.tracked keypoints: 1656LK Flow use time:0.186722 seconds.tracked keypoints: 1641LK Flow use time:0.177791 seconds. // t2,对应下⾯的第⼆幅图tracked keypoints: 1634 结果分析: 1)根据输出结果,随着时间,相机姿态发⽣了⽐较⼤的旋转变化,跟踪的特征点数也从1749点下降到1634点; 2)从图中可以看出,随着图像视⾓的旋转,有些特征消失,新进来的特征点⽆法跟踪(可能需要对新进来的该部分特征重新进⾏提取,不然随着⾓度更⼤的时候,特征点可能完全丢失,⽆法进⾏位姿的解算)。
视觉slam的分类

视觉SLAM的分类引言随着计算机视觉和机器人技术的发展,视觉SLAM(Simultaneous Localization and Mapping,即时定位与建图)作为一种重要的感知和导航技术,被广泛应用于自主导航、增强现实、机器人导航等领域。
视觉SLAM通过从视觉传感器获取图像信息,并将其与运动估计算法相结合,实现同时定位机器人的位置和构建环境地图。
在这篇文章中,我们将对视觉SLAM的分类进行全面、详细、完整且深入地探讨。
单目视觉SLAM概述单目视觉SLAM是指仅通过单个摄像头获取的图像信息来实现同时定位和建图的技术。
相对于使用多个传感器的多传感器SLAM来说,单目视觉SLAM更加具有挑战性,因为单个视角往往无法提供足够的几何信息来进行定位和建图。
方法•特征点法:基于特征点的方法是最常用的单目视觉SLAM方法之一。
通常通过提取图像中的关键点,并使用特征描述子来进行特征匹配和跟踪。
同时,该方法也会估计摄像头的运动和三维场景点的位置,以实现定位和建图。
•直接法:直接法是另一种常用的单目视觉SLAM方法。
该方法通过将图像像素值直接用于估计摄像头的运动和场景的深度信息。
与特征点法相比,直接法能够获得更多的几何信息,但该方法对光照变化和纹理稀疏场景比较敏感。
应用•自主导航:单目视觉SLAM可以用于机器人的自主导航。
通过结合图像信息和运动估计,机器人可以实时地感知自身位置和周围环境,从而进行路径规划和避障。
•增强现实:单目视觉SLAM也可以应用于增强现实。
通过追踪相机的运动以及对场景中物体的建模,可以将虚拟对象与真实世界进行融合,使用户能够在现实世界中与虚拟对象进行交互。
双目视觉SLAM概述双目视觉SLAM是指基于双目(左右)摄像头获取的图像信息来实现同时定位和建图的技术。
相对于单目视觉SLAM来说,双目视觉SLAM可以通过摄像头之间的视差来获得更多的三维信息,从而提高定位和建图的精度。
方法•立体匹配法:双目视觉SLAM中最常用的方法是立体匹配法。
视觉slam介绍PPT幻灯片PPT文档共60页

6、法律的基础有两个,而且只有两个……公平和实用。——伯克 7、有两种和平的暴力,那就是法律和礼节。——歌德
8、法律就是秩序,有好的法律才有好的秩序。——亚里士多德 9、上帝把法律和公平凑合在一起,可是人类却把它拆开。——查·科尔顿 10、一切法律都是无用的,因为好人用不着它们,而坏人又不会因为它们而变得规矩起来。——德谟耶克斯
END
Hale Waihona Puke 16、业余生活要有意义,不要越轨。——华盛顿 17、一个人即使已登上顶峰,也仍要自强不息。——罗素·贝克 18、最大的挑战和突破在于用人,而用人最大的突破在于信任人。——马云 19、自己活着,就是为了使别人过得更美好。——雷锋 20、要掌握书,莫被书掌握;要为生而读,莫为读而生。——布尔沃
视觉SLAM技术的研究与应用

视觉SLAM技术的研究与应用视觉SLAM(Simultaneous Localization and Mapping)技术是指基于视觉传感器的同时定位和地图构建技术,是机器人领域中的一个热门研究方向。
它通过从环境中获取图像信息,并利用这些信息实现机器人的自主导航和环境地图的构建,被广泛应用于机器人导航、无人驾驶、增强现实等领域。
本文将介绍视觉SLAM技术的基本原理、常见的方法和应用场景。
1.视觉SLAM技术的基本原理视觉SLAM技术通过从环境中获取图像信息来实现机器人的同时定位和地图构建。
其基本原理是利用图像传感器获取连续图像序列,通过图像序列之间的特征匹配和三维几何信息的计算,实现机器人在未知环境中的定位和构建环境地图。
2.视觉SLAM技术的常见方法(1)基于特征点的方法:该方法首先通过特征提取算法提取图像中的特征点,然后通过特征匹配算法将连续图像序列中的特征点对应起来,根据特征点的几何信息计算机器人的运动轨迹和环境地图。
(2)直接法:该方法通过直接使用图像的灰度值进行匹配,不需要通过特征点的提取和匹配过程,能够更准确地估计相机的运动和环境地图。
(3)半直接法:该方法结合了特征点的方法和直接法的优点,兼具了高精度和实时性。
3.视觉SLAM技术的应用场景(1)无人驾驶:无人驾驶汽车需要实时地感知和理解环境,并根据实时的环境信息进行路径规划和决策。
视觉SLAM技术可以为无人驾驶汽车提供精确的定位和环境地图,从而实现自主导航。
(2)增强现实:增强现实技术利用计算机图形学和计算机视觉技术将虚拟信息叠加到真实世界中,给用户提供丰富的信息和交互体验。
视觉SLAM技术可以实时地跟踪相机的位置,并结合环境地图将虚拟信息精确地叠加到真实世界中。
(3)机器人导航:机器人需要在未知环境中实现自主导航,视觉SLAM技术可以为机器人提供准确的定位和环境地图,使机器人能够避免障碍物、规划路径,并实现自主探索。
4.视觉SLAM技术的研究进展视觉SLAM技术近年来取得了很大的进展,主要表现在以下几个方面:(1)实时性:研究者通过优化算法和硬件设备,提高了视觉SLAM 技术的实时性,使其可以在保持高精度的情况下实现实时地定位和地图构建。
SLAM入门之视觉里程计(2):相机模型(内参数,外参数)

SLAM⼊门之视觉⾥程计(2):相机模型(内参数,外参数)相机成像的过程实际是将真实的三维空间中的三维点映射到成像平⾯(⼆维空间)过程,可以简单的使⽤⼩孔成像模型来描述该过程,以了解成像过程中三维空间到⼆位图像空间的变换过程。
本⽂包含两部分内容,⾸先介绍⼩孔成像模型的各种⼏何关系;接着描述了成像过程中的四种坐标系(像素坐标,图像坐标,相机坐标,世界坐标)的变换关系。
⼩孔成像模型相机可以抽象为最简单的形式:⼀个⼩孔和⼀个成像平⾯,⼩孔位于成像平⾯和真实的三维场景之间,任何来⾃真实世界的光只有通过⼩孔才能到达成像平⾯。
因此,在成像平⾯和通过⼩孔看到的真实三维场景存在着⼀种对应关系,也就是图像中的⼆维像点和真实三维世界的三维点存在某种变换关系。
找到了这种变换关系,就可以利⽤图像中的⼆维点信息来恢复场景的三维信息。
下图是⼩孔成像的模型,为了简化模型,将成像平⾯放在了⼩孔的前⾯,并且成的像也是正⽴的在描述⼩孔的成像过程前,⾸先来定义两个坐标系:相机坐标系(三维坐标系)相机的中⼼被称为焦点或者光⼼,以焦点O_c为原点和坐标轴X_c,Y_c,Z_c组成了相机坐标系图像坐标系(⼆维坐标系)成像平⾯中,以成像平⾯的中⼼O'为原点和坐标轴x',y'组成了图像坐标系。
⼩孔成像实际就是将相机坐标系中的三维点变换到成像平⾯中的图像坐标系中的⼆维点。
假设,三维空间中点P,其在相机坐标系中的坐标是P_c=[X,Y,Z]^T;其像点p,在图像坐标系的中的坐标是p=[x,y]^T,由于光轴垂直与成像平⾯,那么可以知道像点p在相机坐标系中的坐标是p=[x,y,z]^T,其中z =f(f是焦点到成像平⾯之间的距离,被称为焦距)。
由上图根据三⾓形的相似关系,可以得到如下公式:\frac{Z}{f}=\frac{X}{x}=\frac{Y}{y}将上⾯公式整理后可以得到:\left\{ \begin{array}{l} x = f\frac{X}{Z} \\ y = f\frac{Y}{Z} \\ z = f \end{array} \right.上⾯的公式就是⼩孔相机模型的基础公式了,有了此公式可以推导出更详细的⼩孔相机模型的参数:内参数外参数在推导相机的内参数和外参数前,需要先了解下齐次坐标的概念。
视觉SLAM十四讲——对极约束求解相机运动(2D-2D)

视觉SLAM⼗四讲——对极约束求解相机运动(2D-2D)主要内容1. 对极约束 ⼏何意义是,P,三者共⾯,对极约束同时包含了平移和旋转。
基础矩阵: 本质矩阵: 对极约束表⽰: 其中,分别表⽰为相机坐标系下归⼀化的平⾯坐标2. 本质矩阵的特点(3×3) 1)E在不同尺度下是等价的 2) 内在性质:奇异值必定是的形式 3)由于平移+旋转,共有6个⾃由度,但因为尺度等价性,E实际上有5个⾃由度3 本质矩阵求解——⼋点法 1) E的内在性质是⼀种⾮线性性质,在求解线性⽅程时会带来⿇烦,因此不会⽤5对点来求解。
2)未知数共有9个,只考虑尺度等价性,所以⽤8对2D-2D点来求解,线性变换的⽅法。
3)求解矩阵后,进⾏奇异值分解分(SVD),得到运动信息 4)分解的时候,会有4中情况,选取⼀个点进⾏求解,检测该点在两个相机下的深度信息,选取两个正的深度。
5)线性⽅程解可能不满⾜E的内在性质,将求解出来的矩阵投影到E所在的流形上。
4 单应矩阵H 定义与旋转,平移及平⾯的参数有关。
1) ⾃由度为8的单应矩阵可以通过4对匹配点进⾏计算(注意,这些特征点不能有三点共线的情况) 2)求解⽅法:直接线性变换法,对其进⾏分解得到运动信息,分解⽅法有数值法和解析法 4组解,(根据计算点的深度以及平⾯的法向量信息选取合理的解) 3)意义 3.1)描述了两个平⾯之间的映射关系,若所有特征点落在同⼀平⾯,则可以通过H估计运动, 具体应⽤在⽆⼈机携带俯视相机或扫地机器⼈的顶视相机中。
3.2)当特征点共⾯或者相机发⽣纯旋转时,基础矩阵⾃由度下降,H可以估计纯旋转的运动信息。
5. 在实际应⽤,为避免退化现象造成的影响,会同时估计F和H,选择其中重投影误差⽐较⼩的那个作为最终运动的估计结果。
6. 对极⼏何2D-2D的特点 1)尺度不确定性 t归⼀化相当于固定了尺度信息,成为单⽬SLAM的初始化,后⾯的轨迹和地图以此单位进⾏计算。
视觉slam的介绍

•
称为极点
• 实践当中:
•
通过特征匹配得到,P未知,
•
待求(本质矩阵、单应矩阵)
未知
3.3 三角化
• 已知运动时,求解特征点的3D位置 • 几何关系: • 求 时,两侧乘
• 反之亦然
• 或者同时解
•求
的最小二乘解
3.4 PNP
• 已经3D点的空间位置和相机上的投影点, 求相机的旋转和平移(外参)
3.5 光流
• 设 t 时刻位于 x,y 处像素点的灰度值为 • 在 t+dt 时刻,该像素运动到了
• 希望计算运动 dx, dy
• 灰度不变假设: • 注意:灰度不变是一种理想的假设,实际当中由于高光/阴影/材质/曝光等不同,很
可能不成立。
3.5 光流
• 对 t+dt 时刻的灰度进行Taylor展开并保留一阶项:
• 由于灰度不变,所以
• 希望求解dx/dt, dy/dt
因此 =>
x方向梯度
随时间变化
y方向梯度
3.5 光流
• 但本式是一个二元一次线性方程,欠定
• 需要引用额外的约束
• 假定一个窗口(w ´ w)内光度不变:
• 通过超定最小二乘解求得运动 u,v
3.5 光流
最后,我们可以通过光流跟踪的特征的,用PnP、ICP或对极几何来估计 相机运动。总而言之,光流法可以加速基于特征点的视觉里程计算法,避免计 算和匹配描述子的过程,但要求相机运动较慢(或采集频率较高)。
• 相机
• 以一定速率采集图像,形成视频
• 分类
• 单目 Monocular • 双目 Stereo • 深度 RGBD • 其他 鱼眼 全景 Event Camera, etc.