SLAM前端 - 特征检测与匹配

参考:
高翔——《视觉SLAM十四讲》第7讲 视觉里程计1
知乎zhixin yan——Visual SLAM前端技术 - 特征检测与匹配


  • 目录:
    1 特征检测
    1.1 FAST
    1.2 SIFT
    1.3 SUFT
    1.4 ORB
    1.5 总结
    2 特征匹配
    2.1 暴力匹配 Brute-Force Matcher
    2.2 快速近似最近邻 FLANN

  • 引入:
      要做SLAM就得知道位置;绝对位置不知道也得知道相对位置;相对位置得通过看到的图像来得到;人是以物品为单位看待世界,在这里计算机要通过世界中的特征。不光要知道特征在哪(关键点),还得知道特征长什么样(描述子),才能保证下次再见的时候还能认出它(特征匹配)。


1 特征检测

  • 先总结一下书中的部分内容,作为特征检测部分的综述:
    (1)提取“特征”是为了稳定性,即各种不变性,比如旋转不变性、光照不变性。
    (2)“特征点”是图像中特别的地方,而相对于边缘、区块,选择角点作为“特征点”更合适。
    (3)但是角点也并不是那么稳定的特征,所以人们设计出一系列比角点更稳定的特征描述方式,比如SIFT、SUFT、ORB。
    (4)特征点 = 关键点(特征点在图像中的位置,可能还具有朝向、大小等信息)+ 描述子(描述关键点周围像素信息)。
  • 简单对比:
特征 是否有描述子 速度如何(同一幅图提取1000特征点)
FAST ×
SIFT 太慢(5228.7ms)
SUFT 慢(217.3ms)
ORB 快(15.3ms)
1.1 FAST

Faster and better: a machine learning approach to corner detection

  • 主要思想:
    如果一个像素与它邻域的像素差别较大(过亮或过暗),那它更可能是角点。FAST其实单纯就是一种角点检测方法。
  • 检测过程:对每个像素做以下操作
    (1)在图像中选取像素p,亮度为Ip
    (2)设置一个阈值T(如Ip的20%);
    (3)以像素p为中心,选取半径为3的圆上的16个像素;
    (4)如果圆上有连续N个点的亮度在 Ip+T ~ Ip-T 之间,则认为像素p是特征点。称为FAST-N,常用9、12。
    (注1)用trick加速,快速排除绝大多数不是角点的像素:对于FAST-12,只有圆上1、5、9、13号像素的亮度满足在 Ip+T ~ Ip-T 之间时,这个点才有可能是角点,否则直接排除。
    (注2)用NMS避免重复:简单来说就是用候选角点之间的交并比(IOU)判断哪些该去掉。非极大值抑制(Non-Maximum Suppression,NMS)
  • FAST存在的问题:
    (1)FAST特征点数量大且不确定:取前N个Harris响应值大的。
    (2)FAST角点不具有尺度不变性、旋转不变性:构建图像金字塔(对不同尺度上的图像做FAST角点检测);灰度质心法(方向由几何中心指向亮度重心)。
1.2 SIFT
1.3 SUFT
1.4 ORB
  • ORB概览:
    ORB = FAST + BRIEF
    (1)FAST提供关键点;
    (2)BRIEF对于关键点提供描述子。
  • BRIEF的思路:
    (1)对于关键点附近的两个像素p和q,p>q取1,反之取0;
    (2)至于p和q的选取和顺序,有若干种挑选方法,大体都是按照某种概率分布随机挑选(我不太懂,但是无所谓),速度快(不懂为什么随机选点比较,速度就快);
    (3)最后得到一个0和1组成的128维二进制向量,存储方便。
  • 对ORB的总结:
    (1)首先,FAST和BRIEF都很快,所以ORB很高效;
    (2)改进后的FAST加入了对缩放和旋转的考虑,使得ORB在平移、旋转、缩放下仍具有良好表现;
    (3)总的来说,ORB在实时SLAM中很受欢迎。
1.5 特征检测总结

2 特征匹配

  • 主要从重要性和难点上做一下综述:
    (1)做好特征匹配很重要:可想而知,特征匹配正确为以后的优化等减轻很大负担,匹配错了不就失之毫厘了嘛;
    (2)但是经常出现误匹配:比如场景中存在大量重复纹理。
2.1 暴力匹配 Brute-Force Matcher
  • 其实没啥好说的:
    (1)就是对于两张图片的所有关键点,两个for循环嵌套,循环内部计算两两关键点的描述子距离。
    (2)按正常的思路,描述子的“距离”取欧氏距离;而对于BRIEF这种二进制的描述子,取不同位数的个数作为距离。
2.2 快速近似最近邻 FLANN
  • 这个就更没啥好说的了:
    因为书上说已经整合进OpenCV里了,那就想起来再看看吧。
  • 适用情况:
    尤其适用于特征点数量很大的时候做匹配。

你可能感兴趣的:(SLAM前端 - 特征检测与匹配)