SLAM中多目三角化

2023-05-16

多目三角化

  • 1、闭式求解
    • 1.1 DLT 最小二乘方法求解
    • 1.2 最小化3D距离
  • 2、构建优化方法求解
  • 3、构建高斯深度滤波器 LSD_SLAM
  • 4、构建Beta分布滤波器-- SVO
  • 5、EKF-SLAM
  • 参考资料

在能实现双目计算特征点的深度基础上,考虑,如果这个3D点有大于两个以上的观测值该怎么样估计出最准确的深度。

1、闭式求解

1.1 DLT 最小二乘方法求解

设特征点齐次坐标 x x x ,在第 j 个相机的图像观测点齐次坐标为 z j = ( u j , v j , 1 ) z_j=(u_j,v_j,1) zj=(uj,vj,1),投影矩阵为 P j = K [ R j t j ] P_j=K[R_j t_j] Pj=K[Rjtj] ,投影模型如下:
在这里插入图片描述
从上一篇博客中,我们可以得到DLT方法中每次观测可以提供两个约束条件,即每个相机观测有两个线性方程。
在这里插入图片描述
将M个相机观测的约束方程合并得到 2M个线性方程:
在这里插入图片描述
因此有形式AX=0。
在这里插入图片描述
当存在外点(错误的匹配点),则采用RANSAC(随机一致性采样)剔除外点重复上诉步骤。

1.2 最小化3D距离

该方法是沈老师在论文中使用的方法:《Shaojie Shen, Yash Mulgaonkar, Vision-Based State Estimation and Trajectory Control Towards High-Speed Flight with a Quadrotor》

这里的优化目标是:最小化3D特征点到所有观测射线之间的距离。

将图像观测转为相机坐标系下的单位观测向量 u i j u_{ij} uij (注意:这里的 u i j u_{ij} uij是单位向量,不是normalize 平面的向量):
在这里插入图片描述
z i j z_{ij} zij是观测值在归一化平面的其次坐标, u i j u_{ij} uij是归一化坐标点和相机中心连线的方向的单位向量。将向量 u i j u_{ij} uij转到世界坐标系下,得到世界坐标系下观测射线的方程为:
在这里插入图片描述
特征点到射线的距离为:
在这里插入图片描述
目标函数定义为特征点 w P i ^wP_i wPi到所有观测距离的平方和最小(最小二乘):
在这里插入图片描述
为了简化求解,令 u j = w c j R T u i j u_j= ^{c_j}_wR^Tu_{ij} uj=wcjRTuij,去掉部分上下标,目标函数变形为

在这里插入图片描述
因此对于M个观测值下,优化问题等价于求线性方程组的最小二乘解:

在这里插入图片描述
对于超定方程组Ax=b其最小二乘解为: x = ( A T A ) − 1 A T b x=(A^TA)^{-1}A^Tb x=(ATA)1ATb,对于上述方程组:

在这里插入图片描述

2、构建优化方法求解

前面介绍的两种方法都是得到最小二乘意义下的闭式解,但它们的目标函数不同使得解的形式确不一样。而优化方法基本都是最小化重投影误差(图像平面或Normalize平面),优化重投影误差是个非线性优化问题。

先思考一个问题:既然已经有了闭式解法,为什么还要做优化迭代呢?闭式求解它不香吗?

(答案来源于博客[1]) 实践证明,闭式求解确实不香,至少没有优化方法香。其实很好理解,我们把最小二乘解理解为将误差项建模为高斯分布情况下的最大似然估计,闭式方法将高斯误差加在特征点到观测射线的距离上,而实际误差来源于图像观测,所以将高斯误差加在图像平面的距离上更符合实际。因此一般做三角化都是先用闭式解得到初始值,然后在此基础上优化重投影误差,以获得比闭式解更高的精度。

优化方法的目标函数为:

在这里插入图片描述
得到Jacobian之后,就是常规的非线性最小二乘求解了,常用的方法有高斯牛顿法、LM法、Dogleg法;
在这里插入图片描述
该方法在SLAM的后端优化中使用。

3、构建高斯深度滤波器 LSD_SLAM

在这里插入图片描述

通过匹配算法和三角化可以得到一个符合高斯分布的观测模型 ,同时如果估计值也有一个初始观测值的话
在这里插入图片描述

m u mu mu s i g m a sigma sigma 分别是3D点上一次的深度平均值和方差。 d d d 和 是最新计算得到的深度观测值和观测值的方差,该方差由观测特征点移动一个像素值引起的深度变化确定。因此更新以后的深度平均值和方差为:
在这里插入图片描述

