详细介绍如何实现ORB-SLAM2与OpenMVS的对接过程,打通上下游实现三位重建,二话不说先干图
![](https://img-blog.csdnimg.cn/20210630143615963.gif)
对于学SLAM的同学对ORB-SLAM2可能并不陌生,系统框架清晰明了,代码风格清新脱俗,几乎都快成为入门SLAM的必修课了。三维重建结构分为SFM和MVS这两个部分,常见的三维重建方法如图所示
![](https://img-blog.csdnimg.cn/20210630151351157.png)
对于学过SLAM的同学看到这可能就觉得不舒服了,对于SLAM和三位重建这俩同宗师兄弟竟然都不给介绍介绍,这那说的过去,确实对与SLAM,我们所理解的实时定位与建图其实他同样可以充当Sturt form Motion的角色,为MVS提供初始的相机位姿与稀疏点云。
本文以ORB-SLAM2与OpenMVS为例,详细介绍对接过程:
**ORB-SLAM2位姿导出**
为与OpenMVS进行对接本次进对ORB-SLAM2进行部分修改,使之可以为OpenMVS提供稀疏点云、关键帧的位姿、内参,以及稀疏点云在各个View中的可见性。
主要更改如下
- 在Map文件下增添如下函数
```cpp
public:
void Save(const string &filename,const cv::MatSize image_size);
void SaveMapPoint(ofstream &f, MapPoint* mp);
void SaveKeyFrame(ofstream &f, KeyFrame* kf);
protected:
std::vector
KeyId;
```
- 在System下增加:
```cpp
void System::SaveMap(const string &filename,const cv::MatSize image_size);
```
- 在mono_tum.cc或者orbslam的其他Examples中对System::SaveMap(const string &filename,const cv::MatSize image_size)这个函数进行调用即可。
```cpp
SLAM.SaveMap("../Examples/output/sfm.txt",im.size);
```
通过ORB-SLAM2 我们最终生成了sfm.txt这个保存相机位姿以及稀疏点云的文档,他的文件结构如下图所示
数据集地址: https://vision.in.tum.de/data/datasets/rgbd-dataset/download#freiburg1_plant
以下是我们运行数据集的效果
![](https://img-blog.csdnimg.cn/20210630153553571.png)
sfm.txt的文件内容为: