关于Bundle Adjustment的直观理解

  • 前言
  • BA的作用
  • 投影
  • 特征匹配
  • 重投影
  • 重投影误差
  • 最小化重投影误差
  • 参考文献

前言

学习SLAM最大的一个问题就是知识点太多,学完前面又忘记后面,而且脑子总是很混乱,还经常看不懂。今天刚搞懂了Bundle Adjustment的原理,马上过来记录一下,以后忘记还可以回来看看。

本文没有公式的证明,只是通俗的理解Bundle Adjustment到底是什么,这需要读者了解一定的slam基础。
下面就让我们一步步地理解BA吧。

Bundle Adjustment译为光束法平差,或者束调整、捆集调整。我们知道,SLAM大致可以分为前端、后端、回环检测、建图这几个步骤,那BA属于这里面的哪个步骤呢?

()slam讲解)

BA的作用

让我们先来看看Bundle Adjustment的作用,BA不仅可以优化位姿(R和t),还可以优化特征点的空间位置。而我们又可以把BA看成是最小化重投影误差(Reprojection error)问题,同时这也是一个非线性最小二乘问题。说到这里,各位同学都猜到BA属于哪个步骤了吧?没错,就是属于SLAM中的后端,说白了,BA就是一个优化模型,其本质就是最小化重投影误差

投影

首先了解一下,投影是什么意思。这里所说的投影是指空间中的某个点映射到图像中的某个像素的过程。

特征匹配

学过SLAM的童鞋应该知道,SLAM的关键问题就是求解出机器人的运动估计,也就是位姿(可用旋转矩阵+位移,或者是变换矩阵,或者是李代数的方式表示)。在视觉SLAM中,我们要从两张图中恢复机器人的运动。在恢复运动位姿之前,我们需要对某一时刻的连续两帧进行提取特征点,特征点匹配。 特征点匹配的意思就是说 :a图像中的ua像素对应b图像中的ub像素,他们都表示空间点中的P点。

注意,这里的图像b是由机器人所携带的摄像头传感器所得到的真实数据,是观测出来的。表示空间点P在b图像的实际投影。

我们这里把ub的坐标设置为(ubx,uby)。

重投影

https://blog.csdn.net/bufengzj/article/details/103336170(重投影)

以单目摄像头为例子,结合多个特征匹配点,使用对极几何(E或F)或者是单应性矩阵H可以求得机器人的运动位姿。我们知道针孔相机模型如下:

利用针孔相机模型(观测模型),可以通过空间点P的坐标,获得空间点P投影在图像b中的像素坐标,我们称为ub`。

这个ub`像素点坐标是先通过位姿估计,再通过观测模型计算出来的,相当于这个像素坐标是估算出来的。

这个过程也称为重投影

重投影误差