4、构建Beta分布滤波器-- SVO

在这里插入图片描述

SVO假设参考帧的观测坐标 z_ij 没有误差,这样特征点只取决与深度 d,我们只需要利用其他帧观测来估计深度 d 就好,从而将三维的特征点估计问题转变的一维的深度估计问题。出于一系列考虑,Depth Filter估计的是逆深度 1/d
逆深度的概率分布建模为一个高斯分布和一个 [d_min,d_max]区间均匀分布的加权
在这里插入图片描述

其中,逆深度为Z, 内点率为π, 观测为x,已知观测x需要估计Z和π, 根据Bayes公式得到后验概率:
在这里插入图片描述

由于计算复杂,无法直接用上式来迭代计算概率分布,SVO中用Gaussian-Beta分布来近似
在这里插入图片描述

5、EKF-SLAM

该形式为早期的SLAM系统,将特征点表示成一个概率分布进行估计,通常是Gaussian分布 N ( μ , Σ ) N(\mu,\Sigma) N(μΣ),通过相机观测来估计特征的均值和协方差。 与优化方法类似,滤波方法也是推导重投影误差对特征点的Jacobian,但通常相机位姿也是不准的,所以会把相机位姿和特征点放到特征向量中一起估计,也就是EKF-SLAM,这是残差模型中的Jacobian包含两块:重投影误差对相机状态的Jacobian以及对特征状态的Jacobian:
在这里插入图片描述

注意:该形式为早期的SLAM系统所采用的,当前的EKF SLAM 系统都通过左零空间投影消除 J f J_f Jf 项以减小系统的维度。

参考资料

[1] https://zhuanlan.zhihu.com/p/103694374
[2] https://www.semanticscholar.org/paper/Vision-Based-State-Estimation-and-Trajectory-Flight-Shen-Mulgaonkar/7b9e7b5c372692f6dedad0bfba4771e9e278e2a5?p2df

欢迎大家点赞在评论区交流讨论(cenruping@vip.qq.com) O(∩_∩)O

或者加群水一波(1149897304)
在这里插入图片描述

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

