ORB-SLAM2 位姿导出
Note:
为与OpenMVS进行对接本次进对ORB-SLAM2进行部分修改,使之可以为
OpenMVS提供稀疏点云、关键帧的位姿、内参,以及稀疏点云在各个View 中的可见性。
主要更改如下
. 在Map文件下增添如下函数
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<int> KeyId; |
. 在System下增加:
void System::SaveMap(const string &filename,const cv::MatSize image_size); |
. 在mono_tum.cpp或者orbslam的其他Examples中对
System::SaveMap(const string &filename,const cv::MatSize image_size)这个函数进行调用即可。
SLAM.SaveMap("../Examples/output/sfm.txt",im.size); |
OpenMVS接受SLAM的数据格式
ORB-SLAM2
数据集地址: https://vision.in.tum.de/data/datasets/rgbd-dataset/download#freiburg1_plant
ORB-SLAM2导出位姿验证
在与OpenMVS 进行对接之前,一定确保自己导出的信息是准确的,可以将 相机三位空间坐标点以及相机在空间中的位置保存成ply、obj等三维格式, 在meshlab中进行查看,或者如果你用的rgb-d相机的话,同样可以将深度 图、 rgb图一同投影下来,在meshlab下进行查看
OPENMVS接口
为与SLAM进行对接,我们加入了read_pose.cpp、 read_pose.h这两个
c++文件,目的是对SLAM导出的位姿和稀疏点云进行读取,并对OpenMVS 进行初始化。
主要核心函数有
bool load_scene(string file,Scene &scene); bool read_mvs_pose(string file,MVSPOSE &mvs_pose); bool save_pointcloud_obj(string name, vector<POINT3F> points,int num_keyframes,RGB color) |
InterfaceColMap接口理解
首先明确一点,我们SLAM的内容要如实的传入到Scene这个类中
首先将数据传入imgaes中
然后将数据传入platforms中
以及pointcloud
具体代码实现(节选)
// load and estimate a dense point-cloud #define use_custom_pose #ifdef use_custom_pose if(!load_scene(string(MAKE_PATH_SAFE(OPT::strInputFileNam e)),scene)) return EXIT_FAILURE; #else if (!scene.Load(MAKE_PATH_SAFE(OPT::strInputFileName))) return EXIT_FAILURE; #endif |
三维重建过程
mesh重构 纹理贴图