点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
就目前视觉SLAM的引用来区分,分为基于特征法的和直接法的视觉SLAM。上一篇文章(https://zhuanlan.zhihu.com/p/108298657)中分析了特征法和直接法之间的对比关系。以下全篇均在分析基于视觉+IMU的视觉SLAM,即VINS。
基于特征法的视觉SLAM(视觉+imu)在目前发展相对更佳成熟,本文重点分析基于特征法的视觉SLAM的前端特征检测与跟踪问题。就目前来看,主流的框架还是基于fast方法进行特征快速检测,基于光流法进行特征跟踪。与ORB-SLAM不同,基于光流法进行特征跟踪可以甚至在高动态的场景下进行有效的特征跟踪。在高动态场景下,一个关键的问题就是图片容易模糊,基于ORB这种采用描述子进行特征匹配的特征跟踪方法,极易在高动态场景下特征跟踪失败。
jiacheng: 特征点法的话,以VINS为例,需要提前把路上运动中的车提前检测出来,去掉,这样是为了去掉动的特征点。车行驶环境中有很多重复的纹理和区域,感觉像VINS中用光流跟踪比计算描述子的特征点匹配,误匹配的情况可能要好一些,因为光流法会指定当前帧图像上的特征点的初始位置,也就是会在上一帧对应光流点的坐标值附近搜索和上一帧的匹配点。还有就是用特征点法地图重用要简单,只存储特征点,需要的时候拿出来就能恢复位姿了。
jiacheng: 我也理解光流法是对光照更加敏感一些才对,但是测试的时候发现,只有在非常严重的光照变化,比如从黑漆漆的树荫底下一下子暴露到阳光暴晒下,VO才会坚持不住丢掉。
下面简要的讲述一下几种描述子的特点以及相关的问题(特征描述子部分的材料参考了Dr. Yue的讲座介绍):
SIFT(Scale Invariant Feature Transform):该描述子主要具备尺度不变性和旋转不变性等优秀的品质,在视觉特征描述领域获得很好地口碑;描述子由128维的向量描述子组成。根据以下两个公式计算梯度幅值和梯度方向,基于特征点邻域内的像素对应的梯度信息,以获得旋转描述子的旋转不变性,最终获得128维的描述子。
Harris 特征:该特征描述方式主要依赖于特征点与邻域内的相关系数值。其中相关系数计算如下:
其中 表示特征点为中心的邻域范围。 计算如下:
因此可以的到:
其中:
因此可得到简化形式如下:
Harris特征的优势之一是速度快,虽然 Harris 算法相较于其他众多基于灰度的角点提取算法具有明显的优势,但它仍然存在一些不足: 在经典的 Harris 角点检测中,当对角点的兴趣值进行非极大值抑制来确定局部极大值的时候,角点的提取效果几乎完全由设定的阈值大小决定。而阈值的大小也与所提取的角点数量息息相关,一般情况下,阈值越大提取的角点越少,极易造成正确角点的丢失; 阈值越小提取的角点数越多,也会带来很多伪角点。因此,在用 Harris 算法进行角点检测时,阈值这个经验值的选取和设定对角点提取具有很大的影响。这部分参考https://blog.csdn.net/weixin_41695564/article/details/79962401。
Fast特征:Fast特征的提出者Rosten等将Fast角点定义为:若某像素与其周围邻域内足够多的像素点相差较大,则该像素可能是角点。
1, 一个以像素p为中心,半径为3的圆上,有16个像素点(p1、p2、...、p16)。
2、定义一个阈值。计算p1、p9与中心p的像素差,若它们绝对值都小于阈值,则p点不可能是特征点,直接pass掉;否则,当做候选点,有待进一步考察;
3、若p是候选点,则计算p1、p9、p5、p13与中心p的像素差,若它们的绝对值有至少3个超过阈值,则当做候选点,再进行下一步考察;否则,直接pass掉;
4、若p是候选点,则计算p1到p16这16个点与中心p的像素差,若它们有至少9个超过阈值,则是特征点;否则,直接pass掉。
5、对图像进行非极大值抑制:计算特征点出的FAST得分值(即score值,也即s值),判断以特征点p为中心的一个邻域(如3x3或5x5)内,计算若有多个特征点,则判断每个特征点的s值(16个点与中心差值的绝对值总和),若p是邻域所有特征点中响应值最大的,则保留;否则,抑制。若邻域内只有一个特征点(角点),则保留。得分计算公式如下(公式中用V表示得分,t表示阈值):
该fast特征检测方法以快著称,清晰明了,在很多VINS中都采用这种检测方式。
小结:
以无人驾驶,无人机这种高动态的场景来说,以视觉SLAM为背景,fast + 光流的场景将会是一种主流方案。我们的研究(Bai, Xiwei, Weisong Wen, and Li-Ta Hsu. "Robust Visual-Inertial Integrated Navigation System Aided by Online Sensor Model Adaption for Autonomous Ground Vehicles in Urban Areas." (2020).)也发现,基于fast+光流的方式即使在晚上高动态的场景下,也可以获得相对不错的相对定位精度,全程没有fail掉,但是整体精度依旧有待改善。
基于ORB这种高效的描述子的方式,在基于视觉地图做重定位的场合,具有很好的优势,比如类似于VPS等场合。
从全局上讲,典型的VINS主要包括两部分;即前端和后端。主要的VINS的误差来源来自于一下几部分。
特征检测的精度:由于后期的特征跟踪需要检测出前后属于同一个特征的特征点,如果特征检测的精度误差有0.5个pixel,那么反应到3D定位精度上,可能会是一个不小的误差。
特征跟踪精度:在使用光流法跟踪过程中,由于特征跟踪错误,导致计算重投影误差出错,最终的优化求解误差增大。
VINS状态初始化精度:由于VINS的整个优化问题是一个极度非线性的问题,因此一个好的初始化解是优化求解达到最优的关键。总的来说,一个好的初始化解,是优化达到最优解的关键之一。
匀速运动的自身车辆,导致视觉尺度不可观:由于视觉的尺度需要基于IMU的观测量来恢复,当车辆处于匀速运动的时候,由于加速度为0,将会导致视觉尺度不可观。
高动态环境下的动态目标:由于视觉重投影的残差依赖于一个假设:即特征是静止的。然而在高动态环境下,动态车辆上检测的特征将会极大的影响精度。我们组近期的文章在解决这些问题(Bai, Xiwei, Weisong Wen, and Li-Ta Hsu. "Robust Visual-Inertial Integrated Navigation System Aided by Online Sensor Model Adaption for Autonomous Ground Vehicles in Urban Areas." (2020).)
参考文献:
[1] https://www.cnblogs.com/wyuzl/p/7834159.html
[2]https://zhuanlan.zhihu.com/p/108298657
[3]https://blog.csdn.net/weixin_41695564/article/details/79962401
上述内容,如有侵犯版权,请联系作者,会自行删文。
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~