SLAM中多目三角化 的相关文章

  • SLAM方法汇总

    原文 http blog csdn net smartxxyx article details 53068855 目录 SLAM概述 SLAM一般处理流程包括track和map两部分 所谓的track是用来估计相机的位姿 也叫front e
  • 大师兄!SLAM 为什么需要李群与李代数?

    from https mp weixin qq com s sVjy9kr 8qc9W9VN78JoDQ 作者 electech6 来源 计算机视觉life 编辑 Tony 很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候 都有点
  • slam数学基础——最小二乘

    一 前言 1 最小二乘是一类特殊形式的最优化求解问题 相比于其他优化问题 求解方式比较简洁 2 最小二乘被广泛应用于各种实际问题的建模 在求解实际工程问题中有着广泛的应用 例如 slam 中随处可见最小二乘的声影 二 线性最小二乘法 1 预
  • 微信小程序SLAM AR零基础入门教程

    鬼灭之刃花街篇 开播在即 今天带大家零基础使用Kivicube制作一个炭治郎的SLAM AR云手办 可以通过微信小程序将AR版的炭治郎放置在家中 提前感受鬼灭的氛围 先上个GIF大家看看动态的展示效果 在这里先科普一下本次教程使用到的AR技
  • 《视觉SLAM十四讲》第一版源码slambook编译调试

    slambook master ch2 编译正常 log如下 slambook master ch2 mkdir build cd build cmake make j8 The C compiler identification is G
  • 基于深度相机的三维重建技术

    本文转载自http www bugevr com zblog id 14 原创作者bugeadmin 转载至我的博客 主要是为了备份 日后查找方便 谢谢原创作者的分享 三维重建 3D Reconstruction 技术一直是计算机图形学和计
  • 激光SLAM直接线性方法里程计运动模型及标定

    原创作者 W Tortoise 原创作者文章 https blog csdn net learning tortosie article details 107763626 1 里程计运动模型 1 1 两轮差分底盘的运动模型 1 2 三轮全
  • 【大一立项】如何亲手搭建ROS小车:硬件和软件介绍

    本次博客将详细介绍上篇博客中提到的ROS小车的硬件和软件部分 由于十一实验室不开门 所以部分代码还没有上传到Github 下位机 下位机使用Arduino 因为大一上刚学完用Arduino做循迹小车 其实Arduino作为ROS小车的下位机
  • 从零开始一起学习SLAM(9)不推公式,如何真正理解对极约束?

    文章目录 对极几何基本概念 如何得到极线方程 作业 此文发于公众号 计算机视觉life 原文链接 从零开始一起学习SLAM 不推公式 如何真正理解对极约束 自从小白向师兄学习了李群李代数和相机成像模型的基本原理后 感觉书上的内容没那么难了
  • Difference Between LiDAR and RADAR——LiDAR和RADAR的不同

    Difference Between LiDAR and RADAR 原文连接 https www differencebetween com difference between lidar and vs radar 翻译 RADAR和L
  • 单目视觉里程记代码

    在Github上发现了一个简单的单目vo 有接近500星 链接如下 https github com avisingh599 mono vo 这个单目里程计主要依靠opencv实现 提取fast角点并进行光流跟踪 然后求取本质矩阵并恢复两帧
  • 互转(经纬度、地心坐标、东北天坐标)

    Part1三种坐标系介绍 经纬度坐标 假设空间某点P 用经纬度表示的话 你们B代表纬度 L代表经度 H代表大地高 纬度B P点沿着地球法线方向与赤道面的夹角 向北为正称为北纬 0 90 向南为负称为南纬 0 90 实际表示可以用 90 90
  • PnP 问题

    欢迎访问我的博客首页 PnP 问题 1 DLT 2 P3P 3 G2O 求解 PnP 3 1 单目 3 2 双目 4 自定义顶点与边优化内参 4 1 二元边 4 2 三元边 4 3 总结 5 参考 PnP Perspective n Poi
  • lego-LOAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )---SLAM不学无术小问题

    LeGo LOAM跑自己的数据包无法显示全局地图问题 注意 本文笔者使用环境 Ubuntu18 04 ROS melodic 版本 背景 3D SLAM新手 在看到了各种狂拽炫酷的3D点云图的之后决定亲自上手一试 首先当然的是最为经典的LO
  • Ubuntu20.04安装各种库----简洁版

    目录 Eigen3 Sophus Pangolin Ceres g2o 建议先装anaconda再装ros python opencv啥该有的都有了 下面仅仅安装ros没有的库 Eigen3 作用 线性代数开源库 提供了有关线性代数 矩阵和
  • GMAPPING的参数设置

    二 运行gmapping 我总结了运行gmapping的两种方法 1 基于命令行 rosrun gmapping slam gmapping scan scan delta 0 1 maxUrange 4 99 xmin 5 0 ymin
  • Ceres Solver从零开始手把手教学使用

    目录 一 简介 二 安装 三 介绍 四 Hello Word 五 导数 1 数值导数 2解析求导 六 实践 Powell函数 一 简介 笔者已经半年没有更新新的内容了 最近学习视觉SLAM的过程中发现自己之前学习的库基础不够扎实 Ceres
  • 无人车

    1 无人车四大核心技术 自动驾驶实际包含三个问题 一是我在哪 二是我要去哪 三是如何去 第一个问题是环境感知和精确定位 无人车需要的是厘米级定位 厘米级定位是无人驾驶的难点之一 不光是车辆本身的语义级定位 还有一个绝对坐标定位 第二个问题是
  • Ubuntu18.04安装pcl(过程/坑记录式教程)

    Ubuntu18 04安装pcl 1 下载pcl 2 安装依赖项 3 编译 4 安装 5 网上教程说要安装QT5和VTK 但按照本文的 本文记录了安装时出现的问题 出错的安装命令也记录了 建议浏览一遍再参考 不要错用了错误的指令 1 下载p
  • ORB_SLAM2运行官方数据集/自己数据集

    官方数据集运行结果 WeChat 20230210194425 可以正常运行 自己数据集运行结果 自己的数据集 主要是用手机摄像头采集的实验室进行了一下简单的运行 可以成功运行 但是由于查看的相关程序的是死循环不能像运行官方数据集那样完整保

