ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

视觉SLAM面试题汇总(二)

2021-07-26 20:33:45  阅读:727  来源: 互联网

标签:面试题 阈值 检测 汇总 边缘 SLAM 灰度 算子


        本节目录如下:


29、3D地图点是怎么存储的?表达方式?

     以ORB SLAM2为例,3D地图点是以的形式存储的,在类里面除了

  • 存储3D地图点的空间坐标;
  • 同时还存储了3D点对应的(多个)图像点的描述子(其实就是BRIEF描述子),用来快速进行与特征点的匹配;
  • 同时还用一个map存储了与其有观测关系的关键帧以及其在关键帧中的Index等等。
class MapPoint
{
 
// ...
 
protected:   
     // Position in absolute coordinates
     cv::Mat mWorldPos;
 
     // Keyframes observing the point and associated index in keyframe
     std::map<KeyFrame*,std::tuple<int,int> > mObservations;
     // For save relation without pointer, this is necessary for save/load function
     std::map<long unsigned int, int> mBackupObservationsId1;
     std::map<long unsigned int, int> mBackupObservationsId2;
 
     // Mean viewing direction
     cv::Mat mNormalVector;
 
     // Best descriptor to fast matching
     cv::Mat mDescriptor;
 
     // Reference KeyFrame
     KeyFrame* mpRefKF;
     long unsigned int mBackupRefKFId;
 
     // Tracking counters
     int mnVisible;
     int mnFound;
 
     // Bad flag (we do not currently erase MapPoint from memory)
     bool mbBad;
     MapPoint* mpReplaced;
     // For save relation without pointer, this is necessary for save/load function
     long long int mBackupReplacedId;
 
     // Scale invariance distances
     float mfMinDistance;
     float mfMaxDistance;
 
     Map* mpMap;
 
     std::mutex mMutexPos;
     std::mutex mMutexFeatures;
     std::mutex mMutexMap;
};

30、地图点的构建方法有哪些?

        (1)ORB SLAM2中是根据三角化的方法确定地图点的,利用匹配好的两个点构建AX=b的方程,然后利用SVD分解去最小奇异值对应的特征向量作为地图点坐标。,参考多视图几何总结——三角形法

        (2)在SVO中是利用深度滤波器进行种子点深度更新,当种子点深度收敛后就加入了地图构建地图点。

31、RGB-D的SLAM和RGB的SLAM有什么区别?

32、边缘检测算子汇总

        边缘检测一般分为三步,分别是滤波增强检测。基本原理都是用高斯滤波器进行去噪,之后在用卷积内核寻找像素梯度。常用有三种算法:canny算子sobel算子laplacian算子。

        canny算子:一种完善的边缘检测算法,抗噪能力强,用高斯滤波平滑图像,用一阶偏导的有限差分计算梯度的幅值和方向,对梯度幅值进行非极大值抑制,采用双阈值检测和连接边缘。       

        sobel算子:一阶导数算子,引入局部平均运算,对噪声具有平滑作用,抗噪声能力强,计算量较大,但定位精度不高,得到的边缘比较粗,适用于精度要求不高的场合。

        laplacian算子:二阶微分算子,具有旋转不变性,容易受噪声影响,不能检测边缘的方向,一般不直接用于检测边缘,而是判断明暗变化

