SLAM-6视觉里程计里面特征点计算的缺点所做的改进

2023-05-16

缺点的改进方法:
由于之前的视觉里程计要计算关键点和描述子,花费大量的时间,有两种办法可以避免。1、只计算关键点,通过光流法追踪关键点的运动,可以得到同一个关键点在不同时刻图片的位置,这样就不用使用描述子来进行匹配了。2、只计算关键点,通过使用直接法来预测同一关键点在不同时刻图像的位置

光流法和直接法都是基于一个灰度不变假设,即同一个空间点的像素灰度值在各个图像中是固定不变的。(虽然我感觉这个假设挺扯的,高博在书里也说可能不成立,但是当帧率较快,两张图非常接近的时候,凑合也不能算错

光流法:描述像素点随时间在不同图片之间的运动,计算部分像素的是稀疏光流,计算所有像素的是稠密光流。
光流法推导
一个在t时刻位于(x,y)处的像素,在t+dt时刻运动到(x+dx,y+dy)处。两个像素实际是同一个空间点,所以灰度不变。泰勒展开保留一阶项
在这里插入图片描述
由于左端和右端第一项相等,所以右端三项之和为0.
在这里插入图片描述
像素点的灰度关于x,y两个方向的导数(因为像素点是离散的,最小的一格更新量,其实也就是它在下一个图里隔壁点和它灰度的差值)
dx/dt,dy/dt,这俩就是像素的运动速度,这个是不知道的,是想求的
等式右边的灰度关于时间的导数,其实也就是对于下一时刻时间的变化量,也是知道的。(两张图像同一个位置的灰度之差)
进一步改写为矩阵形式 :【Ix Iy】*[u,v] = - It
假设所有像素都有相同的运动,这样所有的点都套进方程组来,求解最小二乘,这样就能追踪到整个图像里所有点的位置(所以这种方式可以拿来做稠密重建,特征点法的话只有特征点被追踪到了,所以只能求出特征点的深度来,这样只能半稠密或者是稀疏重建)

直接法:光流法对特征点的追踪,只是相当于特征点匹配上了,匹配上以后,计算位姿实际就是上一讲中的那些对极几何或者PnP之类的套路,这样才能算出R和t来。
而直接法是构建了一个光度误差,类似于上一讲的重投影误差,根据误差来优化,进行李代数扰动,直接就算出R和t了。
直接法原理:光度误差十分接近重投影误差,它也是想估计一个外参,这样一个像素点A通过这个外参变换到另一张图片的某个位置以后,得到一个预测的点B,用A点的灰度减去这个预测的B点的灰度值,根据灰度不变假设,应该是0,因此构造这么一个优化函数。
直接法推导:空间点P世界坐标系下面的坐标是【x,y,z],他在两个图片上的坐标是p1,p2.
p1=1/Z1 * KP ,p2= 1/Z2 *KTP, Z1,Z2分别是在两个相机坐标系下面点P的深度。
光度误差
在这里插入图片描述
可以求出光度误差相对于T的雅克比矩阵:
在这里插入图片描述
在这里插入图片描述
之后利用非线性优化的算法,也就是J和增量△x的关系式,求出增量△x。然后用原先的位姿加上这个小量,作为新的位姿,下一轮迭代,进而找到最优解

1.可以看出来,光流还要有时间与坐标位置的关系式,而直接法,直接利用初值T和灰度不变原理进行迭代找到最优的T。
2.对于光度误差的雅克比矩阵J,第一项是灰度对于扰动小量像素坐标的导数,也就是梯度,如果梯度是0,也就是说扰动完以后,灰度没变,那雅克比矩阵就是0,之后构成的海塞矩阵H也是0,求不出扰动小量△x了。所以可以考虑只用带有梯度的像素点。

3.直接法的优点:不用算描述子,不用特征点匹配,检测完直接追踪就完事了;或者都不用检测,直接用有像素梯度的地方追踪就行(只有渐变的图像,特征点法不能提角点,但是这个就能追踪);可以稠密重建;

缺陷:完全依靠梯度搜索,因此运动很小才能成功;另外单个像素没有区分度,用所有的像素一起估计的话,说白了就是少数服从多数;另外灰度不变性也容易导致优化失败。

代码1:计算光流
https://blog.csdn.net/Summer_star_summer/article/details/107446189
代码2:直接法,基于灰度不变求T
https://blog.csdn.net/Summer_star_summer/article/details/107449761

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

