Program Listing for File TagDetector.h
↰ Return to documentation for file (include/apriltag_mit/AprilTags/TagDetector.h
)
#ifndef APRILTAGS_TAGDETECTOR_H_
#define APRILTAGS_TAGDETECTOR_H_
#include <unordered_map>
#include <opencv2/core/core.hpp>
#include "apriltag_mit/AprilTags/TagDetection.h"
#include "apriltag_mit/AprilTags/TagFamily.h"
#include "apriltag_mit/AprilTags/FloatImage.h"
#include "apriltag_mit/AprilTags/Quad.h"
#include "apriltag_mit/AprilTags/GrayModel.h"
#include "apriltag_mit/AprilTags/DisjointSets.h"
namespace AprilTags {
class TagDetector {
public:
using Clusters = std::unordered_map<int, std::vector<cv::Point3f>>;
explicit TagDetector(const TagCodes& tag_codes, int black_border = 1);
std::vector<TagDetection> ExtractTags(const cv::Mat& image) const;
void set_black_border(int black_border);
int black_border() const;
private:
const TagFamily tag_family_;
int CalcFilterSize(float sigma) const;
void Preprocess(const FloatImage& image, FloatImage& im_decode,
FloatImage& im_segment) const;
void CalcPolar(const FloatImage& image, FloatImage& im_mag,
FloatImage& im_theta) const;
DisjointSets ExtractEdges(const FloatImage& im_mag,
const FloatImage& im_theta) const;
Clusters ClusterPixels(DisjointSets& uf, const FloatImage& im_mag) const;
std::vector<Segment> FitLines(const Clusters& clusters,
const FloatImage& im_mag,
const FloatImage& im_theta) const;
void ChainSegments(std::vector<Segment>& segments,
const FloatImage& image) const;
std::vector<Quad> SearchQuads(std::vector<Segment>& segments) const;
std::vector<TagDetection> DecodeQuads(const std::vector<Quad>& quads,
const FloatImage& image) const;
std::vector<TagDetection> ResolveOverlap(
const std::vector<TagDetection>& detections) const;
unsigned black_border_ = 1;
float decode_sigma_ = 0.8;
float segment_sigma_ = 0.8;
};
void ConvertToGray(cv::InputArray in, cv::OutputArray out);
std::vector<int> IndexFromNonZero(const cv::Mat mat);
} // namespace AprilTags
#endif // APRILTAGS_TAGDETECTOR_H_