视觉SLAM中的对极约束、三角测量、PnP、ICP问题

2023-05-16

转载自:https://blog.csdn.net/lixujie666/article/details/82262513?utm_source=app

视觉SLAM中的对极约束三角测量PnP、ICP问题

分类专栏: slam

版权

这篇博客是在学习高翔《视觉SLAM十四讲》过程中对计算机视觉的多视图几何相关知识点做的总结,个人觉得这部分内容比较难,有理解不对的地方请指正!

〇、ORB特征点

对于特征点法的SLAM来说,ORB(Oriented FAST and Rotated BRIEF)特征应该是目前最合适的特征点了。ORB与SIFT、SURF之间的性能对比如下:

  • 计算速度:ORB >> SURF >> SIFT(各差一个量级)
  • 旋转鲁棒性:SURF > ORB ~ SIFT
  • 模糊鲁棒性:SURF >ORB ~ SIFT
  • 尺度变换鲁棒性:SURF > SIFT > ORB(ORB算法在尺度方面效果较差)

特征点由关键点和描述子两部分组成,对于ORB特征点来说,它使用的是FAST关键点+BRIEF描述子。

FAST是一种角点,主要检测局部像素灰度变化明显的地方,以速度快著称。但FAST角点本身并不具有尺度和方向信息,针对这一问题,ORB算法通过构建图像金字塔,并在金字塔的每一层上检测角点来实现FAST的尺度不变性;用灰度质心法来实现FAST的旋转不变性。在ORB中,将这种可以描述角点尺度与旋转特性的FAST称为Oriented FAST。

BRIEF是一种二进制描述子,为关键点添加描述子的作用是为了实现图像之间的特征匹配。BRIEF使用了随机选点的比较,速度非常快,而且由于使用了二进制表达,存储起来也十分方便。但原始的BRIEF描述子不具有旋转不变性,图像发生旋转时容易丢失,针对这一问题,ORB算法利用在FAST角点提取阶段计算出的关键点方向信息,使BRIEF具有了较好的旋转不变性。

有了ORB特征点,我们需要用它来做图像间的特征匹配。所谓特征匹配,就是比较特征点的相似度,这个相似度通过它们的描述子来计算。对于BRIEF这种二进制的描述子,通常使用汉明距离(Hamming distance)来度量两个特征点之间的相似程度。汉明距离是指两个长度相等的字符串之间不同数据位的个数,例如:两个8位的二进制串00110100与10110100,它们之间只有第一个数据位不同,所以它们的汉明距离为1。在ORB的特征匹配中,汉明距离越小,特征点的相似度越高,在某种程度上,我们可以认为两个特征点在两帧图像中为同一个点,即完成了特征匹配。

特征匹配在视觉SLAM中真的是至关重要的一步,设想一下,假如每一帧图像都能实现100%的正确匹配,那我们就不再需要各种令人头疼的滤波、优化、回环检测等等,这将是一个多么美好的画面啊啊啊。。。但,现实告诉你,绝大部分的图像之间是不可能做到100%正确匹配的,所以说,SLAM的主要工作在后端,就是如何利用不准确的数据估计得到准确的结果。

当然,下面总结的在视觉SLAM中经常用到的,非常重要的,Multiple View Geometry in Computer Vision中的,比较难以理解又容易混淆的几个算法,都是在理想的特征匹配结果之上推导出来的。

一、对极几何

对极几何(Epipolar geometry)又叫对极约束,是根据图像二维平面信息来估计单目相机帧间运动或双目相机相对位姿关系的一种算法。直观来讲,当相机在两个不同视角对同一物体进行拍摄时,物体在两幅图像中的成像肯定会有不同,那么,根据这两幅不同的图像,我们如何判断出相机的位姿发生了怎样的变化,这正是对极几何要解决的问题。

需要明确的是,在对极几何中,我们的已知条件仅仅是每幅图像中特征点的像素坐标,当然,计算对极约束的前提是我们必须知道两幅图像中特征点之间准确的匹配关系。
  在这里插入图片描述
在这里插入图片描述
对极几何存在的问题:根据对极约束求解得到的相机旋转运动RRR是准确的,平移运动ttt是不具备真实尺度的。

二、三角测量

三角测量(Triangulation)又叫三角化,是根据前后两帧图像中匹配到的特征点像素坐标以及两帧之间的相机运动RRR、ttt,计算特征点三维空间坐标的一种算法。直观来讲,当有两个相对位置已知的相机同时拍摄到同一物体时,如何根据两幅图像中的信息估计出物体的实际位姿,即通过三角化获得二维图像上对应点的三维结构,这正是三角测量要解决的问题。
在这里插入图片描述
在这里插入图片描述