SLAM-6视觉里程计里面特征点计算的缺点所做的改进 的相关文章

  • 坐标变换与基变换到底哪个左乘,哪个右乘??

    Version Date By Change Cost A 2020 3 18 AYZP First Version 三小时 前言 学习目的 1 坐标变换与基变换到底哪个左乘 哪个右乘 答案 根本就是由基和坐标的维数决定其到底左乘还是右乘
  • 大师兄!SLAM 为什么需要李群与李代数?

    from https mp weixin qq com s sVjy9kr 8qc9W9VN78JoDQ 作者 electech6 来源 计算机视觉life 编辑 Tony 很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候 都有点
  • 《视觉SLAM十四讲》学习笔记-第四讲部分习题的证明思路

    1 验证SO 3 SE 3 和Sim 3 关于乘法成群 证明 先看SO 3 定义为 SO 3 R R3 3 RR I det R 1 S O 3 R
  • Ubuntu20.04编译安装opencv3.2和opencv_contrib-3.2

    图像特征提取中需要用到SIFT等算法 因此不得不安装从源码编译安装opencv contrib 网上有很多教程 但是在不同的环境下多少会出现一些错误 针对Ubuntu20 04 gcc 7环境下对opencv opencv contrib编
  • 从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)

    背景 SLAM小白 因为项目需要花了两天时间编译代码 连接雷达实现了交互 踩了很多坑 简单记录一下 让后面感兴趣的朋友少走点弯路 肯定有很多不专业的 错误的地方 还请大家不吝赐教 噗通 也可以见知乎 https zhuanlan zhihu
  • 《视觉SLAM十四讲》第一版源码slambook编译调试

    slambook master ch2 编译正常 log如下 slambook master ch2 mkdir build cd build cmake make j8 The C compiler identification is G
  • 正交矩阵的保范性:正交变换不改变向量的长度(范数)

    在推导使用SVD分解解方程时 用到了正交矩阵的保范性这一性质 1 正交矩阵定义 A mathbf A intercal A A A A
  • SLAM评估工具evo的使用

    evo官方指南 参考博客 lt 官方手册 这篇参考博客 完全可以掌握evo的基本操作 gt Then 实践出真知 1 安装evo sudo apt install python pip pip install evo upgrade no
  • 经典坐标变换案例代码剖析

    题目 设有小萝卜一号和小萝卜二号位于世界坐标系中 记世界坐标系为W 小萝卜们的坐标系为R1和 R2 小萝卜一号的位姿为q2 0 35 0 2 0 3 0 1 T t1 0 3 0 1 0 1 T 小萝卜二号的位姿为q2 0 5 0 4 0
  • 单目视觉里程记代码

    在Github上发现了一个简单的单目vo 有接近500星 链接如下 https github com avisingh599 mono vo 这个单目里程计主要依靠opencv实现 提取fast角点并进行光流跟踪 然后求取本质矩阵并恢复两帧
  • LeGO-LOAM 系列(1): LeGO-LOAM 安装以及概述

    一 github GitHub RobustFieldAutonomyLab LeGO LOAM 二 安装依赖 1 ROS Ubuntu 64 bit 16 04 ROS Kinetic 比较常规 就不赘述了 2 gtsam Georgia
  • 视觉SLAM技术及其应用(章国锋--复杂环境下的鲁棒SfM与SLAM)

    SLAM 同时定位与地图构建 机器人和计算机视觉领域的基本问题 在未知环境中定位自身方位并同时构建环境三维地图 应用广泛 增强现实 虚拟现实 机器人 无人驾驶 SLAM常用的传感器 红外传感器 较近距离感应 常用与扫地机器人 激光雷达 单线
  • IMU预积分的一些理解

    IMU预积分 算是比较简单的一个算法 无奈网上找到的资料都讲的晦涩难懂 看明白了也觉得不过如此 讲一下我的理解 整体流程 1 推导IMU离散运动方程 2 根据离散运动方程 进行预积分 并将预积分的误差项拆分出来 因为我们在定义误差的时候 有
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • ORB-SLAM2:基于可识别特征的自主导航与地图构建

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

    学习LeGO LOAM时 写的代码注释github代码链接 一部分注释来自github用户wykxwyc 一部分来自网上查阅 还有一部分是自己的理解 持续更新中
  • SLAM练习题(十一)—— G2O实战

    SLAM 学习笔记 写在前面的话 算是一点小小的感悟吧 估计位姿的方法有线性方法和非线性方法 线性方法就是特征点法中的2D 2D的对极约束 3D 2D的PnP问题 非线性方法有BA优化 它将位姿的估计问题转换成了一个误差关于优化量的最小二乘
  • ORB_SLAM2运行官方数据集/自己数据集

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

    今天使用Todesk直接报出如下错误 好像对于海外用户需要付费购买海外会员 大家有没有什么可以替换的远程控制软件的吗 能分享一下吗
  • 高翔博士Faster-LIO论文和算法解析

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

