Visual Servoing Platform  version 3.6.1 under development (2024-07-27)
vpMbGenericTracker.h
1 /*
2  * ViSP, open source Visual Servoing Platform software.
3  * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
4  *
5  * This software is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ViSP with software that can not be combined with the GNU
13  * GPL, please contact Inria about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * See https://visp.inria.fr for more information.
17  *
18  * This software was developed at:
19  * Inria Rennes - Bretagne Atlantique
20  * Campus Universitaire de Beaulieu
21  * 35042 Rennes Cedex
22  * France
23  *
24  * If you have questions regarding the use of this file, please contact
25  * Inria at visp@inria.fr
26  *
27  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29  *
30  * Description:
31  * Generic model-based tracker.
32  */
33 
39 #ifndef _vpMbGenericTracker_h_
40 #define _vpMbGenericTracker_h_
41 
42 #include <visp3/core/vpConfig.h>
43 #include <visp3/mbt/vpMbDepthDenseTracker.h>
44 #include <visp3/mbt/vpMbDepthNormalTracker.h>
45 #include <visp3/mbt/vpMbEdgeTracker.h>
46 #include <visp3/mbt/vpMbKltTracker.h>
47 
48 #ifdef VISP_HAVE_NLOHMANN_JSON
49 #include <nlohmann/json_fwd.hpp>
50 #include <visp3/core/vpJsonParsing.h>
51 #endif
52 
204 class VISP_EXPORT vpMbGenericTracker : public vpMbTracker
205 {
206 public:
208  {
209  EDGE_TRACKER = 1 << 0,
210 #if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO))
211  KLT_TRACKER = 1 << 1,
212 #endif
213  DEPTH_NORMAL_TRACKER = 1 << 2,
214  DEPTH_DENSE_TRACKER = 1 << 3
215  };
216 
218  vpMbGenericTracker(unsigned int nbCameras, int trackerType = EDGE_TRACKER);
219  VP_EXPLICIT vpMbGenericTracker(const std::vector<int> &trackerTypes);
220  vpMbGenericTracker(const std::vector<std::string> &cameraNames, const std::vector<int> &trackerTypes);
221 
222  virtual ~vpMbGenericTracker() VP_OVERRIDE;
223 
224  virtual double computeCurrentProjectionError(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &_cMo,
225  const vpCameraParameters &_cam) VP_OVERRIDE;
226  virtual double computeCurrentProjectionError(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &_cMo,
227  const vpCameraParameters &_cam);
228 
229  virtual void display(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
230  const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) VP_OVERRIDE;
231  virtual void display(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
232  const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) VP_OVERRIDE;
233 
234  virtual void display(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
235  const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo, const vpCameraParameters &cam1,
236  const vpCameraParameters &cam2, const vpColor &color, unsigned int thickness = 1,
237  bool displayFullModel = false);
238  virtual void display(const vpImage<vpRGBa> &I1, const vpImage<vpRGBa> &I2, const vpHomogeneousMatrix &c1Mo,
239  const vpHomogeneousMatrix &c2Mo, const vpCameraParameters &cam1, const vpCameraParameters &cam2,
240  const vpColor &color, unsigned int thickness = 1, bool displayFullModel = false);
241 
242  virtual void display(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
243  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
244  const std::map<std::string, vpCameraParameters> &mapOfCameraParameters, const vpColor &col,
245  unsigned int thickness = 1, bool displayFullModel = false);
246  virtual void display(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfImages,
247  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
248  const std::map<std::string, vpCameraParameters> &mapOfCameraParameters, const vpColor &col,
249  unsigned int thickness = 1, bool displayFullModel = false);
250 
251  virtual std::vector<std::string> getCameraNames() const;
252 
253  using vpMbTracker::getCameraParameters;
254  virtual void getCameraParameters(vpCameraParameters &camera) const VP_OVERRIDE;
255  virtual void getCameraParameters(vpCameraParameters &cam1, vpCameraParameters &cam2) const;
256  virtual void getCameraParameters(std::map<std::string, vpCameraParameters> &mapOfCameraParameters) const;
257 
258  virtual std::map<std::string, int> getCameraTrackerTypes() const;
259 
260  using vpMbTracker::getClipping;
261  virtual void getClipping(unsigned int &clippingFlag1, unsigned int &clippingFlag2) const;
262  virtual void getClipping(std::map<std::string, unsigned int> &mapOfClippingFlags) const;
263 
264  virtual inline vpColVector getError() const VP_OVERRIDE { return m_error; }
265 
266  virtual vpMbHiddenFaces<vpMbtPolygon> &getFaces() VP_OVERRIDE;
267  virtual vpMbHiddenFaces<vpMbtPolygon> &getFaces(const std::string &cameraName);
268 
269 #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
270  virtual std::list<vpMbtDistanceCircle *> &getFeaturesCircle();
271  virtual std::list<vpMbtDistanceKltCylinder *> &getFeaturesKltCylinder();
272  virtual std::list<vpMbtDistanceKltPoints *> &getFeaturesKlt();
273 #endif
274 
275  virtual std::vector<std::vector<double> > getFeaturesForDisplay();
276  virtual void getFeaturesForDisplay(std::map<std::string, std::vector<std::vector<double> > > &mapOfFeatures);
277 
278  virtual double getGoodMovingEdgesRatioThreshold() const;
279 
280 #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
281  virtual std::vector<vpImagePoint> getKltImagePoints() const;
282  virtual std::map<int, vpImagePoint> getKltImagePointsWithId() const;
283 
284  virtual unsigned int getKltMaskBorder() const;
285  virtual int getKltNbPoints() const;
286 
287  virtual vpKltOpencv getKltOpencv() const;
288  virtual void getKltOpencv(vpKltOpencv &klt1, vpKltOpencv &klt2) const;
289  virtual void getKltOpencv(std::map<std::string, vpKltOpencv> &mapOfKlts) const;
290 
291 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
292  virtual std::vector<cv::Point2f> getKltPoints() const;
293 #endif
294 
295  virtual double getKltThresholdAcceptation() const;
296 #endif
297 
298  virtual void getLcircle(std::list<vpMbtDistanceCircle *> &circlesList, unsigned int level = 0) const;
299  virtual void getLcircle(const std::string &cameraName, std::list<vpMbtDistanceCircle *> &circlesList,
300  unsigned int level = 0) const;
301  virtual void getLcylinder(std::list<vpMbtDistanceCylinder *> &cylindersList, unsigned int level = 0) const;
302  virtual void getLcylinder(const std::string &cameraName, std::list<vpMbtDistanceCylinder *> &cylindersList,
303  unsigned int level = 0) const;
304  virtual void getLline(std::list<vpMbtDistanceLine *> &linesList, unsigned int level = 0) const;
305  virtual void getLline(const std::string &cameraName, std::list<vpMbtDistanceLine *> &linesList,
306  unsigned int level = 0) const;
307 
308  virtual std::vector<std::vector<double> > getModelForDisplay(unsigned int width, unsigned int height,
309  const vpHomogeneousMatrix &cMo,
310  const vpCameraParameters &cam,
311  bool displayFullModel = false) VP_OVERRIDE;
312  virtual void getModelForDisplay(std::map<std::string, std::vector<std::vector<double> > > &mapOfModels,
313  const std::map<std::string, unsigned int> &mapOfwidths,
314  const std::map<std::string, unsigned int> &mapOfheights,
315  const std::map<std::string, vpHomogeneousMatrix> &mapOfcMos,
316  const std::map<std::string, vpCameraParameters> &mapOfCams,
317  bool displayFullModel = false);
318 
319  virtual vpMe getMovingEdge() const;
320  virtual void getMovingEdge(vpMe &me1, vpMe &me2) const;
321  virtual void getMovingEdge(std::map<std::string, vpMe> &mapOfMovingEdges) const;
322 
326  virtual inline unsigned int getNbFeaturesDepthDense() const { return m_nb_feat_depthDense; }
327 
331  virtual inline unsigned int getNbFeaturesDepthNormal() const { return m_nb_feat_depthNormal; }
332 
338  virtual inline unsigned int getNbFeaturesEdge() const { return m_nb_feat_edge; }
339 
343  virtual inline unsigned int getNbFeaturesKlt() const { return m_nb_feat_klt; }
344 
345  virtual unsigned int getNbPoints(unsigned int level = 0) const;
346  virtual void getNbPoints(std::map<std::string, unsigned int> &mapOfNbPoints, unsigned int level = 0) const;
347 
348  virtual unsigned int getNbPolygon() const VP_OVERRIDE;
349  virtual void getNbPolygon(std::map<std::string, unsigned int> &mapOfNbPolygons) const;
350 
351  virtual vpMbtPolygon *getPolygon(unsigned int index) VP_OVERRIDE;
352  virtual vpMbtPolygon *getPolygon(const std::string &cameraName, unsigned int index);
353 
354  virtual std::pair<std::vector<vpPolygon>, std::vector<std::vector<vpPoint> > >
355  getPolygonFaces(bool orderPolygons = true, bool useVisibility = true, bool clipPolygon = false) VP_OVERRIDE;
356  virtual void getPolygonFaces(std::map<std::string, std::vector<vpPolygon> > &mapOfPolygons,
357  std::map<std::string, std::vector<std::vector<vpPoint> > > &mapOfPoints,
358  bool orderPolygons = true, bool useVisibility = true, bool clipPolygon = false);
359 
360  using vpMbTracker::getPose;
361  virtual void getPose(vpHomogeneousMatrix &cMo) const VP_OVERRIDE;
362  virtual void getPose(vpHomogeneousMatrix &c1Mo, vpHomogeneousMatrix &c2Mo) const;
363  virtual void getPose(std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses) const;
364 
365  virtual std::string getReferenceCameraName() const;
366 
367  virtual inline vpColVector getRobustWeights() const VP_OVERRIDE { return m_w; }
368 
369  virtual int getTrackerType() const;
370 
371  virtual void init(const vpImage<unsigned char> &I) VP_OVERRIDE;
372 
373 #ifdef VISP_HAVE_MODULE_GUI
375  virtual void initClick(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
376  const std::string &initFile1, const std::string &initFile2, bool displayHelp = false,
379  virtual void initClick(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2, const std::string &initFile1,
380  const std::string &initFile2, bool displayHelp = false,
383 
384  virtual void
385  initClick(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
386  const std::map<std::string, std::string> &mapOfInitFiles, bool displayHelp = false,
387  const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
388  virtual void
389  initClick(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfImages,
390  const std::map<std::string, std::string> &mapOfInitFiles, bool displayHelp = false,
391  const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
392 #endif
393 
395  virtual void initFromPoints(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
396  const std::string &initFile1, const std::string &initFile2);
397  virtual void initFromPoints(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2,
398  const std::string &initFile1, const std::string &initFile2);
399 
400  virtual void initFromPoints(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
401  const std::map<std::string, std::string> &mapOfInitPoints);
402  virtual void initFromPoints(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
403  const std::map<std::string, std::string> &mapOfInitPoints);
404 
406  virtual void initFromPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo) VP_OVERRIDE;
407  virtual void initFromPose(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
408  const std::string &initFile1, const std::string &initFile2);
409  virtual void initFromPose(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2,
410  const std::string &initFile1, const std::string &initFile2);
411 
412  virtual void initFromPose(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
413  const std::map<std::string, std::string> &mapOfInitPoses);
414  virtual void initFromPose(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
415  const std::map<std::string, std::string> &mapOfInitPoses);
416 
417  virtual void initFromPose(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
418  const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo);
419  virtual void initFromPose(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2,
420  const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo);
421 
422  virtual void initFromPose(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
423  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
424  virtual void initFromPose(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
425  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
426 
427  virtual void loadConfigFile(const std::string &configFile, bool verbose = true) VP_OVERRIDE;
428  virtual void loadConfigFile(const std::string &configFile1, const std::string &configFile2, bool verbose = true);
429  virtual void loadConfigFile(const std::map<std::string, std::string> &mapOfConfigFiles, bool verbose = true);
430 
431 #ifdef VISP_HAVE_NLOHMANN_JSON
432  virtual void saveConfigFile(const std::string &settingsFile) const;
433 #endif
434 
435  virtual void loadModel(const std::string &modelFile, bool verbose = false,
436  const vpHomogeneousMatrix &T = vpHomogeneousMatrix()) VP_OVERRIDE;
437  virtual void loadModel(const std::string &modelFile1, const std::string &modelFile2, bool verbose = false,
440 
441  virtual void
442  loadModel(const std::map<std::string, std::string> &mapOfModelFiles, bool verbose = false,
443  const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
444 
445  virtual void reInitModel(const vpImage<unsigned char> &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo,
446  bool verbose = false, const vpHomogeneousMatrix &T = vpHomogeneousMatrix());
447  virtual void reInitModel(const vpImage<vpRGBa> &I_color, const std::string &cad_name, const vpHomogeneousMatrix &cMo,
448  bool verbose = false, const vpHomogeneousMatrix &T = vpHomogeneousMatrix());
449 
450  virtual void reInitModel(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
451  const std::string &cad_name1, const std::string &cad_name2, const vpHomogeneousMatrix &c1Mo,
452  const vpHomogeneousMatrix &c2Mo, bool verbose = false,
455  virtual void reInitModel(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2,
456  const std::string &cad_name1, const std::string &cad_name2, const vpHomogeneousMatrix &c1Mo,
457  const vpHomogeneousMatrix &c2Mo, bool verbose = false,
460 
461  virtual void
462  reInitModel(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
463  const std::map<std::string, std::string> &mapOfModelFiles,
464  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses, bool verbose = false,
465  const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
466  virtual void
467  reInitModel(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
468  const std::map<std::string, std::string> &mapOfModelFiles,
469  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses, bool verbose = false,
470  const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
471 
472  virtual void resetTracker() VP_OVERRIDE;
473 
474  virtual void setAngleAppear(const double &a) VP_OVERRIDE;
475  virtual void setAngleAppear(const double &a1, const double &a2);
476  virtual void setAngleAppear(const std::map<std::string, double> &mapOfAngles);
477 
478  virtual void setAngleDisappear(const double &a) VP_OVERRIDE;
479  virtual void setAngleDisappear(const double &a1, const double &a2);
480  virtual void setAngleDisappear(const std::map<std::string, double> &mapOfAngles);
481 
482  virtual void setCameraParameters(const vpCameraParameters &camera) VP_OVERRIDE;
483  virtual void setCameraParameters(const vpCameraParameters &camera1, const vpCameraParameters &camera2);
484  virtual void setCameraParameters(const std::map<std::string, vpCameraParameters> &mapOfCameraParameters);
485 
486  virtual void setCameraTransformationMatrix(const std::string &cameraName,
487  const vpHomogeneousMatrix &cameraTransformationMatrix);
488  virtual void
489  setCameraTransformationMatrix(const std::map<std::string, vpHomogeneousMatrix> &mapOfTransformationMatrix);
490 
491  virtual void setClipping(const unsigned int &flags) VP_OVERRIDE;
492  virtual void setClipping(const unsigned int &flags1, const unsigned int &flags2);
493  virtual void setClipping(const std::map<std::string, unsigned int> &mapOfClippingFlags);
494 
495  virtual void setDepthDenseFilteringMaxDistance(double maxDistance);
496  virtual void setDepthDenseFilteringMethod(int method);
497  virtual void setDepthDenseFilteringMinDistance(double minDistance);
498  virtual void setDepthDenseFilteringOccupancyRatio(double occupancyRatio);
499  virtual void setDepthDenseSamplingStep(unsigned int stepX, unsigned int stepY);
500 
501  virtual void setDepthNormalFaceCentroidMethod(const vpMbtFaceDepthNormal::vpFaceCentroidType &method);
502  virtual void setDepthNormalFeatureEstimationMethod(const vpMbtFaceDepthNormal::vpFeatureEstimationType &method);
503  virtual void setDepthNormalPclPlaneEstimationMethod(int method);
504  virtual void setDepthNormalPclPlaneEstimationRansacMaxIter(int maxIter);
505  virtual void setDepthNormalPclPlaneEstimationRansacThreshold(double threshold);
506  virtual void setDepthNormalSamplingStep(unsigned int stepX, unsigned int stepY);
507 
508  virtual void setDisplayFeatures(bool displayF) VP_OVERRIDE;
509 
510  virtual void setFarClippingDistance(const double &dist) VP_OVERRIDE;
511  virtual void setFarClippingDistance(const double &dist1, const double &dist2);
512  virtual void setFarClippingDistance(const std::map<std::string, double> &mapOfClippingDists);
513 
514  virtual void setFeatureFactors(const std::map<vpTrackerType, double> &mapOfFeatureFactors);
515 
516  virtual void setGoodMovingEdgesRatioThreshold(double threshold);
517 
518 #ifdef VISP_HAVE_OGRE
519  virtual void setGoodNbRayCastingAttemptsRatio(const double &ratio);
520  virtual void setNbRayCastingAttemptsForVisibility(const unsigned int &attempts);
521 #endif
522 
523 #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
524  virtual void setKltMaskBorder(const unsigned int &e);
525  virtual void setKltMaskBorder(const unsigned int &e1, const unsigned int &e2);
526  virtual void setKltMaskBorder(const std::map<std::string, unsigned int> &mapOfErosions);
527 
528  virtual void setKltOpencv(const vpKltOpencv &t);
529  virtual void setKltOpencv(const vpKltOpencv &t1, const vpKltOpencv &t2);
530  virtual void setKltOpencv(const std::map<std::string, vpKltOpencv> &mapOfKlts);
531 
532  virtual void setKltThresholdAcceptation(double th);
533 #endif
534 
535  virtual void setLod(bool useLod, const std::string &name = "") VP_OVERRIDE;
536 
537  virtual void setMask(const vpImage<bool> &mask) VP_OVERRIDE;
538 
539  virtual void setMinLineLengthThresh(double minLineLengthThresh, const std::string &name = "") VP_OVERRIDE;
540  virtual void setMinPolygonAreaThresh(double minPolygonAreaThresh, const std::string &name = "") VP_OVERRIDE;
541 
542  virtual void setMovingEdge(const vpMe &me);
543  virtual void setMovingEdge(const vpMe &me1, const vpMe &me2);
544  virtual void setMovingEdge(const std::map<std::string, vpMe> &mapOfMe);
545 
546  virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE;
547  virtual void setNearClippingDistance(const double &dist1, const double &dist2);
548  virtual void setNearClippingDistance(const std::map<std::string, double> &mapOfDists);
549 
550  virtual void setOgreShowConfigDialog(bool showConfigDialog) VP_OVERRIDE;
551  virtual void setOgreVisibilityTest(const bool &v) VP_OVERRIDE;
552 
553  virtual void setOptimizationMethod(const vpMbtOptimizationMethod &opt) VP_OVERRIDE;
554 
555  virtual void setPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
556  virtual void setPose(const vpImage<vpRGBa> &I_color, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
557 
558  virtual void setPose(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
559  const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo);
560  virtual void setPose(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2,
561  const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo);
562 
563  virtual void setPose(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
564  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
565  virtual void setPose(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
566  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
567 
568  virtual void setProjectionErrorComputation(const bool &flag) VP_OVERRIDE;
569 
570  virtual void setProjectionErrorDisplay(bool display) VP_OVERRIDE;
571  virtual void setProjectionErrorDisplayArrowLength(unsigned int length) VP_OVERRIDE;
572  virtual void setProjectionErrorDisplayArrowThickness(unsigned int thickness) VP_OVERRIDE;
573 
574  virtual void setReferenceCameraName(const std::string &referenceCameraName);
575 
576  virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE;
577 
578  virtual void setTrackerType(int type);
579  virtual void setTrackerType(const std::map<std::string, int> &mapOfTrackerTypes);
580 
581  virtual void setUseDepthDenseTracking(const std::string &name, const bool &useDepthDenseTracking);
582  virtual void setUseDepthNormalTracking(const std::string &name, const bool &useDepthNormalTracking);
583  virtual void setUseEdgeTracking(const std::string &name, const bool &useEdgeTracking);
584 #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
585  virtual void setUseKltTracking(const std::string &name, const bool &useKltTracking);
586 #endif
587 
588  virtual void testTracking() VP_OVERRIDE;
589 
590  virtual void track(const vpImage<unsigned char> &I) VP_OVERRIDE;
591  virtual void track(const vpImage<vpRGBa> &I_color) VP_OVERRIDE;
592 
593  virtual void track(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2);
594  virtual void track(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2);
595 
596  virtual void track(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages);
597  virtual void track(std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages);
598 
599 #if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_COMMON)
600  virtual void track(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
601  std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds);
602  virtual void track(std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
603  std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds);
604 #endif
605 
606  virtual void track(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
607  std::map<std::string, const std::vector<vpColVector> *> &mapOfPointClouds,
608  std::map<std::string, unsigned int> &mapOfPointCloudWidths,
609  std::map<std::string, unsigned int> &mapOfPointCloudHeights);
610  virtual void track(std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
611  std::map<std::string, const std::vector<vpColVector> *> &mapOfPointClouds,
612  std::map<std::string, unsigned int> &mapOfPointCloudWidths,
613  std::map<std::string, unsigned int> &mapOfPointCloudHeights);
614 
615  virtual void track(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
616  std::map<std::string, const vpMatrix *> &mapOfPointClouds,
617  std::map<std::string, unsigned int> &mapOfPointCloudWidths,
618  std::map<std::string, unsigned int> &mapOfPointCloudHeights);
619  virtual void track(std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
620  std::map<std::string, const vpMatrix *> &mapOfPointClouds,
621  std::map<std::string, unsigned int> &mapOfPointCloudWidths,
622  std::map<std::string, unsigned int> &mapOfPointCloudHeights);
623 
624 protected:
625  virtual void computeProjectionError();
626 
627  virtual void computeVVS(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages);
628 
629  virtual void computeVVSInit() VP_OVERRIDE;
630  virtual void computeVVSInit(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages);
631  virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE;
632  virtual void computeVVSInteractionMatrixAndResidu(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
633  std::map<std::string, vpVelocityTwistMatrix> &mapOfVelocityTwist);
634  using vpMbTracker::computeVVSWeights;
635  virtual void computeVVSWeights();
636 
637  virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace = 0,
638  const std::string &name = "") VP_OVERRIDE;
639 
640  virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace = 0,
641  const std::string &name = "") VP_OVERRIDE;
642 
643  virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE;
644 
645  virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE;
646 
647  virtual void loadConfigFileXML(const std::string &configFile, bool verbose = true);
648 #ifdef VISP_HAVE_NLOHMANN_JSON
649  virtual void loadConfigFileJSON(const std::string &configFile, bool verbose = true);
650 #endif
651 
652 #if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_COMMON)
653  virtual void preTracking(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
654  std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds);
655 #endif
656  virtual void preTracking(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
657  std::map<std::string, const std::vector<vpColVector> *> &mapOfPointClouds,
658  std::map<std::string, unsigned int> &mapOfPointCloudWidths,
659  std::map<std::string, unsigned int> &mapOfPointCloudHeights);
660  virtual void preTracking(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
661  std::map<std::string, const vpMatrix *> &mapOfPointClouds,
662  std::map<std::string, unsigned int> &mapOfPointCloudWidths,
663  std::map<std::string, unsigned int> &mapOfPointCloudHeights);
664 
665 private:
666  class TrackerWrapper : public vpMbEdgeTracker,
667 #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
668  public vpMbKltTracker,
669 #endif
670  public vpMbDepthNormalTracker,
671  public vpMbDepthDenseTracker
672  {
673  friend class vpMbGenericTracker;
674 #ifdef VISP_HAVE_NLOHMANN_JSON
675  friend void to_json(nlohmann::json &j, const TrackerWrapper &t);
676  friend void from_json(const nlohmann::json &j, TrackerWrapper &t);
677 #endif
678 
679  public:
683  vpMatrix m_L;
685  int m_trackerType;
690 
691  TrackerWrapper();
692  explicit TrackerWrapper(int trackerType);
693 
694  virtual inline vpColVector getError() const VP_OVERRIDE { return m_error; }
695 
696  virtual inline vpColVector getRobustWeights() const VP_OVERRIDE { return m_w; }
697 
698  virtual inline int getTrackerType() const { return m_trackerType; }
699 
700  virtual void display(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
701  const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) VP_OVERRIDE;
702  virtual void display(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
703  const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) VP_OVERRIDE;
704 
705  virtual std::vector<std::vector<double> > getFeaturesForDisplay();
706 
707  virtual std::vector<std::vector<double> > getModelForDisplay(unsigned int width, unsigned int height,
708  const vpHomogeneousMatrix &cMo,
709  const vpCameraParameters &cam,
710  bool displayFullModel = false) VP_OVERRIDE;
711 
712  virtual void init(const vpImage<unsigned char> &I) VP_OVERRIDE;
713 
714  virtual void loadConfigFile(const std::string &configFile, bool verbose = true) VP_OVERRIDE;
715 
716  virtual void reInitModel(const vpImage<unsigned char> &I, const std::string &cad_name,
717  const vpHomogeneousMatrix &cMo, bool verbose = false,
718  const vpHomogeneousMatrix &T = vpHomogeneousMatrix()) VP_OVERRIDE;
719  virtual void reInitModel(const vpImage<vpRGBa> &I_color, const std::string &cad_name,
720  const vpHomogeneousMatrix &cMo, bool verbose = false,
722 
723  virtual void resetTracker() VP_OVERRIDE;
724 
725  virtual void setCameraParameters(const vpCameraParameters &camera) VP_OVERRIDE;
726 
727  virtual void setClipping(const unsigned int &flags) VP_OVERRIDE;
728 
729  virtual void setFarClippingDistance(const double &dist) VP_OVERRIDE;
730 
731  virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE;
732 
733  virtual void setOgreVisibilityTest(const bool &v) VP_OVERRIDE;
734 
735  virtual void setPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
736  virtual void setPose(const vpImage<vpRGBa> &I_color, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
737 
738  virtual void setProjectionErrorComputation(const bool &flag) VP_OVERRIDE;
739 
740  virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE;
741 
742  virtual void setTrackerType(int type);
743 
744  virtual void testTracking() VP_OVERRIDE;
745 
746  virtual void track(const vpImage<unsigned char> &I) VP_OVERRIDE;
747  virtual void track(const vpImage<vpRGBa> &I_color) VP_OVERRIDE;
748 #if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_COMMON)
749  // Fix error: using declaration ‘using vpMbDepthDenseTracker::setPose’ conflicts with a previous
750  // using declaration that occurs with g++ 4.6.3 on Ubuntu 12.04
751 #if !((__GNUC__ == 4) && (__GNUC_MINOR__ == 6))
753 #endif
756  virtual void track(const vpImage<unsigned char> *const ptr_I,
757  const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud);
758 #endif
759 
760  protected:
761  virtual void computeVVS(const vpImage<unsigned char> *const ptr_I);
762  virtual void computeVVSInit() VP_OVERRIDE;
763  virtual void computeVVSInit(const vpImage<unsigned char> *const ptr_I);
764  virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE;
766  virtual void computeVVSInteractionMatrixAndResidu(const vpImage<unsigned char> *const ptr_I);
768  virtual void computeVVSWeights() VP_OVERRIDE;
769 
770  virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace = 0,
771  const std::string &name = "") VP_OVERRIDE;
772 
773  virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace = 0,
774  const std::string &name = "") VP_OVERRIDE;
775 
776  virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE;
777  virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE;
778 
779  virtual void initMbtTracking(const vpImage<unsigned char> *const ptr_I);
780 
781 #if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_COMMON)
782  virtual void postTracking(const vpImage<unsigned char> *const ptr_I,
783  const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud);
784  virtual void preTracking(const vpImage<unsigned char> *const ptr_I,
785  const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud);
786 #endif
787  virtual void postTracking(const vpImage<unsigned char> *const ptr_I = nullptr, const unsigned int pointcloud_width = 0,
788  const unsigned int pointcloud_height = 0);
789  virtual void preTracking(const vpImage<unsigned char> *const ptr_I = nullptr,
790  const std::vector<vpColVector> *const point_cloud = nullptr,
791  const unsigned int pointcloud_width = 0, const unsigned int pointcloud_height = 0);
792  virtual void preTracking(const vpImage<unsigned char> *const ptr_I = nullptr,
793  const vpMatrix *const point_cloud = nullptr,
794  const unsigned int pointcloud_width = 0, const unsigned int pointcloud_height = 0);
795 
796  virtual void reInitModel(const vpImage<unsigned char> *const I, const vpImage<vpRGBa> *const I_color,
797  const std::string &cad_name, const vpHomogeneousMatrix &cMo, bool verbose = false,
799 
800 #if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_COMMON)
801  // Fix error: using declaration ‘using vpMbDepthDenseTracker::track’ conflicts with a previous
802  // using declaration that occurs with g++ 4.6.3 on Ubuntu 12.04
803 #if !((__GNUC__ == 4) && (__GNUC_MINOR__ == 6))
805 #endif
807 #endif
808 #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
809  virtual void setPose(const vpImage<unsigned char> *I, const vpImage<vpRGBa> *I_color,
810  const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
811 #else
812  virtual void setPose(const vpImage<unsigned char> *I, const vpImage<vpRGBa> *I_color,
813  const vpHomogeneousMatrix &cdMo);
814 #endif
815  };
816 #ifdef VISP_HAVE_NLOHMANN_JSON
817  friend void to_json(nlohmann::json &j, const TrackerWrapper &t);
818  friend void from_json(const nlohmann::json &j, TrackerWrapper &t);
819 #endif
820 
821 protected:
828  std::map<std::string, vpHomogeneousMatrix> m_mapOfCameraTransformationMatrix;
830  std::map<vpTrackerType, double> m_mapOfFeatureFactors;
833  std::map<std::string, TrackerWrapper *> m_mapOfTrackers;
846 
848  unsigned int m_nb_feat_edge;
850  unsigned int m_nb_feat_klt;
852  unsigned int m_nb_feat_depthNormal;
854  unsigned int m_nb_feat_depthDense;
855 };
856 
857 #ifdef VISP_HAVE_NLOHMANN_JSON
858 
859 #define MBT_JSON_SETTINGS_VERSION "1.0"
860 
861 // Serialize tracker type enumeration
862 #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
863 NLOHMANN_JSON_SERIALIZE_ENUM(vpMbGenericTracker::vpTrackerType, {
868  });
869 #else
870 NLOHMANN_JSON_SERIALIZE_ENUM(vpMbGenericTracker::vpTrackerType, {
874 });
875 #endif
876 
883 inline void to_json(nlohmann::json &j, const vpMbGenericTracker::TrackerWrapper &t)
884 {
885  // Common tracker attributes
886  const static std::vector<vpMbGenericTracker::vpTrackerType> trackerTypes = {
888  #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
890  #endif
893  };
894  j = nlohmann::json {
895  {"camera", t.m_cam},
896  {"type", flagsToJSON(t.m_trackerType, trackerTypes)},
897  {"angleAppear", vpMath::deg(t.getAngleAppear())},
898  {"angleDisappear", vpMath::deg(t.getAngleDisappear())},
899  {"lod", {
900  {"useLod", t.useLodGeneral},
901  {"minLineLengthThresholdGeneral", t.minLineLengthThresholdGeneral},
902  {"minPolygonAreaThresholdGeneral", t.minPolygonAreaThresholdGeneral}
903  }},
904  {"display", {
905  {"features", t.displayFeatures},
906  {"projectionError", t.m_projectionErrorDisplay}
907  }},
908  {"visibilityTest", {
909  {"ogre", t.useOgre},
910  {"scanline", t.useScanLine}
911  }},
912  {"clipping", {
913  {"flags", clippingFlagsToJSON(t.getClipping())},
914  {"near", t.getNearClippingDistance()},
915  {"far", t.getFarClippingDistance()},
916  }}
917  };
918  //Check tracker type: for each type, add settings to json if the tracker t does use the features
919  //Edge tracker settings
920  if (t.m_trackerType & vpMbGenericTracker::EDGE_TRACKER) {
921  j["edge"] = t.me;
922  }
923  //KLT tracker settings
924 #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
925  if (t.m_trackerType & vpMbGenericTracker::KLT_TRACKER) {
926  nlohmann::json klt = nlohmann::json {
927  {"maxFeatures", t.tracker.getMaxFeatures()},
928  {"windowSize", t.tracker.getWindowSize()},
929  {"quality", t.tracker.getQuality()},
930  {"minDistance", t.tracker.getMinDistance()},
931  {"harris", t.tracker.getHarrisFreeParameter()},
932  {"blockSize", t.tracker.getBlockSize()},
933  {"pyramidLevels", t.tracker.getPyramidLevels()}
934  };
935  klt["maskBorder"] = t.maskBorder;
936  j["klt"] = klt;
937  }
938 #endif
939  //Depth normal settings
940  if (t.m_trackerType & vpMbGenericTracker::DEPTH_NORMAL_TRACKER) {
941  j["normals"] = nlohmann::json {
942  {"featureEstimationMethod", t.m_depthNormalFeatureEstimationMethod},
943  {"pcl", {
944  {"method", t.m_depthNormalPclPlaneEstimationMethod},
945  {"ransacMaxIter", t.m_depthNormalPclPlaneEstimationRansacMaxIter},
946  {"ransacThreshold", t.m_depthNormalPclPlaneEstimationRansacThreshold}
947  }},
948  {"sampling", {
949  {"x", t.m_depthNormalSamplingStepX},
950  {"y", t.m_depthNormalSamplingStepY}
951  }}
952  };
953  }
954  //Depth dense settings
955  if (t.m_trackerType & vpMbGenericTracker::DEPTH_DENSE_TRACKER) {
956  j["dense"] = {
957  {"sampling", {
958  {"x", t.m_depthDenseSamplingStepX},
959  {"y", t.m_depthDenseSamplingStepY}
960  }}
961  };
962  }
963 }
984 inline void from_json(const nlohmann::json &j, vpMbGenericTracker::TrackerWrapper &t)
985 {
986  t.setCameraParameters(j.at("camera"));
987  t.setTrackerType(flagsFromJSON<vpMbGenericTracker::vpTrackerType>(j.at("type")));
988  //Load base settings
989  if (j.contains("angleAppear")) {
990  t.setAngleAppear(vpMath::rad(static_cast<double>(j.at("angleAppear"))));
991  }
992  if (j.contains("angleDisappear")) {
993  t.setAngleDisappear(vpMath::rad(static_cast<double>(j.at("angleDisappear"))));
994  }
995  if (j.contains("clipping")) {
996  const nlohmann::json clipping = j["clipping"];
997  t.setNearClippingDistance(clipping.value("near", t.getNearClippingDistance()));
998  t.setFarClippingDistance(clipping.value("far", t.getFarClippingDistance()));
999  if (clipping.contains("flags")) {
1000  t.setClipping(flagsFromJSON<vpPolygon3D::vpPolygon3DClippingType>(clipping.at("flags")));
1001  }
1002  }
1003  if (j.contains("lod")) {
1004  const nlohmann::json lod = j["lod"];
1005  t.useLodGeneral = lod.value("useLod", t.useLodGeneral);
1006  t.minLineLengthThresholdGeneral = lod.value("minLineLengthThresholdGeneral", t.minLineLengthThresholdGeneral);
1007  t.minPolygonAreaThresholdGeneral = lod.value("minPolygonAreaThresholdGeneral", t.minPolygonAreaThresholdGeneral);
1008  t.applyLodSettingInConfig = false;
1009  if (t.getNbPolygon() > 0) {
1010  t.applyLodSettingInConfig = true;
1011  t.setLod(t.useLodGeneral);
1012  t.setMinLineLengthThresh(t.minLineLengthThresholdGeneral);
1013  t.setMinPolygonAreaThresh(t.minPolygonAreaThresholdGeneral);
1014  }
1015  }
1016  if (j.contains("display")) {
1017  const nlohmann::json displayJson = j["display"];
1018  t.setDisplayFeatures(displayJson.value("features", t.displayFeatures));
1019  t.setProjectionErrorDisplay(displayJson.value("projectionError", t.m_projectionErrorDisplay));
1020  }
1021  if (j.contains("visibilityTest")) {
1022  const nlohmann::json visJson = j["visibilityTest"];
1023  t.setOgreVisibilityTest(visJson.value("ogre", t.useOgre));
1024  t.setScanLineVisibilityTest(visJson.value("scanline", t.useScanLine));
1025  }
1026 
1027  //Check tracker type: for each type, load settings for this specific tracker type
1028  //Edge tracker settings
1029  if (t.m_trackerType & vpMbGenericTracker::EDGE_TRACKER) {
1030  from_json(j.at("edge"), t.me);
1031  t.setMovingEdge(t.me);
1032  }
1033  //KLT tracker settings
1034 #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
1035  if (t.m_trackerType & vpMbGenericTracker::KLT_TRACKER) {
1036  const nlohmann::json klt = j.at("klt");
1037  auto &ktrack = t.tracker;
1038  ktrack.setMaxFeatures(klt.value("maxFeatures", 10000));
1039  ktrack.setWindowSize(klt.value("windowSize", 5));
1040  ktrack.setQuality(klt.value("quality", 0.01));
1041  ktrack.setMinDistance(klt.value("minDistance", 5));
1042  ktrack.setHarrisFreeParameter(klt.value("harris", 0.01));
1043  ktrack.setBlockSize(klt.value("blockSize", 3));
1044  ktrack.setPyramidLevels(klt.value("pyramidLevels", 3));
1045  t.setMaskBorder(klt.value("maskBorder", t.maskBorder));
1046  t.faces.getMbScanLineRenderer().setMaskBorder(t.maskBorder);
1047  }
1048 #else
1049  if (j.contains("klt")) {
1050  std::cerr << "Trying to load a KLT tracker, but the ViSP dependency requirements are not met. Ignoring." << std::endl;
1051  }
1052 #endif
1053  //Depth normal settings
1054  if (t.m_trackerType & vpMbGenericTracker::DEPTH_NORMAL_TRACKER) {
1055  const nlohmann::json n = j.at("normals");
1056  t.setDepthNormalFeatureEstimationMethod(n.at("featureEstimationMethod"));
1057  if (n.contains("pcl")) {
1058  const nlohmann::json pcl = n["pcl"];
1059  t.setDepthNormalPclPlaneEstimationMethod(pcl.at("method"));
1060  t.setDepthNormalPclPlaneEstimationRansacMaxIter(pcl.at("ransacMaxIter"));
1061  t.setDepthNormalPclPlaneEstimationRansacThreshold(pcl.at("ransacThreshold"));
1062  }
1063  if (n.contains("sampling")) {
1064  const nlohmann::json sampling = n.at("sampling");
1065  t.setDepthNormalSamplingStep(sampling.at("x"), sampling.at("y"));
1066  }
1067  }
1068  //Depth Dense settings
1069  if (t.m_trackerType & vpMbGenericTracker::DEPTH_DENSE_TRACKER) {
1070  const nlohmann::json dense = j.at("dense");
1071  if (dense.contains("sampling")) {
1072  const nlohmann::json sampling = dense.at("sampling");
1073  t.setDepthDenseSamplingStep(sampling.at("x"), sampling.at("y"));
1074  }
1075  }
1076 }
1077 
1078 #endif
1079 
1080 END_VISP_NAMESPACE
1081 
1082 #endif
Generic class defining intrinsic camera parameters.
Implementation of column vector and the associated operations.
Definition: vpColVector.h:191
Class to define RGB colors available for display functionalities.
Definition: vpColor.h:157
Implementation of an homogeneous matrix and operations on such kind of matrices.
Definition of the vpImage class member functions.
Definition: vpImage.h:131
Wrapper for the KLT (Kanade-Lucas-Tomasi) feature tracker implemented in OpenCV. Thus to enable this ...
Definition: vpKltOpencv.h:74
static double rad(double deg)
Definition: vpMath.h:129
static double deg(double rad)
Definition: vpMath.h:119
Implementation of a matrix and operations on matrices.
Definition: vpMatrix.h:169
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE
virtual void track(const vpImage< unsigned char > &) VP_OVERRIDE
virtual void track(const vpImage< unsigned char > &) VP_OVERRIDE
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE
Make the complete tracking of an object by using its CAD model.
virtual void track(const vpImage< unsigned char > &I) VP_OVERRIDE
Real-time 6D object pose tracking using its CAD model.
virtual std::vector< std::vector< double > > getFeaturesForDisplay()
virtual void setCameraParameters(const vpCameraParameters &camera) VP_OVERRIDE
virtual int getTrackerType() const
virtual void setOgreVisibilityTest(const bool &v) VP_OVERRIDE
std::map< std::string, TrackerWrapper * > m_mapOfTrackers
virtual void setProjectionErrorComputation(const bool &flag) VP_OVERRIDE
virtual vpColVector getError() const VP_OVERRIDE
unsigned int m_nb_feat_edge
Number of moving-edges features.
virtual unsigned int getNbFeaturesEdge() const
std::map< std::string, vpHomogeneousMatrix > m_mapOfCameraTransformationMatrix
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="") VP_OVERRIDE
virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE
friend void to_json(nlohmann::json &j, const TrackerWrapper &t)
Serialize a tracker wrapper's settings into a JSON representation.
vpColVector m_w
Robust weights.
virtual void testTracking() VP_OVERRIDE
virtual unsigned int getNbFeaturesKlt() const
unsigned int m_nb_feat_depthDense
Number of depth dense features.
virtual void reInitModel(const vpImage< unsigned char > &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
virtual void computeVVSInit() VP_OVERRIDE
virtual void init(const vpImage< unsigned char > &I) VP_OVERRIDE
virtual void track(const vpImage< unsigned char > &I) VP_OVERRIDE
vpColVector m_weightedError
Weighted error.
vpMatrix m_L
Interaction matrix.
virtual void computeVVSWeights()
virtual unsigned int getNbFeaturesDepthNormal() const
vpColVector m_error
(s - s*)
virtual vpColVector getRobustWeights() const VP_OVERRIDE
virtual void setClipping(const unsigned int &flags) VP_OVERRIDE
std::map< vpTrackerType, double > m_mapOfFeatureFactors
Ponderation between each feature type in the VVS stage.
virtual void computeVVS(std::map< std::string, const vpImage< unsigned char > * > &mapOfImages)
virtual void setTrackerType(int type)
virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE
unsigned int m_nb_feat_klt
Number of klt features.
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="") VP_OVERRIDE
unsigned int m_nb_feat_depthNormal
Number of depth normal features.
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
virtual void resetTracker() VP_OVERRIDE
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE
virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE
virtual void preTracking(std::map< std::string, const vpImage< unsigned char > * > &mapOfImages, std::map< std::string, pcl::PointCloud< pcl::PointXYZ >::ConstPtr > &mapOfPointClouds)
virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false) VP_OVERRIDE
std::string m_referenceCameraName
Name of the reference camera.
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false) VP_OVERRIDE
friend void from_json(const nlohmann::json &j, TrackerWrapper &t)
Load configuration settings from a JSON object for a tracker wrapper.
virtual void loadConfigFile(const std::string &configFile, bool verbose=true) VP_OVERRIDE
virtual void setFarClippingDistance(const double &dist) VP_OVERRIDE
Model based tracker using only KLT.
Main methods for a model-based tracker.
Definition: vpMbTracker.h:107
virtual void track(const vpImage< unsigned char > &I)=0
virtual void init(const vpImage< unsigned char > &I)=0
virtual void initFromPoints(const vpImage< unsigned char > &I, const std::string &initFile)
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false)=0
virtual void setNbRayCastingAttemptsForVisibility(const unsigned int &attempts)
Definition: vpMbTracker.h:636
virtual vpMbHiddenFaces< vpMbtPolygon > & getFaces()
Definition: vpMbTracker.h:334
virtual void initClick(const vpImage< unsigned char > &I, const std::string &initFile, bool displayHelp=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
virtual void setLod(bool useLod, const std::string &name="")
virtual unsigned int getNbPolygon() const
Definition: vpMbTracker.h:370
virtual void initFromPose(const vpImage< unsigned char > &I, const std::string &initFile)
virtual void loadModel(const std::string &modelFile, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
virtual void setGoodNbRayCastingAttemptsRatio(const double &ratio)
Definition: vpMbTracker.h:626
virtual void computeVVSInit()=0
virtual void testTracking()=0
virtual void loadConfigFile(const std::string &configFile, bool verbose=true)
Implementation of a polygon of the model used by the model-based tracker.
Definition: vpMbtPolygon.h:60
Definition: vpMe.h:134
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
Definition: vpPoint.h:79
Defines a generic 2D polygon.
Definition: vpPolygon.h:103
Definition: vpRGBa.h:65