三、PnP问题

PnP(Perspective-n-Point)是根据图像中特征点的二维像素坐标及其对应的三维空间坐标,来估计相机在参考坐标系中位姿的一类算法。直观来讲,当相机观察到空间中的某一物体时,我们已经知道了该物体在某一参考坐标系下的位置和姿态,那么如何通过图片中物体的成像判断出相机此时在参考坐标系下的位姿?这正是PnP要解决的问题,即利用已知三维结构与图像的对应关系求解相机与参考坐标系的相对关系(相机的外参)。

PnP是一类问题,针对不同的情况有不同的解法,常见的算法有:P3P、DLS、EPnP、UPnP等。
在这里插入图片描述在这里插入图片描述
四、ICP问题
  ICP(Iterative Closest Point)是根据前后两帧图像中匹配好的特征点在相机坐标系下的三维坐标,求解相机帧间运动的一种算法。直观来讲,当相机在某处观察某一物体时,我们知道了相机此时与物体之间的相对位姿关系;当相机运动到另一处,我们亦知道此时相机与物体的相对位姿关系,那么,如何通过这两次相机与物体的相对位姿关系来确定相机发生了怎样的运动?这正是ICP要解决的问题。

在ICP问题中,图像信息仅仅用来做特征点的匹配,而并不参与视图几何的运算。也就是说,ICP问题的求解用不到相机的内参与特征点的像素坐标。
  在这里插入图片描述
在这里插入图片描述
五、总结
1、对极几何(2D-2D)利用两帧图像中nnn对特征点的二维像素坐标,估计相机的相对运动RRR、ttt,它一般只在单目SLAM初始化的时候用到。
2、三角测量利用两帧图像中匹配特征点的像素坐标以及两个相机之间的相对位姿,估计特征点的三维空间坐标,这在单目以及双目(多目)的SLAM中都非常重要。
3、PnP(2D-3D)利用图像中nnn对特征点的二维像素坐标和与之对应的三维空间坐标,估计相机在空间的位置和姿态,是最重要的一种位姿估计方法。
4、ICP(3D-3D)利用nnn对特征点在不同相机坐标系下的三维坐标,估计相机之间的相对位姿,适用于RGB-D SLAM和激光SLAM(从原理上来说)。
5、以上种种,要想得到正确的结果,前提是准确的特征匹配以及理想的相机内参(包括针孔模型参数和畸变参数)。然而事实上,我们得到的往往是有误差或者有噪声的结果,所以通常称前面的工作为前端,因为后面还有很多事情要做,那就是后端的优化——从混乱中找寻真理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