随机推荐

  • python isinstance(), stack,判断list, dict, tuple为空

    Problem Nikola likes to categorize everything in sight One time Stephan gave him a label maker for his birthday and the
  • 路径跟踪算法之PID路径跟踪与PP跟踪

    路径跟踪算法之PID路径跟踪与PP跟踪 1路径跟踪原理2 常见的路径跟踪算法2 1 Pure puresuit pp 纯跟踪2 2 PID 跟踪 1路径跟踪原理 在运用好的路径规划算法 xff0c 规划好一条从起点到目标点最优的路径后 xf
  • 深入详解PID三项的作用与特性(抛开公式,以常识认识PID)

    深入探讨PID三项作用与特性 xff08 纯以常识方式对PID进行数学理论分析 xff09 1 经典PID的理解 xff08 抛弃公式 xff0c 以常识认识PID xff09 源文献 PID指的就是比例 积分 微分三项的结合 xff0c
  • ADRC自抗扰控制,有手就行

    ADRC自抗扰控制 xff0c 有手就行 关于ADRC的优点本人不会赘述 xff0c 毕竟作为一个ADRC算法都推导不出来的应用工程师 xff0c 最希望看到的就是有手就行的操作方法 ARC的缺点就显而易见 xff0c 就是参数多 xff0
  • nuScenes数据集详细介绍

    本文为博主原创文章 xff0c 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 xff0c 地址为 https blog csdn net suiyingy article details 12401771
  • fegin调用的时候数据格式转换为linkedhashmap

    在spring cloud项目开发中 xff0c 使用fegin进行远程调用 1 接口服务方返回类型为Map String Object 类型 2 接口调用方返回值类型也是Map String Object 3 通过fegin调用之后返回的
  • 一个字符串截取函数c语言

    刚开始学习c语言 xff0c 标准库中总是有很多函数没有 xff0c string h中的字符串处理函数好像不是很多 xff0c 在做栈的例子用需要用到一个字符串按位置截取的函数 xff0c 就自己写一个 xff0c 超简单 char su
  • RAF_DB数据集分类_3

    混淆矩阵 这里ECANet太长了 xff0c 我这里直接利用resnet代替一下 xff0c 你可以直接替换 xff0c 然后把权重对应好即可 xff0c 这只是一个简单的混淆矩阵生成 xff0c 没有太多美化 span class tok
  • docker镜像的创建

    目录 基于现有镜像创建 首先启动一个镜像 xff0c 在容器里做修改 然后将修改后的容器提交为新的镜像 xff0c 需要使用该容器的ID号创建新镜像 基于本地模板创建 导入镜像 基于Dockerfile创建 联合文件系统 xff08 Uni
  • ROS源码分析--子话题-catkin

    catkin简介 catkin简介 packagexml 格式1格式2 CMakeListtxtmeta package典型ROS应用添加自定义message文件 修改packagexml修改CMakeListtxt find packag
  • vnc安装和开机自启设置

    一 安装VNC 键入以下命令以在 Ubuntu 服务器上安装 TigerVNC xff1a sudo apt install tigervnc standalone server tigervnc common 现在安装了 VNC 服务器
  • 【Linux】线程安全篇Ⅰ

    文章目录 0 概述1 线程不安全举例1 1 前提知识铺垫1 2 场景模拟1 3 代码模拟 2 互斥2 1 什么是互斥2 2 互斥锁的原理 amp amp 特性2 3 互斥锁的计数器如何保证原子性2 4 互斥锁的接口2 4 1 初始化接口2
  • PX4/APM/飞控的学习笔记前言-Cxm

    开始了 开始了 终于有时间可以学习飞控了 此文章是用来当目录 我会持续更新我的学习之旅 希望能对各位有所帮助 如果有错误的地方还请各位前辈指点 此帖持续更新后续内容 其实从21年的一月就开始学习飞控一开始是从PX4开始学习 但是因为对liu
  • kubernetes 中文版

    这个文档非常好用 xff0c 建议收藏 无水印版 https pan baidu com s 1LSI46GBENd90Z06FnuaKmw lukb
  • SimpleBGC三轴云台用户手册

    SimpleBGC三轴云台用户手册 V1 00 硬件平台 xff1a STorM BGC V1 31 软件框架 xff1a SimpleBGC V1 00 本方案是采用俄版STorM BGC硬件平台 xff0c 软件采用SimpleBGC架
  • typedef和define有什么区别

    typedef和define都是替一个对象取一个别名 xff0c 以此增强程序的可读性 xff0c 区别如下 xff1a xff08 1 xff09 原理不同 define是C语言中定义的语法 xff0c 是预处理指令 xff0c 在预处理
  • 接口返回报错 resource notfound,plrase check path

    1 报错原因 post请求的content type application x www form urlencoded 但是请求体中设置的是json数据 34 date 34 34 2022 01 01 34 34 inclTransfe
  • Java中枚举的线程安全性及序列化问题

    一 枚举是如何保证线程安全的 要想看源码 xff0c 首先得有一个类吧 xff0c 那么枚举类型到底是什么类呢 xff1f 是enum吗 xff1f 答案很明显不是 xff0c enum就和class一样 xff0c 只是一个关键字 xff
  • Vscode配置Git

    vscode安装git 首先我们要确保我们下载了vscode和git xff0c 接下来就是给vscode配置git的步骤 xff1a 配置git环境变量 xff08 path值为git安装位置的cmd文件夹 xff09 xff0c 如图
  • SLAM-6视觉里程计里面特征点计算的缺点所做的改进

    缺点的改进方法 xff1a 由于之前的视觉里程计要计算关键点和描述子 xff0c 花费大量的时间 xff0c 有两种办法可以避免 1 只计算关键点 xff0c 通过光流法追踪关键点的运动 xff0c 可以得到同一个关键点在不同时刻图片的位置