跟六哥学习ORB-SLAM2作业(二)下

目录

5、(问答题)  ORB_SLAM中为什么要进行特征点的均匀化?有什么好处?请调研至少1种以上其他可以实现均匀化的方法?

6、(问答题)  题目:单目相机SLAM是视觉SLAM所需最小的配置,应用非常广泛,而其中单目初始化尤其重要。这里我们自己实现了一个单目相机初始化流程,包括:提取特征点,特征匹配和筛选,位姿估计,三角化。代码框架已经写好了,推荐环境:ubuntu 18.04, OpenCV 3.4.6。


5、(问答题)  ORB_SLAM中为什么要进行特征点的均匀化?有什么好处?请调研至少1种以上其他可以实现均匀化的方法?

有人对该问题做了实验对比:https://blog.csdn.net/yong_qi2015/article/details/106700580

好处可以总结为:避免特征点扎推,最终能提高建图和定位精度

四叉树均匀化

 

6、(问答题)  题目:单目相机SLAM是视觉SLAM所需最小的配置,应用非常广泛,而其中单目初始化尤其重要。这里我们自己实现了一个单目相机初始化流程,包括:提取特征点,特征匹配和筛选,位姿估计,三角化。代码框架已经写好了,推荐环境:ubuntu 18.04, OpenCV 3.4.6。

任务1

需要你在缺失的两个地方补充如下代码:

第1处:在 feature_match 函数中:

// ---------- homework1:用GMS方法筛选暴力匹配结果中正确的匹配对 --------------//
    // ----------------  代码开始 -----------------//
    std::vector vbInliers;
    int num_inliers;

    gms_matcher gms(keypoints_1, img_1.size(), keypoints_2, img_2.size(), Matches_bf);
    num_inliers = gms.GetInlierMask(vbInliers, false, false);
    cout << "Get total " << num_inliers << " matches." << endl;

    // collect matches
    for (size_t i = 0; i < vbInliers.size(); ++i)
    {
        if (vbInliers[i] == true)
        {
            matches_gms.push_back(Matches_bf[i]);
        }
    }
    // ----------------  代码结束-----------------//

答:

跟六哥学习ORB-SLAM2作业(二)下_第1张图片

这一处主要是找到GMS的论文和代码就行了!

【参考】

https://blog.csdn.net/zhangjunhit/article/details/77891666

https://blog.csdn.net/custesc/article/details/103963787

https://github.com/JiawangBian/GMS-Feature-Matcher

第2处:在 triangulation 函数中:

// ---------- homework2:筛选内外点,参考ORB-SLAM2中单目初始化代码实现 --------//
// ----------------  代码开始 -----------------//
// 根据重投影误差筛选内外点
vector inlier3dPoints;
//...

int sum = std::accumulate(inlier3dPoints.begin(), inlier3dPoints.end(), 0);
printf("经过重投影误差筛选后,有效3D点数为:%d / %d \n", sum, inlier3dPoints.size());

// 根据三角化夹角来筛选合格的三维点
vector cosinPts;
//...
printf("经过角度筛选后,有效3D点数为: %d / %d \n",cosinPts.size() , inlier3dPoints.size());
// ----------------  代码结束 -----------------//

答:与ORB-SLAM2代码差在给的数据类型上,没有做出来,等讲解学习吧!

任务2

根据运行结果分析外点被删除的原因。
 

答:在ORB-SLAM2代码中,剔除匹配对的情况有:

  • 三角化的三维点坐标不合法(无穷值)
  • 通过三维点深度值正负、两相机光心视差角大小来检查不合法(负值不合法,视差比较小时,重投影误差较大不合法)

  • 计算空间点在参考帧和当前帧上的重投影误差,如果大于阈值则舍弃

题目代码下载:

链接:https://pan.baidu.com/s/1AznfTbMULCBtEt5PqK7Nfw 

提取码:d4n5

提交作业请通过百度网盘压缩包上传可以编译的完整代码,设置永久链接,方便批改,谢谢

【参考】

https://blog.csdn.net/zhangjunhit/article/details/77891666

https://blog.csdn.net/custesc/article/details/103963787

你可能感兴趣的:(SLAM基础,#,跟六哥学习SLAM,计算机视觉)