Program Listing for File Quad.h

Return to documentation for file (include/apriltag_mit/AprilTags/Quad.h)

#ifndef APRILTAGS_QUAD_H_
#define APRILTAGS_QUAD_H_

#include <opencv2/core/core.hpp>
#include "apriltag_mit/AprilTags/GrayModel.h"
#include "apriltag_mit/AprilTags/FloatImage.h"
#include "apriltag_mit/AprilTags/TagCodes.h"

namespace AprilTags {

class FloatImage;
class Segment;

class Quad {
 public:
  static const int kMinEdgeLength = 6;
  static constexpr float kMaxQuadAspectRatio = 32.0;

  Quad(const std::vector<cv::Point2f>& p);

  cv::Point2f Interpolate(const cv::Point2f& p) const;

  cv::Point2f Interpolate01(const cv::Point2f& p) const;

  std::vector<cv::Point2f> p;

  std::vector<Segment*> segments;

  float obs_perimeter;

  static void Search(std::vector<Segment*>& path, Segment& parent, int depth,
                     std::vector<Quad>& quads);

  code_t ToTagCode(const FloatImage& image, unsigned dimension_bits,
                   unsigned black_border) const;

 private:
  GrayModel MakeGrayModel(const FloatImage& image, unsigned length_bits) const;
  code_t DecodePayload(const FloatImage& image, const GrayModel& model,
                       unsigned dimension_bits, unsigned black_border) const;

  cv::Point2f p0_, p3_, p01_, p32_;
};

}  // namespace AprilTags

#endif  // APRILTAGS_QUAD_H_