如果完全没有误差,那么两者的坐标是一样的,但这是不可能的,不管是实际测量出来的ub还是通过位姿估算+重投影的出来的ub`,都是有误差的,将实际值和估算值一减,就得到了重投影误差

最小化重投影误差

由于两张图片有很多对特征匹配点,将所有特征点误差求和,取平方,再乘上1/2,这就构建了一个非线性最小二乘问题了,将里面的位姿、空间点作为优化的对象,最小化重投影误差,即可得到一个优化后的结果,这就是所谓的BA。

参考文献

《视觉SLAM十四讲》——高翔
https://www.sohu.com/a/195484669_715754
https://www.cnblogs.com/Jessica-jie/p/7739775.html

关于Bundle Adjustment的直观理解相关推荐

  1. 史上最简SLAM零基础解读(7) - Jacobian matrix(雅可比矩阵) → 理论分析与应用详解(Bundle Adjustment)

    本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始   文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证{\color{blue}{文末正下方中心}提供了本人 \co ...

  2. Bundle Adjustment (BA)简述

    笔者到底想讲些啥? 在SFM(structure from motion)的计算中BA(Bundle Adjustment)作为最后一步优化具有很重要的作用,在近几年兴起的基于图的SLAM(simul ...

  3. ORB_SLAM2代码阅读(5)——Bundle Adjustment

    ORB_SLAM2代码阅读(5)--Bundle Adjustment 1. 说明 2. Bundle Adjustment(BA)的物理意义 3. BA的数学表达 4. BA的求解方法 4.1 最速 ...

  4. Bundle Adjustment原理及应用(附实战代码)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 虽然现在的轮子很多,但我们在使用过程中会碰到很多问题,而我们经常不知道从哪里下手,说明轮子不是你造的你 ...

  5. 矩阵求逆c语言实现_[V-SLAM] Bundle Adjustment 实现

    SLAM问题的后端有主要有滤波和优化两种方案.目前,普遍认为优化的方法在精度上要超过滤波方法,因为它可以进行多次的线性化.近年来出现的SLAM算法也大都是基于优化的算法(如ORB-SLAM.DSO等) ...

  6. 非线性最小二乘, BA(Bundle Adjustment)

    在看高翔博士的<视觉slam十四讲>,把看到的BA相关的东西记录一下,方便自己之后复习,有理解不对的地方,还请指正! 一.非线性最小二乘 1.1 总体思路, 一阶法和二阶法 最小二乘问题 ...

  7. 《论文阅读》BALM: Bundle Adjustment for Lidar Mapping

    留个笔记自用 BALM: Bundle Adjustment for Lidar Mapping 做什么 首先是最基础的,Structure-from-Motion(SFM),SFM可以简单翻译成运动 ...

  8. 2020年ECCV论文DeepSFM: Structure From Motion Via Deep Bundle Adjustment阅读笔记

      这篇博客分享的是2020年发表于ECCV上的一篇论文<DeepSFM: Structure From Motion Via Deep Bundle Adjustment>. 论文地址: ...

  9. 关于sba(sparse bundle adjustment)的30个常见问题

    Q1 -- 什么是sba? sba是一个C/C++软件包对广义稀疏光束平差,在GNU公共许可证下分发.sba是通用的,提供关于定义涉及光束法平差的图像投影的参数选择和函数关系增强的灵活性. Q2 -- ...

  10. 关于SBA(Sparse Bundle Adjustment)编译以及遇到的一些问题

    本人最近接触了SBA,由于没有人指导,只能在网上搜索资料来进行学习,理解地并不是很深入.但考虑到有很多初学者和我一样,会遇到很多问题,故想整理一下,一算是对自己这些天学习的回顾,二算是给接下来学习的人 ...

最新文章

  1. python语言入门w-Python笔记
  2. 自动装配——@Resource(JSR250)和@Inject(JSR330)---[java规范的注解]
  3. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)
  4. 10nm时代,高通霸主地位还能挺多久?
  5. Redis报错:redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snap
  6. sublime python配置运行
  7. 面对金九银十铜十一你真的准备好了吗?
  8. wsl2 Ubuntu 18.04 安装 ROS
  9. Compile a native C Android application
  10. 深度优先搜索(解题剑指Offer12、13)
  11. 为什么家里pm25比外面高_自己在外面花天酒地,不舍得为妻子花一分钱,这样男人有多可恨?...
  12. Leetcode每日一题:206.reverse-linked-list/solution(反转链表)
  13. Mysql 两种情况下更新字段中部分数据的方法
  14. error code ELIFECYCLE
  15. Android中SlidingDrawer介绍【安卓进化三十四】
  16. 在.NET上执行多线程操作要考虑的两大因素
  17. C接口与实现---之一
  18. 4月17日 键盘大小写指示indicator-lockkeys
  19. 计算机专业小米笔记本推荐,小米笔记本哪款好
  20. 安装3dmax出现:error 1311 找不到源文件

热门文章

  1. JScript.net
  2. 从零开始学android:环境搭建
  3. 微软必应Bing搜索引擎这几天无法访问!
  4. 微信小程序项目实例——双人五子棋
  5. DGL官方教程--图注意力网络(GAT)
  6. NYOJ 234 吃土豆(基础dp)
  7. LeetCode1156. 单字符重复子串的最大长度
  8. 深度学习的兴起与流行原因.
  9. 手把手教你搭建DHCP服务器
  10. 通过IMAP方式迁移U-Mail邮件到Exchange 2013之Umail搭建!