(1) Canny算子

        参考Canny边缘检测算法解析

        Canny边缘检测算法可以分为以下5个步骤:
        (1)使用高斯滤波器,以平滑图像,滤除噪声。

        (2)计算图像中每个像素点的梯度强度和方向。
        (3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。

        (4)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
        (5)通过抑制孤立的弱边缘最终完成边缘检测。

        这里值得细究的非极大值抑制算法双阈值滤波算法,如下:

在这里插入图片描述

        要进行非极大值抑制,就首先要确定像素点C的灰度值在其8值邻域内是否为最大。图中中蓝色的线条方向为C点的梯度方向,这样就可以确定其局部的最大值肯定分布在这条线上,也即出了C点外,梯度方向的交点dTmp1和dTmp2这两个点的值也可能会是局部最大值。因此,判断C点灰度与这两个点灰度大小即可判断C点是否为其邻域内的局部最大灰度点。如果经过判断,C点灰度值小于这两个点中的任一个,那就说明C点不是局部极大值,那么则可以排除C点为边缘。这就是非极大值抑制的工作原理。

在这里插入图片描述

        左侧是没有经过非极大值抑制的梯度,右侧是经过非极大值抑制后的梯度, 完成非极大值抑制后,会得到一个二值图像,非边缘的点灰度值均为0,可能为边缘的局部灰度极大值点可设置其灰度为128

        Canny算法中减少假边缘数量的方法是采用双阈值滤波算法,选择两个阈值,根据高阈值得到一个边缘图像,这样一个图像含有很少的假边缘,但是由于阈值较高,产生的图像边缘可能不闭合,未解决这样一个问题采用了另外一个低阈值。在高阈值图像中把边缘链接成轮廓,当到达轮廓的端点时,该算法会在断点的8邻域点中寻找满足低阈值的点,再根据此点收集新的边缘,直到整个图像边缘闭合。

在这里插入图片描述

 如上图所示,E1为低阈值滤波的结果,E2为高阈值滤波的结果。

        以下几种边缘检测算子相比之下就简单很多,更像一个卷积核操作,他们的区别更像是卷积核不同,如下:

(2) Sobel算子

        Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑的作用,能更好地消除噪声的影响。Sobel算子对于像素的位置的影响做了加权,与Prewitt算子、Roberts算子相比效果更好。

        水平检测模板:

         垂直检测模板:

        计算梯度大小:

        计算梯度方向:

        Sobel算子的升级版是Isotropic Sobel算子, 即各向同性的Sobel算子,也是加权平均算子,权值反比于邻点与中心点的距离,各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。

(3)Roberts算子

        Roberts算子: 是一种最简单的算子,是一种利用局部差分算子寻找边缘的算子,采用对角线方向相邻两象素之差近似梯度幅值检测边缘,两个交叉梯度的算子模板分别是:

(4)Prewitt算子

        Prewitt算子: 是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。

        水平检测模板:

         垂直检测模板:

        Prewitt算子对噪声有抑制作用,抑制噪声的原理是通过像素平均,但是像素平均相当于对图像的低通滤波,所以Prewitt算子对边缘的定位不如Roberts算子,与Sobel算子类似,只是权值有所变化,但两者实现起来功能还是有差距的,据经验得知Sobel要比Prewitt更能准确检测图像边缘

(5)Laplacian算子

        Laplacian算子: 是一种各向同性算子二阶微分算子,在只关心边缘的位置而不考虑其周围的象素灰度差值时比较合适。Laplace算子对孤立象素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图象。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。所以,通常的分割算法都是把Laplacian算子和平滑算子结合起来生成一个新的模板。离散拉普拉斯算子模板如下:

33、SLAM中采用逆深度的原因?

        逆深度(Inverse depth)是近年来SLAM研究中出现的一种广泛使用的参数化技巧。在极线搜索和块匹配中,我们假设深度值满足高斯分布。然而仔细想想会发现,深度的正太分布确实存在一些问题:

        (1)实际想表达的是:这个场景深度大概是5—10米,可能有一些更远的点,但近处肯定不会小于相机焦距(或者认为深度不会小于0)。这个分布并不是像高斯分布那样,形成一个对称的形状。它的尾部可能稍长,而负数区域则为0.

        (2)在一些室外应用中,可能存在距离非常远,乃至无穷远处的点。我们的初始值中难以覆盖这些点,并且用高斯分布描述他们会有数值计算上的困难。

        于是,逆深度应运而生。人们在仿真中发现,假设深度的倒数(也就是逆深度),为高斯分布是比较有效的。随后,在实际应用中,逆深度也具有更好的数值稳定性,从而成为一种通用的技巧。

34、SFM和SLAM里面的BA有什么区别?

        网上好像没有什么关于这个问题的探讨,SFM的BA应该是不需太注重实时的,而SLAM里面通过Local Map或者滑动窗口算法保证BA的实时性。因为我并没有做过SFM,所以对这个理解不一定对,但是面试官说差不多就是这样。

35、ORB SLAM里面的Local Map和VINS-Mono里面的滑窗法有什么区别?

        Local Map优化的是当前帧以及和其有共视关系的关键帧的位姿,以及当前帧和共视帧看到的地图点,没有涉及边缘化保留先验信息的操作,而VINS-mono的滑窗法相对复杂,需要考虑通过边缘化进行先验信息的保留等操作。

36、ORB SLAM有什么缺点?

        (1)提取特征点和描述子速度相对较慢,如果将ORB SLAM一致到手机等嵌入式平台上达不到实时要求;

        (2)地图是稀疏点云;

        (3)对于动态物体敏感。

37、给一组点云,从中提取平面。

        结合《点云地面去除的两种方法》来说。

        还有就是随机抽样一致算法,RANSAC算法也可以做。

38、BA中,相机位姿很快接近真值,但地图点却不能很快的收敛,这是为什么?

问题:给你m相机n个点的bundle adjustment。当我们在仿真的时候,在迭代的时候,相机的位姿会很快的接近真值。而地图点却不能很快的收敛这是为什么呢?

解答:约束相机位姿的方程远多于约束地图点的方程

39、介绍经典的视觉SLAM框架

视觉SLAM总结——ORB SLAM2中关键知识点总结
视觉SLAM总结——SVO中关键知识点总结
视觉SLAM总结——LSD SLAM中关键知识点总结

40、特征点法与直接法误差模型、Jacobian推导

41、介绍下VO

        里程计一词来源于汽车,轮式里程计可以通过对车轮的转动得知汽车的运动距离。

        对于机器人而言,简单的说里程计就是机器人的运动轨迹,即求解机器人在每一时刻的位姿表示,有6个自由度;

        视觉里程计,机器人携带相机作为外传感器,根据实时的视频流(也就是相机图像信息)估计机器人的位姿变换,即6自由度(位置和姿态),例如使用单目相机称为单目视觉里程计,两个相机称为立体视觉里程计。

41、RPE、ATE的RMSE分别是什么?

       (1) 相对位姿误差(Relative pose error:相对位姿误差在一定的时间间隔内测量轨迹的局部精度。因此,相对位姿误差对应的轨迹,这是特别有用的视觉里程计系统评价的漂移。

根据这些误差,我们建议计算平移分量的所有时间索引上的均方根误差(RMSE),如

        (2)绝对轨迹误差(Absolute pose error:全局一致性可以通过比较估计和groundtruth轨迹之间的绝对距离来评估。由于两个轨迹都可以在任意坐标系中指定,所以它们首先需要对齐,

 与相对位姿误差相似,我们建议在平移分量的所有时间指标上计算均方根误差,即

 RPE考虑平移和旋转误差,而ATE只考虑平移误差。

 

 

 

参考文章:

1、https://www.freesion.com/article/35571024388/#6.%20%E4%BB%8B%E7%BB%8D%E4%B8%8BVO  3D VISION、SLAM求职宝典 | SLAM知识篇(D1,重点 )

2、https://blog.csdn.net/weixin_44580210/article/details/91790044 Jichao_Peng 《视觉SLAM总结——视觉SLAM面试题汇总》

标签:面试题,阈值,检测,汇总,边缘,SLAM,灰度,算子
来源: https://blog.csdn.net/qq_38167930/article/details/119087726

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有