Visual Servoing Platform version 3.5.0
vpDetectorAprilTag.h
1/****************************************************************************
2 *
3 * ViSP, open source Visual Servoing Platform software.
4 * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5 *
6 * This software is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 * See the file LICENSE.txt at the root directory of this source
11 * distribution for additional information about the GNU GPL.
12 *
13 * For using ViSP with software that can not be combined with the GNU
14 * GPL, please contact Inria about acquiring a ViSP Professional
15 * Edition License.
16 *
17 * See http://visp.inria.fr for more information.
18 *
19 * This software was developed at:
20 * Inria Rennes - Bretagne Atlantique
21 * Campus Universitaire de Beaulieu
22 * 35042 Rennes Cedex
23 * France
24 *
25 * If you have questions regarding the use of this file, please contact
26 * Inria at visp@inria.fr
27 *
28 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30 *
31 * Description:
32 * Base class for April Tag detection.
33 *
34 *****************************************************************************/
35#ifndef _vpDetectorAprilTag_h_
36#define _vpDetectorAprilTag_h_
37
38#include <map>
39
40#include <visp3/core/vpConfig.h>
41
42#ifdef VISP_HAVE_APRILTAG
43#include <visp3/core/vpCameraParameters.h>
44#include <visp3/core/vpHomogeneousMatrix.h>
45#include <visp3/core/vpImage.h>
46#include <visp3/core/vpColor.h>
47#include <visp3/detection/vpDetectorBase.h>
48
216class VISP_EXPORT vpDetectorAprilTag : public vpDetectorBase
217{
218public:
230 TAG_STANDARD52h13
231 };
232
235 HOMOGRAPHY_VIRTUAL_VS,
237 DEMENTHON_VIRTUAL_VS,
239 LAGRANGE_VIRTUAL_VS,
241 BEST_RESIDUAL_VIRTUAL_VS,
244 HOMOGRAPHY_ORTHOGONAL_ITERATION
245 };
246
247 vpDetectorAprilTag(const vpAprilTagFamily &tagFamily = TAG_36h11,
248 const vpPoseEstimationMethod &poseEstimationMethod = HOMOGRAPHY_VIRTUAL_VS);
251 virtual ~vpDetectorAprilTag();
252
253 bool detect(const vpImage<unsigned char> &I);
254 bool detect(const vpImage<unsigned char> &I, double tagSize, const vpCameraParameters &cam,
255 std::vector<vpHomogeneousMatrix> &cMo_vec, std::vector<vpHomogeneousMatrix> *cMo_vec2=NULL,
256 std::vector<double> *projErrors=NULL, std::vector<double> *projErrors2=NULL);
257
258 bool getPose(size_t tagIndex, double tagSize, const vpCameraParameters &cam,
260 double *projError=NULL, double *projError2=NULL);
261
265 inline vpPoseEstimationMethod getPoseEstimationMethod() const { return m_poseEstimationMethod; }
266
267 std::vector<std::vector<vpImagePoint> > getTagsCorners() const;
268 std::vector<int> getTagsId() const;
269 std::vector<std::vector<vpPoint> > getTagsPoints3D(const std::vector<int>& tagsId, const std::map<int, double>& tagsSize) const;
270
271 void setAprilTagDecodeSharpening(double decodeSharpening);
272 void setAprilTagFamily(const vpAprilTagFamily &tagFamily);
273 void setAprilTagNbThreads(int nThreads);
274 void setAprilTagPoseEstimationMethod(const vpPoseEstimationMethod &poseEstimationMethod);
275 void setAprilTagQuadDecimate(float quadDecimate);
276 void setAprilTagQuadSigma(float quadSigma);
277 void setAprilTagRefineDecode(bool refineDecode);
278 void setAprilTagRefineEdges(bool refineEdges);
279 void setAprilTagRefinePose(bool refinePose);
280
283 inline void setDisplayTag(bool display, const vpColor &color=vpColor::none,
284 unsigned int thickness=2) {
285 m_displayTag = display;
286 m_displayTagColor = color;
287 m_displayTagThickness = thickness;
288 }
289
290 friend void swap(vpDetectorAprilTag &o1, vpDetectorAprilTag &o2);
291
292 void setZAlignedWithCameraAxis(bool zAlignedWithCameraFrame);
293
294protected:
300
301private:
302 vpCameraParameters m_defaultCam;
303
304 // PIMPL idiom
305 class Impl;
306 Impl *m_impl;
307};
308
309inline std::ostream &operator<<(std::ostream &os, const vpDetectorAprilTag::vpPoseEstimationMethod &method)
310{
311 switch (method) {
313 os << "HOMOGRAPHY";
314 break;
315
317 os << "HOMOGRAPHY_VIRTUAL_VS";
318 break;
319
321 os << "DEMENTHON_VIRTUAL_VS";
322 break;
323
325 os << "LAGRANGE_VIRTUAL_VS";
326 break;
327
329 os << "BEST_RESIDUAL_VIRTUAL_VS";
330 break;
331
333 os << "HOMOGRAPHY_ORTHOGONAL_ITERATION";
334 break;
335
336 default:
337 os << "ERROR_UNKNOWN_POSE_METHOD!";
338 break;
339 }
340
341 return os;
342}
343
344inline std::ostream &operator<<(std::ostream &os, const vpDetectorAprilTag::vpAprilTagFamily &tagFamily)
345{
346 switch (tagFamily) {
348 os << "36h11";
349 break;
350
352 os << "36h10";
353 break;
354
356 os << "36artoolkit";
357 break;
358
360 os << "25h9";
361 break;
362
364 os << "25h7";
365 break;
366
368 os << "16h5";
369 break;
370
372 os << "CIRCLE21h7";
373 break;
374
376 os << "CIRCLE49h12";
377 break;
378
380 os << "CUSTOM48h12";
381 break;
382
384 os << "STANDARD52h13";
385 break;
386
388 os << "STANDARD41h12";
389 break;
390
391 default:
392 break;
393 }
394
395 return os;
396}
397
398#endif
399#endif
friend std::ostream & operator<<(std::ostream &s, const vpArray2D< Type > &A)
Definition: vpArray2D.h:493
Generic class defining intrinsic camera parameters.
Class to define RGB colors available for display functionnalities.
Definition: vpColor.h:158
static const vpColor none
Definition: vpColor.h:229
void setDisplayTag(bool display, const vpColor &color=vpColor::none, unsigned int thickness=2)
vpPoseEstimationMethod getPoseEstimationMethod() const
unsigned int m_displayTagThickness
vpAprilTagFamily m_tagFamily
vpPoseEstimationMethod m_poseEstimationMethod
@ TAG_CIRCLE21h7
AprilTag Circle21h7 pattern.
@ TAG_25h7
DEPRECATED AND POOR DETECTION PERFORMANCE.
@ TAG_36ARTOOLKIT
DEPRECATED AND WILL NOT DETECT ARTOOLKIT TAGS.
@ TAG_25h9
AprilTag 25h9 pattern.
@ TAG_CUSTOM48h12
AprilTag Custom48h12 pattern.
@ TAG_36h11
AprilTag 36h11 pattern (recommended)
@ TAG_STANDARD52h13
AprilTag Standard52h13 pattern.
@ TAG_16h5
AprilTag 16h5 pattern.
@ TAG_STANDARD41h12
AprilTag Standard41h12 pattern.
@ TAG_CIRCLE49h12
AprilTag Circle49h12 pattern.
virtual bool detect(const vpImage< unsigned char > &I)=0
Implementation of an homogeneous matrix and operations on such kind of matrices.