/** * This file is part of ORB-SLAM3 * * Copyright (C) 2017-2021 Carlos Campos, Richard Elvira, Juan J. Gómez Rodríguez, José M.M. Montiel and Juan D. Tardós, University of Zaragoza. * Copyright (C) 2014-2016 Raúl Mur-Artal, José M.M. Montiel and Juan D. Tardós, University of Zaragoza. * * ORB-SLAM3 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public * License as published by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ORB-SLAM3 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with ORB-SLAM3. * If not, see . */ #ifndef KEYFRAMEDATABASE_H #define KEYFRAMEDATABASE_H #include #include #include #include "KeyFrame.h" #include "Frame.h" #include "ORBVocabulary.h" #include "Map.h" #include #include #include #include namespace ORB_SLAM3 { class KeyFrame; class Frame; class Map; class KeyFrameDatabase { friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { ar & mvBackupInvertedFileId; } public: EIGEN_MAKE_ALIGNED_OPERATOR_NEW KeyFrameDatabase(){} KeyFrameDatabase(const ORBVocabulary &voc); void add(KeyFrame* pKF); void erase(KeyFrame* pKF); void clear(); void clearMap(Map* pMap); // Loop Detection(DEPRECATED) std::vector DetectLoopCandidates(KeyFrame* pKF, float minScore); // Loop and Merge Detection void DetectCandidates(KeyFrame* pKF, float minScore,vector& vpLoopCand, vector& vpMergeCand); void DetectBestCandidates(KeyFrame *pKF, vector &vpLoopCand, vector &vpMergeCand, int nMinWords); void DetectNBestCandidates(KeyFrame *pKF, vector &vpLoopCand, vector &vpMergeCand, int nNumCandidates); // Relocalization std::vector DetectRelocalizationCandidates(Frame* F, Map* pMap); void PreSave(); void PostLoad(map mpKFid); void SetORBVocabulary(ORBVocabulary* pORBVoc); protected: // Associated vocabulary const ORBVocabulary* mpVoc; // Inverted file std::vector > mvInvertedFile; // For save relation without pointer, this is necessary for save/load function std::vector > mvBackupInvertedFileId; // Mutex std::mutex mMutex; }; } //namespace ORB_SLAM #endif