Program Listing for File KeyFrame.h¶
↰ Return to documentation for file (lib/DataStructures/KeyFrame.h)
#pragma once
#include "DepthEstimation/DepthMap.h"
#include "Frame.h"
#include "Tracking/TrackingReference.h"
namespace lsd_slam {
class KeyFrame {
public:
typedef std::shared_ptr<KeyFrame> SharedPtr;
//== Creator methods. Conventional constructor is hidden to ensure
// all of the sub-objects are properly synchronized
static KeyFrame::SharedPtr Create(const Frame::SharedPtr &frame);
static KeyFrame::SharedPtr Create(const ImageSet::SharedPtr &set);
static KeyFrame::SharedPtr PropagateAndCreate(const KeyFrame::SharedPtr &kf,
const Frame::SharedPtr &frame);
static KeyFrame::SharedPtr PropagateAndCreate(const KeyFrame::SharedPtr &kf,
const ImageSet::SharedPtr &set);
KeyFrame() = delete;
KeyFrame(const KeyFrame &) = delete;
//== Thin pass-throughs to Frame ==
int id() const { return _frame->id(); }
FramePoseStruct::SharedPtr pose() { return frame()->pose; }
Sim3 getCamToWorld() { return pose()->getCamToWorld(); }
//== Member accessors ==
std::shared_ptr<Frame> &frame() { return _frame; }
DepthMap::SharedPtr depthMap() { return _depthMap; }
TrackingReference::SharedPtr &trackingReference() {
return _trackingReference;
}
//== Depth maintenance functions ==
void updateDepthFrom(const Frame::SharedPtr &frame);
void updateDepthFrom(const ImageSet::SharedPtr &set);
void syncDepthMapToFrame();
void finalize();
std::unordered_set<KeyFrame::SharedPtr> neighbors;
std::unordered_multimap<KeyFrame::SharedPtr, Sim3> trackingFailed;
//== Meta statistics ==
int numFramesTrackedOnThis;
int numMappedOnThis;
int numMappedOnThisTotal;
protected:
// Constructors when not propagating from a previous keyframe
KeyFrame(const Frame::SharedPtr &frame);
KeyFrame(const ImageSet::SharedPtr &set);
private:
Frame::SharedPtr _frame;
DepthMap::SharedPtr _depthMap;
TrackingReference::SharedPtr _trackingReference;
};
} // namespace lsd_slam