8#ifndef META_OCEAN_CV_CALIBRATION_MARKER_H
9#define META_OCEAN_CV_CALIBRATION_MARKER_H
26class OCEAN_CV_CALIBRATION_EXPORT
Marker
42 static constexpr size_t invalidMarkerId_ =
size_t(-1);
45 static constexpr size_t numberRowsColumns_ = 5;
48 static constexpr size_t numberPoints_ = numberRowsColumns_ * numberRowsColumns_;
57 using Layout = std::array<uint8_t, numberPoints_>;
85 static inline bool layoutPointSign(
const size_t markerId,
const bool markerSign,
const CV::PixelDirection& orientation,
const size_t indexInMarkerUnoriented);
118 static inline bool isSimilar(
const Layout& layoutA,
const Layout& layoutB,
const bool checkIdentity =
true);
147 explicit inline Marker(
const size_t markerId);
154 inline Marker(
const size_t markerId,
const bool sign);
160 inline size_t markerId()
const;
166 inline bool sign()
const;
179 inline void setMarkerId(
const size_t markerId);
185 inline void setSign(
const bool sign);
194 inline bool hasMarkerId()
const;
200 inline bool hasSign()
const;
206 inline bool isValid()
const;
212 static constexpr size_t numberRowsColumns();
218 static constexpr size_t numberPoints();
224 static inline size_t numberMarkerIds();
230 static constexpr size_t invalidMarkerId();
235 size_t markerId_ = invalidMarkerId();
280 ocean_assert(
sign_ != 0);
289 ocean_assert(
markerId_ <
size_t(1u << 31u));
293 ocean_assert((uniqueMarkerType & 1u) == (
sign() ? 1u : 0u));
294 ocean_assert(
size_t(uniqueMarkerType >> 1u) ==
markerId_);
296 return uniqueMarkerType;
308 ocean_assert(
sign_ == 0);
This class manages all possible layouts of markers.
Definition Marker.h:34
static constexpr size_t invalidMarkerId_
Definition of an invalid marker id.
Definition Marker.h:42
std::vector< Layout > Layouts
Definition of a vector holding marker layouts.
Definition Marker.h:62
std::array< uint8_t, numberPoints_ > Layout
Definition of a marker layout storing one bit for each marker point.
Definition Marker.h:57
static CV::PixelDirection isRotated(const Layout &layout, const Layout &rotatedLayout, const bool checkIdentity=true)
Returns whether a second layout is a rotated version of a first layout.
static constexpr size_t numberRowsColumns_
The number of points in each row and column of the marker.
Definition Marker.h:45
static bool isSimilar(const Layouts &layouts, const Layout &layout, const bool checkSelfSimilarity=true)
Returns whether a layout is similar to several other existing layouts.
static const Layouts & layouts()
Returns all possible marker layouts.
static constexpr size_t numberPoints_
The number of points in the marker.
Definition Marker.h:48
static Layouts determineUniqueLayouts()
Determines all unique marker layouts so that no layout can be rotated to another layout.
static bool layoutPointSign(const size_t markerId, const bool markerSign, const CV::PixelDirection &orientation, const size_t xUnoriented, const size_t yUnoriented)
Returns the sign of point in a marker layout.
This class implements the base class for a marker in a calibration board.
Definition Marker.h:27
bool hasMarkerId() const
Returns whether this marker has a known marker id.
Definition Marker.h:313
bool sign() const
Returns the sign of this marker.
Definition Marker.h:278
size_t markerId() const
Returns the id of this marker.
Definition Marker.h:273
Marker()=default
Default constructor to creator a marker with invalid id and unknown sign.
bool isValid() const
Returns whether this marker is associated with a valid id and a valid sign.
Definition Marker.h:323
void setMarkerId(const size_t markerId)
Sets the id of the marker.
Definition Marker.h:299
uint32_t MarkerType
Definition of a marker type.
Definition Marker.h:134
int32_t sign_
The sign of the marker, 1 for markers with positive sign (mainly black dot's on white background); -1...
Definition Marker.h:238
size_t markerId_
The id of the maker, invalid if unknown.
Definition Marker.h:235
static constexpr size_t numberPoints()
Returns the number of points each marker has.
Definition Marker.h:333
MarkerType markerType() const
Returns the type of this marker.
Definition Marker.h:285
static constexpr size_t numberRowsColumns()
Returns the number of rows and columns of a marker.
Definition Marker.h:328
bool hasSign() const
Returns whether this marker has a known sign.
Definition Marker.h:318
void setSign(const bool sign)
Sets the sign of the marker.
Definition Marker.h:306
static constexpr size_t invalidMarkerId()
Returns an invalid marker id.
Definition Marker.h:343
static size_t numberMarkerIds()
Returns the number of unique marker ids.
Definition Marker.h:338
PixelDirection
Definition of individual directions with pixel accuracy.
Definition CV.h:85
@ PD_INVALID
Definition CV.h:87
The namespace covering the entire Ocean framework.
Definition Accessor.h:15