Program Listing for File TagFamily.h
↰ Return to documentation for file (include/apriltag_mit/AprilTags/TagFamily.h
)
#ifndef APRILTAGS_TAGFAMILY_H_
#define APRILTAGS_TAGFAMILY_H_
#include <cmath>
#include <vector>
#include "apriltag_mit/AprilTags/TagCodes.h"
#include "apriltag_mit/AprilTags/TagDetection.h"
#include "apriltag_mit/AprilTags/Quad.h"
#include "apriltag_mit/AprilTags/GrayModel.h"
#include "apriltag_mit/AprilTags/FloatImage.h"
namespace AprilTags {
class TagFamily {
public:
explicit TagFamily(const TagCodes& tag_codes);
unsigned payload_bits() const;
unsigned dimension_bits() const;
unsigned min_hamming() const;
const std::vector<code_t>& codes() const;
size_t num_codes() const;
void set_error_recovery_bits(unsigned error_recovery_bits);
void set_error_recovery_fraction(float v);
code_t Code(unsigned id) const;
TagDetection Decode(code_t obs_code) const;
TagDetection DecodeQuad(const Quad& quad, const FloatImage& image,
unsigned black_border) const;
bool IsGood(unsigned id, unsigned hamming_distance) const;
GrayModel MakeGrayModel(const Quad& quad, const FloatImage& image,
unsigned black_border) const;
private:
const TagCodes& tag_codes_;
const size_t num_codes_;
unsigned error_recovery_bits_;
};
/* if the bits in w were arranged in a d*d grid and that grid was
* rotated, what would the new bits in w be?
* The bits are organized like this (for d = 3):
*
* 8 7 6 2 5 8 0 1 2
* 5 4 3 ==> 1 4 7 ==> 3 4 5 (rotate90 applied twice)
* 2 1 0 0 3 6 6 7 8
*/
code_t Rotate90DegCwise(code_t w, int d);
unsigned HammingDistance(code_t a, code_t b);
unsigned PopCount(code_t w);
} // namespace AprilTags
#endif // APRILTAGS_TAGFAMILY_H_