视觉SLAM中的对极约束、三角测量、PnP、ICP问题 的相关文章

  • vscode_c++_slambook 编译配置

    工作目录 配置文件 launch json version 0 2 0 configurations name slamBook程序调试 type cppdbg request launch program fileDirname buil
  • Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据 --SLAM不学无术小问题

    Ubuntu18 04 安装速腾聚创最新驱动RSLidar SDK采集XYZIRT格式的激光点云数据 新款驱动支持RS16 RS32 RSBP RS128 RS80 RSM1 B3 RSHELIOS等型号 注意 该教程旨在引导安装 可能现在
  • 基于深度相机的三维重建技术

    本文转载自http www bugevr com zblog id 14 原创作者bugeadmin 转载至我的博客 主要是为了备份 日后查找方便 谢谢原创作者的分享 三维重建 3D Reconstruction 技术一直是计算机图形学和计
  • 【SLAM】卡尔曼滤波(Kalman Filter)

    卡尔曼滤波 Kalman filter 一种利用线性系统状态方程 通过系统输入输出观测数据 对系统状态进行最优估计的算法 由于观测数据中包括系统中的噪声和干扰的影响 所以最优估计也可看作是滤波过程 卡尔曼滤波器的原理解释如下 首先 我们先要
  • 【大一立项】如何亲手搭建ROS小车:硬件和软件介绍

    本次博客将详细介绍上篇博客中提到的ROS小车的硬件和软件部分 由于十一实验室不开门 所以部分代码还没有上传到Github 下位机 下位机使用Arduino 因为大一上刚学完用Arduino做循迹小车 其实Arduino作为ROS小车的下位机
  • Sophus使用记录

    sophus库是一个基于Eigen的C 李群李代数库 可以用来方便地进行李群李代数的运算 头文件 主要用到以下两个头文件 include
  • SLAM评估工具evo的使用

    evo官方指南 参考博客 lt 官方手册 这篇参考博客 完全可以掌握evo的基本操作 gt Then 实践出真知 1 安装evo sudo apt install python pip pip install evo upgrade no
  • 对最小二乘法的一点理解 - slam学习笔记

    我对最小二乘法的理解 在给定参数个数和函数模型之后 根据测试数据 找出与所有测试数据的偏差的平方和最小的参数 这里面应该有两个问题 1 为什么选取与真实数据平方和最小的拟合函数 2 如何求参数 为什么选取与真实数据平方和最小的拟合函数 极大
  • 视觉SLAM漫谈(二):图优化理论与g2o的使用

    视觉SLAM漫谈 二 图优化理论与g2o的使用 1 前言以及回顾 各位朋友 自从上一篇 视觉SLAM漫谈 写成以来已经有一段时间了 我收到几位热心读者的邮件 有的希望我介绍一下当前视觉SLAM程序的实用程度 更多的人希望了解一下前文提到的g
  • 深度相机Kinect2.0三维点云拼接实验(一)

    文章目录 摘要 Kinect2 0简介 工作原理 RGB相机成像原理 深度相机成像原理 总结 参考文献 摘要 Kinect2 0是微软推出的一款RGB D相机 它即支持普通相机的拍摄 也支持脉冲测量深度信息 本系列文章基于该传感器给出基本的
  • 图像匹配算法

    图像匹配算法分为3类 基于灰度的匹配算法 基于特征的匹配算法 基于关系的匹配算法 1 基于灰度的模板匹配算法 模板匹配 Blocking Matching 是根据已知模板图像到另一幅图像中寻找与模板图像相似的子图像 基于灰度的匹配算法也称作
  • 激光SLAM7-基于已知位姿的构图算法

    1 通过覆盖栅格建图算法进行栅格地图的构建 1 1 Theory 1 2 code 这里没有判断idx和hitPtIndex是否有效 start of TODO 对对应的map的cell信息进行更新 1 2 3题内容 GridIndex h
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • 高斯牛顿法求非线性最小二乘的步骤和c++代码实现

    slam图优化的本质是一个非线性优化问题 Gauss Newton求解步骤 1 线性化误差函数 2 构建线性系统 3 求解线性系统 4 更新解 并不断迭代直至收敛 一个简单的代码实现 一维参数xy 高维变为对应的矩阵即可 include
  • ORB-SLAM2:基于可识别特征的自主导航与地图构建

    目录 ORB SLAM2 基于可识别特征的自主导航与地图构建 简介 地图 A 地图特征点或3D ORB B 关键帧 C 可视化图像 位置识别 A 图像识别数据库 B 高效优化的ORB匹配 C 视觉一致性 自主导航追踪 A ORB特征获取 B
  • LeGO-LOAM代码详细注释版

    学习LeGO LOAM时 写的代码注释github代码链接 一部分注释来自github用户wykxwyc 一部分来自网上查阅 还有一部分是自己的理解 持续更新中
  • 快看!那个学vSLAM的上吊了! —— (一)综述

    不同于之前发布的文章 我将使用一种全新的方式 iPad Notability Blog的方式打开这个板块的大门 原因有两个 1 Notability更方便手写长公式 也方便手绘坐标系变换等等 2 之前Apple Pencil找不到了新破费买
  • SLAM练习题(十一)—— G2O实战

    SLAM 学习笔记 写在前面的话 算是一点小小的感悟吧 估计位姿的方法有线性方法和非线性方法 线性方法就是特征点法中的2D 2D的对极约束 3D 2D的PnP问题 非线性方法有BA优化 它将位姿的估计问题转换成了一个误差关于优化量的最小二乘
  • 高翔博士Faster-LIO论文和算法解析

    说明 题目 Faster LIO 快速激光IMU里程计 参考链接 Faster LIO 快速激光IMU里程计 iVox Faster Lio 智行者高博团队开源的增量式稀疏体素结构 Faster Lio是高翔博士在Fast系列的新作 对标基
  • 非 NP 完全的 NP 困难问题更难?

    根据我的理解 所有 NP 完全问题都是 NP 困难问题 但已知某些 NP 困难问题不是 NP 完全问题 并且 NP 困难问题至少与 NP 完全问题一样困难 这是否意味着非 NP 完全的 NP 困难问题更难 以及如何更难 要回答这个问题 首先

随机推荐