随机推荐

  • 如何免费下载百度文库文章的三种方法

    百度文库中的资源很丰富 xff0c 但那里的文章不能复制 xff0c 而且有的要下载币 给 大家总结下免费下载复制百度文库的三种方法 第一种 利用百度快照 我们在百度文库中找到自己想要的文章后 xff0c 直接把那篇文章的地址复制 xff0
  • 434个H5游戏源码

    各种类型HTML5游戏 xff0c 界面和JS均可供项目参考 下面是下载地址 转载于 https blog 51cto com 12130120 2374590
  • iOS 左右滑动 手势 响应方法

    1 64 property nonatomic strong UISwipeGestureRecognizer leftSwipeGestureRecognizer 64 property nonatomic strong UISwipeG
  • 一道c语言编程题

    一道c语言编程题 将一个5 5的矩阵中最大的元素放在中心 xff0c 四个角分别放四个最小的元素 xff08 顺序从左到右 xff0c 从上到下顺序依次从小到大存放 xff09 xff0c 写一函数实现之 xff0c 用main函数调用 i
  • print(1,2,3,sep=':')的输出结果是?

    print 1 2 3 sep 61 39 39 1 2 3 第一个参数 要打印的值 第二个参数sep表示要打印多个值时 各值的分割方式 默认空格 第三个参数end表示结尾的方式 默认 n 转载于 https www cnblogs com
  • S3. Android 消息推送

    概要 消息推送 转载于 https www cnblogs com zlxyt p 11133181 html
  • Android camera2 回调imagereader 从Image拿到YUV数据转化成RGB,生成bitmap并保存

    ImageUtil java import android graphics ImageFormat import android media Image import android os Build import android sup
  • C语言中字符串结束符'\0'

    本质 39 0 39 就是8位的00000000 xff0c 因为字符类型中并没有对应的这个字符 xff0c 所以这么写 39 0 39 就是 字符串结束标志 39 0 39 是转义字符 xff0c 意思是告诉编译器 xff0c 这不是字符
  • SLAM中双目三角化

    双目三角化 形式1 xff1a 在等式左边同时乘 x 1 x 1 x 1 和
  • 用手机对电脑进行远程关机

    PS 本人一月份写的文章 xff0c 贴在这里 昨天真是奔波的一天 xff0c 中午烤肉逛街下午寿司看电影 xff08 陪老婆 xff09 今天中午又是麻辣诱惑 额 xff0c 不争气的肠胃果然导致我拉肚子了 不过 xff0c 话说昨天下午
  • 程序员到底是一个什么职业?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 程序员首先是雇员 然后是工程师 xff1b 比起创造力 xff0c 工程能力对这个职位更为重要 为什么有人在技术造神 大家应该已经感受到 xff0c 技术圈这两年已经和娱乐
  • android 清理内存杀死service,关于Service常驻内存不被清理的解决方法.

    众所周知 Service是跑后台的 但是有些Rom厂商把一键清理做的真是太好用了 以至于一键清理变成了一种习惯 Service已经变的不再是Service了 那为什么像诸如360 微信 QQ 却可以傍山傍水 哦 用错词了 大家懂的 言归正传
  • 自主做一个类似于微博的项目(计划篇)

    项目名称 xff1a archou微博 项目架构 xff1a B S架构 项目开发语言 xff1a java jquery html hql 开发框架 xff1a spring mvc hibernate 开发平台 xff1a window
  • [工作记录] 点云线特征提取

    概述 目前的点云线特征提取方法可以分为 xff1a 1 基于面片patch的线特征提取 xff0c 主要可以提取交线 xff0c 边缘线 这类方法首先都是要提取面 xff0c 然后对每个面对象提取 又可以分为 xff1a 基于图像的提取 x
  • Javascript闭包:从理论到实现,[[Scopes]]的每一根毛都看得清清楚楚

    昨天我写到 所有Javascript函数都是闭包 xff0c 有些同学表示还是接受不能 我好好的一个函数 xff0c 怎么就成闭包了 xff1f 那么 xff0c 让我们来探究一下 xff0c Chrome xff08 V8 xff09 到
  • mysql5.7安装审计插件libaudit_plugin.so

    1 下载插件 https bintray com mcafee mysql audit plugin release 1 1 7 805 files 2 解压插件复制到mysql lib库插件目录下 xff1a unzip audit pl
  • 通过jdbc连接hive报java.sql.SQLException: Method not supported问题

    今天尝试通过jdbc连接hive xff0c JDBC直接连接是正常成功的 xff0c 实例 xff1a import java sql Connection import java sql DriverManager import jav
  • DHCP介绍及H3C配置DHCP

    1 DHCP引入 1 简介 DHCP xff08 动态主机设置协议 xff09 是一个局域网的网络协议 xff0c 使用UDP协议工作 xff0c 主要作用是集中的管理 分配IP地址 xff0c 使网络环境中的主机动态的获得IP地址 Gat
  • centos7-内核版本降级

    环境介绍 线上环境运行centos 内核版本规定为 xff1a CentOS Linux release 7 3 1611 Core 查看内核版本参考命令 xff1a root 64 localhost cat etc redhat rel
  • SLAM中多目三角化

    多目三角化 1 闭式求解1 1 DLT 最小二乘方法求解1 2 最小化3D距离 2 构建优化方法求解3 构建高斯深度滤波器 LSD SLAM4 构建Beta分布滤波器 SVO5 EKF SLAM参考资料 在能实现双目计算特征点的深度基础上