Basic 2D Marker functionality. More...
#include <Marker.h>
Public Member Functions | |
void | CompareContent (std::vector< Point< CvPoint2D64f > > &_marker_corners_img, IplImage *gray, Camera *cam, int *orientation) const |
Compares the marker corners with the previous match. | |
void | CompareCorners (std::vector< Point< CvPoint2D64f > > &_marker_corners_img, int *orientation, double *error) |
Compares the marker corners with the previous match. | |
virtual bool | DecodeContent (int *orientation) |
Decodes the marker content. Please call UpdateContent before this. This virtual method is meant to be implemented by heirs. | |
CvMat * | GetContent () const |
Returns the content as a matrix. | |
double | GetError (int errors=(MARGIN_ERROR|DECODE_ERROR)) const |
Get marker detection error estimate. | |
virtual unsigned long | GetId () const |
Get id for this marker This is used e.g. in MarkerDetector to associate a marker id with an appropriate edge length. This method should be overwritten to return a suitable identification number for each marker type. | |
double | GetMargin () const |
double | GetMarkerEdgeLength () const |
Get edge length (to support different size markers. | |
int | GetRes () const |
Marker (double _edge_length=0, int _res=0, double _margin=0) | |
Default constructor. | |
Marker (const Marker &m) | |
Copy constructor. | |
void | SaveMarkerImage (const char *filename, int save_res=0) const |
Saves the marker as an image. | |
void | ScaleMarkerToImage (IplImage *image) const |
Draw the marker filling the ROI in the given image. | |
void | SetError (int error_type, double value) |
Set the marker error estimate. | |
virtual void | SetId (unsigned long _id) |
void | SetMarkerSize (double _edge_length=0, int _res=0, double _margin=0) |
Method for resizing the marker dimensions. | |
virtual bool | UpdateContent (std::vector< Point< CvPoint2D64f > > &_marker_corners_img, IplImage *gray, Camera *cam, int frame_no=0) |
Updates the marker_content from the image using Homography. | |
void | UpdatePose (std::vector< Point< CvPoint2D64f > > &_marker_corners_img, Camera *cam, int orientation, int frame_no=0, bool update_pose=true) |
Updates the markers pose estimation. | |
void | Visualize (IplImage *image, Camera *cam, CvScalar color=CV_RGB(255, 0, 0)) const |
Visualize the marker. | |
~Marker () | |
Destructor. | |
Public Attributes | |
std::vector< PointDouble > | marker_corners |
Marker corners in marker coordinates. | |
std::vector< PointDouble > | marker_corners_img |
Marker corners in image coordinates. | |
std::vector< PointDouble > | marker_margin_b |
Samples to be used in figuring out min/max for thresholding. | |
std::vector< PointDouble > | marker_margin_w |
Samples to be used in figuring out min/max for thresholding. | |
std::vector< PointDouble > | marker_points |
Marker color points in marker coordinates. | |
Pose | pose |
The current marker Pose. | |
ar_track_alvar::ARCloud | ros_corners_3D |
std::vector< PointDouble > | ros_marker_points_img |
Marker points in image coordinates. | |
int | ros_orientation |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW bool | valid |
Static Public Attributes | |
static const int | DECODE_ERROR = 2 |
static const int | MARGIN_ERROR = 1 |
static const int | TRACK_ERROR = 4 |
Protected Member Functions | |
bool | UpdateContentBasic (std::vector< Point< CvPoint2D64f > > &_marker_corners_img, IplImage *gray, Camera *cam, int frame_no=0) |
virtual void | VisualizeMarkerContent (IplImage *image, Camera *cam, double datatext_point[2], double content_point[2]) const |
virtual void | VisualizeMarkerError (IplImage *image, Camera *cam, double errortext_point[2]) const |
void | VisualizeMarkerPose (IplImage *image, Camera *cam, double visualize2d_points[12][2], CvScalar color=CV_RGB(255, 0, 0)) const |
Protected Attributes | |
double | decode_error |
double | edge_length |
double | margin |
double | margin_error |
CvMat * | marker_content |
int | res |
double | track_error |
Basic 2D Marker functionality.
This class contains the basic Marker functionality for planar markers.
Destructor.
Definition at line 515 of file Marker.cpp.
alvar::Marker::Marker | ( | double | _edge_length = 0 , |
int | _res = 0 , |
||
double | _margin = 0 |
||
) |
Default constructor.
_edge_length | Length of the marker's edge in whatever units you are using (e.g. cm) |
_res | The marker content resolution in pixels (this is actually |
_margin | The marker margin resolution in pixels (The actual captured marker image has pixel resolution of _margin+_res+_margin) |
Definition at line 518 of file Marker.cpp.
alvar::Marker::Marker | ( | const Marker & | m | ) |
Copy constructor.
Definition at line 529 of file Marker.cpp.
void alvar::Marker::CompareContent | ( | std::vector< Point< CvPoint2D64f > > & | _marker_corners_img, |
IplImage * | gray, | ||
Camera * | cam, | ||
int * | orientation | ||
) | const |
Compares the marker corners with the previous match.
Definition at line 178 of file Marker.cpp.
void alvar::Marker::CompareCorners | ( | std::vector< Point< CvPoint2D64f > > & | _marker_corners_img, |
int * | orientation, | ||
double * | error | ||
) |
Compares the marker corners with the previous match.
In some cases the tracking of the marker can be accepted solely based on this. Returns the marker orientation and an error value describing the pixel error relative to the marker diameter.
Definition at line 163 of file Marker.cpp.
bool alvar::Marker::DecodeContent | ( | int * | orientation | ) | [virtual] |
Decodes the marker content. Please call UpdateContent before this. This virtual method is meant to be implemented by heirs.
Reimplemented in alvar::MarkerData, and alvar::MarkerArtoolkit.
Definition at line 316 of file Marker.cpp.
CvMat* alvar::Marker::GetContent | ( | ) | const [inline] |
double alvar::Marker::GetError | ( | int | errors = (MARGIN_ERROR | DECODE_ERROR) | ) | const [inline] |
Get marker detection error estimate.
errors | Flags indicating what error elements are combined The marker detection error can consist of several elements: MARGIN_ERROR is updated in UpdateContent and it indicates erroneous values inside the marginal area. DECODE_ERROR is updated in DecodeContent and it indicates erroneous values inside the actual marker content area. TRACK_ERROR is updated in MarkerDetector.Detect and it indicates the amount of tracking error returned from CompareCorners |
virtual unsigned long alvar::Marker::GetId | ( | ) | const [inline, virtual] |
Get id for this marker This is used e.g. in MarkerDetector to associate a marker id with an appropriate edge length. This method should be overwritten to return a suitable identification number for each marker type.
Reimplemented in alvar::MarkerData, alvar::MarkerArtoolkit, and alvar::MultiMarkerInitializer::MarkerMeasurement.
double alvar::Marker::GetMargin | ( | ) | const [inline] |
double alvar::Marker::GetMarkerEdgeLength | ( | ) | const [inline] |
int alvar::Marker::GetRes | ( | ) | const [inline] |
void alvar::Marker::SaveMarkerImage | ( | const char * | filename, |
int | save_res = 0 |
||
) | const |
Saves the marker as an image.
Definition at line 322 of file Marker.cpp.
void alvar::Marker::ScaleMarkerToImage | ( | IplImage * | image | ) | const |
Draw the marker filling the ROI in the given image.
Definition at line 342 of file Marker.cpp.
void alvar::Marker::SetError | ( | int | error_type, |
double | value | ||
) | [inline] |
virtual void alvar::Marker::SetId | ( | unsigned long | _id | ) | [inline, virtual] |
Reimplemented in alvar::MarkerData, alvar::MarkerArtoolkit, and alvar::MultiMarkerInitializer::MarkerMeasurement.
void alvar::Marker::SetMarkerSize | ( | double | _edge_length = 0 , |
int | _res = 0 , |
||
double | _margin = 0 |
||
) |
Method for resizing the marker dimensions.
Definition at line 356 of file Marker.cpp.
bool alvar::Marker::UpdateContent | ( | std::vector< Point< CvPoint2D64f > > & | _marker_corners_img, |
IplImage * | gray, | ||
Camera * | cam, | ||
int | frame_no = 0 |
||
) | [virtual] |
Updates the marker_content from the image using Homography.
Reimplemented in alvar::MarkerData.
Definition at line 184 of file Marker.cpp.
bool alvar::Marker::UpdateContentBasic | ( | std::vector< Point< CvPoint2D64f > > & | _marker_corners_img, |
IplImage * | gray, | ||
Camera * | cam, | ||
int | frame_no = 0 |
||
) | [protected] |
Definition at line 188 of file Marker.cpp.
void alvar::Marker::UpdatePose | ( | std::vector< Point< CvPoint2D64f > > & | _marker_corners_img, |
Camera * | cam, | ||
int | orientation, | ||
int | frame_no = 0 , |
||
bool | update_pose = true |
||
) |
Updates the markers pose estimation.
Definition at line 306 of file Marker.cpp.
void alvar::Marker::Visualize | ( | IplImage * | image, |
Camera * | cam, | ||
CvScalar | color = CV_RGB(255,0,0) |
||
) | const |
Visualize the marker.
Definition at line 134 of file Marker.cpp.
void alvar::Marker::VisualizeMarkerContent | ( | IplImage * | image, |
Camera * | cam, | ||
double | datatext_point[2], | ||
double | content_point[2] | ||
) | const [protected, virtual] |
Reimplemented in alvar::MarkerData.
Definition at line 52 of file Marker.cpp.
void alvar::Marker::VisualizeMarkerError | ( | IplImage * | image, |
Camera * | cam, | ||
double | errortext_point[2] | ||
) | const [protected, virtual] |
Definition at line 91 of file Marker.cpp.
void alvar::Marker::VisualizeMarkerPose | ( | IplImage * | image, |
Camera * | cam, | ||
double | visualize2d_points[12][2], | ||
CvScalar | color = CV_RGB(255,0,0) |
||
) | const [protected] |
Definition at line 39 of file Marker.cpp.
const int alvar::Marker::DECODE_ERROR = 2 [static] |
double alvar::Marker::decode_error [protected] |
double alvar::Marker::edge_length [protected] |
double alvar::Marker::margin [protected] |
const int alvar::Marker::MARGIN_ERROR = 1 [static] |
double alvar::Marker::margin_error [protected] |
CvMat* alvar::Marker::marker_content [protected] |
std::vector<PointDouble> alvar::Marker::marker_corners |
std::vector<PointDouble> alvar::Marker::marker_corners_img |
std::vector<PointDouble> alvar::Marker::marker_margin_b |
std::vector<PointDouble> alvar::Marker::marker_margin_w |
std::vector<PointDouble> alvar::Marker::marker_points |
The current marker Pose.
int alvar::Marker::res [protected] |
std::vector<PointDouble> alvar::Marker::ros_marker_points_img |
const int alvar::Marker::TRACK_ERROR = 4 [static] |
double alvar::Marker::track_error [protected] |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW bool alvar::Marker::valid |