点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
白白最近的时间投了一些SLAM相关的实习,通过各种公司的面试了解了流程以及侧重点,有答的不好被拒绝的,也有拿到offer的,也有简历石沉大海的。发现很多基础的问题自己都明白但是在面试紧张的情况下描述的逻辑不是很清晰,所以导致面试效果不是很好,通过自己这一段时间的学习和面试遇到的一些SLAM相关的基础问题做一个总结。
问题总结
1、如何对匹配好的点做进一步的处理,更好保证匹配效果
(1)确定匹配最大距离,汉明距离小于最小距离的两倍(2)使用KNN-matching算法,令K=2。则每个match得到两个最接近的descriptor,然后计算最接近距离和次接近距离之间的比值,当比值大于既定值时,才作为最终match。(3)RANSAC(使用RANSAC找到最佳单应性矩阵。由于这个函数使用的特征点同时包含正确和错误匹配点,因此计算的单应性矩阵依赖于二次投影的准确性),统计容差范围内匹配点最多的作为最适合的模型,剔除误匹配的点。
2. 单目相机,F和H矩阵有何不同,E和F矩阵有何不同,只旋转不平移能不能求F,只旋转不平移能不能求H ?
在相机只有旋转而没有平移的情况,此时t为0,E也将为0,导致无法求解R,这时可以使用单应矩阵H求旋转,但仅有旋转,无法三角化求深度。
3. 描述BA
BA的本质是一个优化模型,其目的是最小化重投影/光度误差,用于优化相机位姿和世界点。局部BA用于优化局部的相机位姿,提高跟踪的精确度;全局BA用于全局过程中的相机位姿,使相机经过长时间、长距离的移动之后,相机位姿还比较准确。BA是一个图优化模型,一般选择LM(Levenberg-Marquardt)算法并在此基础上利用BA模型的稀疏性进行计算;可以直接计算,也可以使用g2o或者Ceres等优化库进行计算。
Bundle Adjustment : 从视觉重建中提炼出最优的3D模型和相机参数(内参和外参),好似每一个特征点都会反射几束光线,当把相机位姿和特征点位置做出最优的调整后,这些光线都收束到相机相机光心。也就是根据相机的投影模型构造构造代价函数,利用非线性优化(比如高斯牛顿或列文伯格马夸而尔特)来求最优解,利用雅克比矩阵的稀疏性解增量方程,得到相机位姿和特征点3D位置的最优解。BA可以分为基于滤波器的BA和基于迭代的BA
4. 描述PnP
Perspective-n-Points, PnP(P3P)提供了一种解决方案,它是一种由3D-2D的位姿求解方式,即需要已知匹配的3D点和图像2D点。目前遇到的场景主要就是SLAM算法中估计相机位姿时通常需要PnP给出相机初始位姿,第一帧图像中的3D点以及对应到第二帧图像中的2D点,通过相机成像模型,将3D点投影到二维平面,通过构建误差目标函数通过优化调整位姿的方法使得误差目标函数达到最小,所以它求得的是当前帧相对于上一帧的位姿变换,都是基于已知3D点和对应的图像2D点求解相机运动的过程。
5. 描述下GN、LM方法
(1) GN:线搜索
将f(x)进行一节泰勒展开,最后求解线性方程H△x=b;用JT*J近似H矩阵,H的计算过程根据特定问题特殊分析;该方法特点是:稳定性差,可能不收敛;
(2) LM:信赖区域;
求解线性方程(H+λI)△x=b;通过调整拉格朗日乘子,可以判断是H占据主导地位(二阶近似较好),还是λI占据主导地位(一阶近似较好),避免非奇异和病态问题,提供更稳定,更准确的增量。
6. 如何处理关键帧(可以参考ORBSLAM2中的Tracking线程)
关键帧选取的指标主要有:
(1)跟踪质量(主要根据跟踪过程中搜索到的点数和搜索的点数比例)/共视特征点
(2)距离最近关键帧的距离是否足够远(空间)/运动
(3)距离上一关键帧的帧数是否足够多(时间)
(4)局部地图空闲
7. 为什么要引入李群李代数
旋转矩阵自身是带有约束的,正交且行列式为1,他们作为优化变量时,会引入额外的约束,使得优化变的困难,通过李群李代数的转换关系,把位姿估计变成无约束的优化问题。优化过程求极值,由求导数的定义式,可以知道矩阵对于加法不封闭,对于乘法封闭;我们可以看错把李群就是变换矩阵的集合,但是用李代数的形式去表示变换矩阵,与李群的变换对应关系恰好是与指数相乘的关系,用求导的定义式子就可以求解优化问题了。
8. 什么是极线约束(对极几何约束)
所谓极线约束就是说同一个点在两幅图像上的映射,已知左图映射点p1,那么右图映射点p2一定在相对于p1的极线上,这样可以减少待匹配的点数量。可以画图解释,注意成像平面、特征点、极点、极线、极平面、相机光心等概念。
9. 单目视觉slam中尺寸漂移是怎么产生的
单目相机根据一张图片无法得出一张图片中物体的实际大小,同理也就无法得出运动的尺度大小,这是产生尺度漂移的根源。而在优化过程中,单目相机使用对极几何中的三角测量原理求解深度信息,而三角测量中,极小的角度误差在累积之后深度不确定都会变得很大,从而无法保证尺度一致性。
10. SLAM中的绑架问题
绑架问题就是重定位,是指机器人在缺少之前位置信息的情况下,如何去确定当前位姿。例如当机器人被安置在一个已经构建好地图的环境中,但是并不知道它在地图中的相对位置,或者在移动过程中,由于传感器的暂时性功能故障或相机的快速移动,都导致机器人先前的位置信息的丢失,在这种情况下如何重新确定自己的位置。
11、描述特征点法和直接法的优缺点
特征点法优点:
(1)精确,直接法属于强假设
(2)运动过大时,只要匹配点在像素内,则不太会引起误匹配,鲁棒性好
缺点:
(1)关键点提取、描述子、匹配耗时长
(2)特征点丢失场景无法使用
(3)只能构建稀疏地图
直接法优点:
(1)省去计算特征点、描述子时间
(2)可以用在特征缺失的场合使用(比如白墙,只要有像素梯度变化就好)(3)可以构建半稠密乃至稠密地图
缺点:
(1)强假设条件,易受光照和模糊影响
(2)运动必须微小,要求相机运动较慢或采样频率较高(用图像金字塔改善)
(3)非凸性;单个像素没有区分度
12. 特征点法和直接法的BA有何不同
(1) 误差函数不同。特征点法是重投影误差,直接法是光度误差
(2) 雅克比矩阵不同
13. 光流和直接法有何不同
光流仅估计了像素间的平移,但
(1)没有用相机结构
(2)没有考虑相机的旋转和图像缩放
(3)边界点追踪效果差
14. 特征匹配(稀疏)和稠密匹配区别
特征匹配:
(1)速度快,效率高,可以到亚像素级别,精度高
(2)匹配元素为物体的几何特征,对照明变化不敏感
稠密匹配
(1)速度慢,效率低
(2)对无纹理区域匹配效果不理想,对光强条件敏感
15. EKF和BA的区别
(1) EKF假设了马尔科夫性,认为k时刻的状态只与k-1时刻有关。非线性优化使用所有的历史数据,做全体的SLAM
(2) EKF做了线性化处理,在工作点处用一阶泰勒展开式近似整个函数,但在工作点较远处不一定成立。非线性优化每迭代一次,状态估计发生改变,我们会重新对新的估计点做泰勒展开,可以把EKF看做只有一次迭代的BA
16. 单目,双目,深度相机对比
单目:成本低,搭建简单,单目相机有尺度不确定性,需要专门初始化;
双目:不需要专门初始化,能够计算深度,基线距离越大,测量距离越远,可以用于室内和室外,标定较为复杂,视差计算比较消耗资源,视差最小为一个像素,此时基线固定的化,所测距离最远;深度:测量范围窄,噪声大,易受日光干扰,无法测量透射材料,主要用于室内。
17. 常用的边缘检测算子和优缺点
边缘检测一般分为三步,分别是滤波、增强、检测。基本原理都是用高斯滤波器进行去噪,之后在用卷积内核寻找像素梯度。常用有三种算法:canny算子,sobel算子,laplacian算子
canny算子:一种完善的边缘检测算法,抗噪能力强,用高斯滤波平滑图像,用一阶偏导的有限差分计算梯度的幅值和方向,对梯度幅值进行非极大值抑制,采用双阈值检测和连接边缘。
sobel算子:一阶导数算子,引入局部平均运算,对噪声具有平滑作用,抗噪声能力强,计算量较大,但定位精度不高,得到的边缘比较粗,适用于精度要求不高的场合。laplacian算子:二阶微分算子,具有旋转不变性,容易受噪声影响,不能检测边缘的方向,一般不直接用于检测边缘,而是判断明暗变化。
18. 一阶梯度下降,G-N和L-M三种方法的关系
(H+λI)△x=b当λ= 0时,L-M等于G-N;当λ= ∞时,L-M等于一阶梯度下降。L-M的好处就在于:如果下降的太快,使用较小的λ,如果下降的太慢,使用较大的λ
19. 为什么SLAM中常用L-M
G-N中的H矩阵可能为奇异矩阵或者病态矩阵,导致算法不收敛。而且当步长较大时,也无法保证收敛性,所以采用L-M求解增量方程,但是它的收敛速度可能较慢。
20. 介绍RANSAC算法
RANSAC算法的基本假设是样本中包含正确数据(inliers,可以被模型描述的数据),也包含异常数据(outliers,偏离正常范围很远、无法适应数学模型的数据),即数据集中含有噪声。这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。举个例子通俗的讲,从一群点中估算直线模型,该算法先假设一个直线模型,并设定一定的容差范围,通过迭代统计一群点中所有在容差范围内的点的个数,最终统计最多的模型最适应这群点,迭代次数越多越准确,其他的容差范围外的点就是被剔除的点,
优缺点:RANSAC算法的优点是能鲁棒的估计模型参数。例如,他能从包含大量局外点的数据集中估计出高精度的参数。缺点是它计算参数的迭代次数没有上限,如果设置迭代次数的上限,得到的结果可能不是最优的结果,甚至可能得到错误的结果。RANSAC只有一定的概率得到的可信的模型,概率与迭代次数成正比。另一个缺点是它要求设置跟问题相关的阈值,RANSAC只能从特定的数据集中估计出一个模型,如果存在两个(或多个)模型,RANSAC不能找到别的模型。
21、如何优化重投影误差?采用什么方法求解?如果误匹配的点重投影之后误差很大,如何解决它对整个优化问题的影响?
图优化模型,将路标点和相机位姿作为两个节点,观测模型作为边,同时优化两个变量,SLAM中常用L-M求解,如果误匹配误差很大可以考虑用核函数(Huber),核函数可以减小误匹配对整个方法的影响。
22、 g2o工程化的注意事项
图优化流程:
①选择节点和边,确定参数化形式
②加入节点和边
③选择初值,开始迭代
④计算J和H
⑤解H△x = -b
⑥GN/LM
g2o需要实现其中的③-⑥g2o结构如下图所示:
①选择线性方程求解器(PCG/Cspare/Choldmod)
②选择一个blockslover
③选择迭代方式(GN/LM/Dogleg)
实现过程 :选择节点和边
节点:g2o :: VertexSE3Expmap(相机位姿)
g2o :: VertexSBApointXYZ(路标)
边:g2o :: EdgeProjectXYZ2UV(重投影误差)
g2o函数架构图
24、卡尔曼滤波
预测:如何从上一时刻的状态,根据输入信息推断当前时刻的状态分布(先验)计算协方差
更新:计算增益Kg,然后计算后验观测,更新状态和协方差
25、 坐标系转换世界坐标系(world) 相机坐标(camera)归一化坐标系 像素坐标(pixel)
26、解释相机内外参数
相机内参包括焦距fx,fy,cx,cy,径向畸变系数k1,k2,k3,切向畸变系数p1,p2其中内参一般来说是不会改变,但是当使用可变焦距镜头时每次改变焦距需要重新标定内参当图像裁剪时内参cx,cy会发生改变,比如图像从8*8变成4*4时,cx,cy需要除以2一般标定工业相机时只需要得到畸变系数k1,k2即可,对于畸变系数较大的鱼眼相机需要得到k3,p1,p2相机外参分为旋转矩阵R和平移矩阵t,旋转矩阵和平移矩阵共同描述了如何把点从世界坐标系转换到摄像机坐标系
好消息,小白学视觉团队的知识星球开通啦,为了感谢大家的支持与厚爱,团队决定将价值149元的知识星球现时免费加入。各位小伙伴们要抓住机会哦!
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~