IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> slam原理介绍和经典算法 -> 正文阅读

[人工智能]slam原理介绍和经典算法

1.传统slam局限性

? ? ? ? slam算法假设的环境中的物体都是处于静态或者低运动状态的,然而,现实世界是复杂多变的,因此这种假设对于应用 环境有着严格的限制,同时影响视觉slam系统在实际场景中的应用性。当环境中存在动态物体时,会给系统带来错误的观测数据,同时降低系统的精度和鲁棒性。通过RANSAC算法(随机采样一致性)的外点处理机制能够解决部分异常点对于算法的影响。但是当动态物体占据空间的大部分时,依然会影响位姿跟踪,所以需要检测运动的物体、剔除动态区域的特征点,亦或者是降低在优化位姿的权重,减少对视觉定位的影响。

?人身上为动态特征点,要尽可能的去除。

2.常用算法:

开源的系统(DS-SLAM、Dyna-SLAM、Co-Fusion)目前大部分的动态SLAM系统都是在ORB-SLAM2或者KinectFusion基础上改进得到的,很少部分会涉及到边缘SLAM的方法。

用于检测动态区域或者特征点的常用方法有以下几种:

2.1基于深度学习的分割方法

利用深度学习技术能够很好地识别图像中特定的物体,结合运动物体的先验知识(汽车、行人、动物),能够很好的去除潜在的动态区域。?需要注意的是,对于移动的椅子、停在路边的汽车,该方法往往会做出错误的判断。

深度学习在动态SLAM中的应用有两种形式:目标检测与实例分割(语义分割)。

2.1.1目标检测(Object Detection)

目标检测的目标是找到图像中所有的待检测物体,并用边界框标出该物体的位置,该方法的优点是检测速度快,但是缺点也很明显,其只能用方框标出物体大概位置,不能实现精确分割,如果直接将方框内的特征点去掉,会因特征点过少而影响定位精度。为了克服此问题,会通过图割法对方框中的图像进行进一步修剪,以得到更加准确的物体区域。yolo和SSD

2.1.2语义分割(INstance Segmentation)

语义分割的目标是对物体进行像素级别的分割,该方法的优点在于精度较高,但是分割速度并不高,一般来说达不到实时的要求。为了解决效率问题,一些论文提到只在关键帧中进行实例分割,然后通过传播模型得到普通帧的结果。SegNet、Mask-RCNN

2.2基于多视图几何的方法

检测动态特征点的原理是用多帧图像的位姿约束,剔除误差较大的特征点。

极线约束:需要注意的是,当物体沿着极线的方向运动时,该方法会失效。

2.3基于光流/场景流的方法

2.3.1光流方法

对于两张图像,稠密光流很好地描述了每个像素在二维平面中运动的情况,是检测运动区域很好的方法,一般来说运动物体的区域所产生的光流会远高于静态的背景区域。但是除了物体本身运动会产生光流,相机的运动也会产生光流,为了消除相机运动的影响,通常会采用以下两种方案:

1.通过特征匹配计算二者之间的仿射变换,对第一张图像进行校正,用校正后的图像与第二张图像计算稠密光流。

2.结合语义信息得到初始静态背景的区域;计算两张图像之间的光流场;计算初始背景区域光流场的平均运动方向光流场减去背景光流场得到最后的光流结果

OpenCV有很多关于稠密光流的函数,如DeepFlow。

2.3.2场景流方法

所谓场景流(Scene Flow),就是光流(Optical Flow)的三维版本,表述了图像点云中每个点在前后两帧的变化情况。光流由两帧图像即可得到,场景流则需要两帧双目图像或者RGBD图像来得到。目前对场景流的研究还局限在实验室阶段,由于缺乏实际数据(打标成本太高)以及客观的评价指标,离工程应用还有不小的距离。

?正如论文FlowFusion中所介绍的,场景流反映了世界坐标系下物体点云的3D运动情况,也就是我们想要检测的东西光流是二维图像中像素运动产生的,并不简单是场景流投影至二维平面的结果,其还受相机运动(Ego motion)的影响,也就是说,相机运动产生的Ego Flow和物体本身运动产生的Secne Flow叠加,并投影至相机图像平面上,便得到了我们观测的Optical Flow


OpticalFlow=SceneFlow+EgoFlow


Secne Flow反应了物体的真实运动情况,求得场景流便知道了运动的物体。具体方法为:

1.计算两帧图像的初始位置,并进一步计算Ego Flow(相机)

2.计算两帧图像的光流场

3.二者相减得到3D场景流投影至2D图像平面即得到了运动区域

2.4基于残差的方法

????????最朴素的想法是计算每个点的误差大小(光度、重投影误差等)。可以应用在特征点上也可以应用在整个图像上,因为要计算误差,所以需要计算一个初始的位姿,计算位姿时一般会将当前图像与所维护的静态地图进行比较,因为每一帧图像都会对静态地图进行更新和维护,所以位姿计算也是比较准确地。

首先计算整张图像的残差,然后通过自适应阈值分割即可得到大致的动态区域,最后经过形态学处理去除噪声影响即可。

?3.性能比较

?传统SLAM算法与动态SLAM算法的轨迹对比。

作者:Mr Qin。如若转载,请注明出处:古月居 https://www.guyuehome.com/34296

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:54:12  更:2022-07-04 22:54:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:36:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码