ORB、RFNET等特征点分析

回顾了一下比赛的问题
我们这个slam针对的场景是什么?这个需要分析下优缺点。

直觉:

1、ORB更稳定,rfnet更准确。

可能原因:

  • orbslam对于orb特征点选择问题,特征点选择方式使得系统更加稳定
  • 系统参数没调整好
  • rfnet特征点本身的问题

2、Orb,rfnet,lfnet在什么场景会好?什么场景会不好?

较难比较

3、ORB与SIFT之类的在keypoints上有什么差异?

keypoints对比:

ORB
ORB、RFNET等特征点分析_第1张图片

ORB、RFNET等特征点分析_第2张图片
ORBSLAM系统中的ORB
ORB、RFNET等特征点分析_第3张图片
orbslam

ORB、RFNET等特征点分析_第4张图片
with scale ori
RFNET
ORB、RFNET等特征点分析_第5张图片

ORB、RFNET等特征点分析_第6张图片

直观上RFNET更稀疏,倾向于物体的轮廓,似乎能感知到图片中高层语义信息,比如电脑和桌子的轮廓非常清晰,不仅仅是图像灰度变化就会相应。

匹配效果上:

ORB
ORB_allmatch.png

ORB_withRANSAC.png
RFNET
RFNET_all_match.png

RFNET_withRANSAC.png

感觉比orb匹配成功的更多

Fast与Sift的比较

4、SURF之类的加速策略?

5、能不能在RFNET网络中引入在无纹理区域加特征点机制。使得密集地方还是很密,但是在空白地方也要有至少达到一定数量的特征点,尽管要保持不均匀性,但是要兼顾稳定性

6、RFNet直觉上光照更稳定

当我们都提取1000个特征点时候,RFNet能得到的正确匹配比ORB要多很多

RFNET

ORB、RFNET等特征点分析_第7张图片

ORB

7、 能不能也安LIFT学习SIFT流程学习一遍ORB?

不太可能,因为detector本质上就是fast,orb是描述方法通过学习的,改成深度学习意义不是很大。

8、 ORBSLAM系统上希望得到的特征点

均匀,并且要有一定表现能力

9 、ORBSLAM系统提取特征点策略:

整个特征提取部分涉及到的对象结构如下:


ORB、RFNET等特征点分析_第8张图片

特征点提取策略

每一帧图像共提取1000个特征点,分布在金字塔8层中,层间尺度比例1.2,计算下来金字塔0层大约有217个特征点,7层大约有50个特征点。

9.1 建立金字塔

为了得到尺度不变性,使用金字塔结构。


ORB、RFNET等特征点分析_第9张图片

9.2 在每层金字塔上划分网格提取fast角点

  • ComputeKeyPointsOctTree()
    这一步要对图像每一层来计算特征点,具体步骤就是将图像划分成小网格区域(orbslam2里使用的是30大小的窗口),然后对每个小网格单独使用FAST角点检测。值得注意是,为了尽可能使得每个小网格都能有点被检测到,这里使用了两种不同的阈值,如果没有检测到角点则使用更低阈值检测。

              //计算FAST关键点
              vector vKeysCell;
              FAST(mvImagePyramid[level].rowRange(iniY,maxY).colRange(iniX,maxX),
                   vKeysCell,iniThFAST,true);
              // 如果没有找到关键点,就降低阈值重新计算FAST
              if(vKeysCell.empty())
              {
                  FAST(mvImagePyramid[level].rowRange(iniY,maxY).colRange(iniX,maxX),
                       vKeysCell,minThFAST,true);
              }
    

得到角点后对每一层都调用一下DistributeOctTree()

9.3 使用四叉树均匀角点

  • DistributeOctTree()
    其实是四叉树均匀分布算法的实现。
    为了提取出的特征点在图像中分布比较均匀(实际情况中,特征点通常分布得比较集中,这样不利于进行匹配,也不利于精确地求解相机间的位姿从而得到精确的VO轨迹),使用了八叉树(其实是平面上的四叉树)的数据结构来存储提取出的特征点。
    这个树结构除了根节点其实只实现了3层,最顶层的node数量由图像的横纵比决定(例如2);下面两层最多产生64个叶子。因此,对于前面提到的特征点数,平均每个分割节点中分布一两个特征点,如果该叶子中含有较多特征点,则选取其中Harris响应值(是由OpenCV的KeyPoint.response属性计算的)最大的,其他的抛弃!

10 初步设想

  • end-to-end学出来这种orbslam2的特征选择方式,甚至要更稳定
  • 速度要提升上来
  • lfnet在尺度上来说是失败的,rfnet提高了很多,但是角度上反而变差了,应当具有更好的尺度角度信息
  • 实际应用场景更加鲁棒,如光线明暗、模糊、动态场景

你可能感兴趣的:(ORB、RFNET等特征点分析)