Program Listing for File TrackableKeyFrameSearch.h¶
↰ Return to documentation for file (lib/GlobalMapping/TrackableKeyFrameSearch.h)
#pragma once
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include "util/SophusUtil.h"
#include "util/Configuration.h"
#ifdef HAVE_FABMAP
#include "GlobalMapping/FabMap.h"
#endif
#include "util/MovingAverage.h"
#include "util/settings.h"
#include "DataStructures/KeyFrame.h"
namespace lsd_slam
{
class KeyFrameGraph;
class SE3Tracker;
struct TrackableKFStruct
{
KeyFrame::SharedPtr keyframe;
SE3 refToFrame;
float dist;
float angle;
};
class TrackableKeyFrameSearch
{
public:
TrackableKeyFrameSearch( const std::shared_ptr<KeyFrameGraph> &graph );
~TrackableKeyFrameSearch();
std::unordered_set<KeyFrame::SharedPtr> findCandidates(const KeyFrame::SharedPtr &keyframe, KeyFrame::SharedPtr &fabMapResult_out, bool includeFABMAP=true, bool closenessTH=1.0);
KeyFrame::SharedPtr findRePositionCandidate( const KeyFrame::SharedPtr &frame, float maxScore=1);
inline float getRefFrameScore(float distanceSquared, float usage)
{
return distanceSquared*KFDistWeight*KFDistWeight
+ (1-usage)*(1-usage) * KFUsageWeight * KFUsageWeight;
}
MsRateAverage trackPermaRef;
private:
KeyFrame::SharedPtr findAppearanceBasedCandidate(const KeyFrame::SharedPtr &keyframe);
std::vector<TrackableKFStruct> findEuclideanOverlapFrames(const KeyFrame::SharedPtr &frame, float distanceTH, float angleTH, bool checkBothScales = false);
#ifdef HAVE_FABMAP
std::unordered_map<int, KeyFrame::SharedPtr> fabmapIDToKeyframe;
FabMap fabMap;
#endif
std::shared_ptr<KeyFrameGraph> graph;
std::unique_ptr<SE3Tracker> tracker;
//float fowX, fowY;
};
}