Program Listing for File ImageSet.h

Return to documentation for file (lib/DataStructures/ImageSet.h)

#pragma once
#include <opencv2/core.hpp>
#include <vector>

#include "DataStructures/Frame.h"
#include "util/SophusUtil.h"
#include <libvideoio/Camera.h>

namespace lsd_slam {

// Relies on the lazy-initialize nature of Frame to be efficient
class ImageSet {
public:
  ImageSet() = delete;
  ImageSet(const ImageSet &) = delete;

  ImageSet(unsigned int id, const cv::Mat &img, const libvideoio::Camera &cam);
  ImageSet(unsigned int id, const cv::Mat &imgL, const cv::Mat &imgR,
           const libvideoio::Camera &camL, const libvideoio::Camera &camR,
           const unsigned int ref);
  ~ImageSet();

  Frame::SharedPtr &refFrame()                            { return _frames[_refFrame]; }

  Frame::SharedPtr &getFrame(const unsigned int frameNum) { return _frames[frameNum]; }

  void pushbackFrame(const cv::Mat &img, const libvideoio::Camera &cam);
  Sim3 getRefTransformation() { return _frames[_refFrame]->getCamToWorld(); }
  void setReferenceFrame(const unsigned int &frameNum) { _refFrame = frameNum; }
  unsigned int id() { return _frameId; }

  typedef std::shared_ptr<ImageSet> SharedPtr;

private:
  unsigned int _refFrame;
  unsigned int _frameId;
  std::vector<Frame::SharedPtr> _frames;
  std::vector<Sophus::SE3d> _se3FromFirst;
};

} // namespace lsd_slam