Visual Servoing Platform version 3.7.0
Loading...
Searching...
No Matches
vpMbGenericTracker.h
1/*
2 * ViSP, open source Visual Servoing Platform software.
3 * Copyright (C) 2005 - 2025 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
38
39#ifndef VP_MB_GENERIC_TRACKER_H
40#define VP_MB_GENERIC_TRACKER_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#include <visp3/core/vpJsonParsing.h>
48
200class VISP_EXPORT vpMbGenericTracker : public vpMbTracker
201{
202public:
204 {
205 EDGE_TRACKER = 1 << 0,
206#if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO))
207 KLT_TRACKER = 1 << 1,
208#endif
211 };
212
214 vpMbGenericTracker(unsigned int nbCameras, int trackerType = EDGE_TRACKER);
215 VP_EXPLICIT vpMbGenericTracker(const std::vector<int> &trackerTypes);
216 vpMbGenericTracker(const std::vector<std::string> &cameraNames, const std::vector<int> &trackerTypes);
217
218 virtual ~vpMbGenericTracker() VP_OVERRIDE;
219
220 virtual double computeCurrentProjectionError(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &_cMo,
221 const vpCameraParameters &_cam) VP_OVERRIDE;
222 virtual double computeCurrentProjectionError(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &_cMo,
223 const vpCameraParameters &_cam);
224
225 virtual void display(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
226 const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) VP_OVERRIDE;
227 virtual void display(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
228 const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) VP_OVERRIDE;
229
230 virtual void display(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
231 const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo, const vpCameraParameters &cam1,
232 const vpCameraParameters &cam2, const vpColor &color, unsigned int thickness = 1,
233 bool displayFullModel = false);
234 virtual void display(const vpImage<vpRGBa> &I1, const vpImage<vpRGBa> &I2, const vpHomogeneousMatrix &c1Mo,
235 const vpHomogeneousMatrix &c2Mo, const vpCameraParameters &cam1, const vpCameraParameters &cam2,
236 const vpColor &color, unsigned int thickness = 1, bool displayFullModel = false);
237
238 virtual void display(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
239 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
240 const std::map<std::string, vpCameraParameters> &mapOfCameraParameters, const vpColor &col,
241 unsigned int thickness = 1, bool displayFullModel = false);
242 virtual void display(const std::map<std::string, const vpImage<vpRGBa> *> &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
247 virtual std::vector<std::string> getCameraNames() const;
248
249 using vpMbTracker::getCameraParameters;
250 virtual void getCameraParameters(vpCameraParameters &camera) const VP_OVERRIDE;
251 virtual void getCameraParameters(vpCameraParameters &cam1, vpCameraParameters &cam2) const;
252 virtual void getCameraParameters(std::map<std::string, vpCameraParameters> &mapOfCameraParameters) const;
253
254 virtual std::map<std::string, int> getCameraTrackerTypes() const;
255
256 using vpMbTracker::getClipping;
257 virtual void getClipping(unsigned int &clippingFlag1, unsigned int &clippingFlag2) const;
258 virtual void getClipping(std::map<std::string, unsigned int> &mapOfClippingFlags) const;
259
260 virtual inline vpColVector getError() const VP_OVERRIDE { return m_error; }
261
262 virtual vpMbHiddenFaces<vpMbtPolygon> &getFaces() VP_OVERRIDE;
263 virtual vpMbHiddenFaces<vpMbtPolygon> &getFaces(const std::string &cameraName);
264
265#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
266 virtual std::list<vpMbtDistanceCircle *> &getFeaturesCircle();
267 virtual std::list<vpMbtDistanceKltCylinder *> &getFeaturesKltCylinder();
268 virtual std::list<vpMbtDistanceKltPoints *> &getFeaturesKlt();
269#endif
270
271 virtual std::vector<std::vector<double> > getFeaturesForDisplay();
272 virtual void getFeaturesForDisplay(std::map<std::string, std::vector<std::vector<double> > > &mapOfFeatures);
273
274 virtual double getGoodMovingEdgesRatioThreshold() const;
275
276#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
277 virtual std::vector<vpImagePoint> getKltImagePoints() const;
278 virtual std::map<int, vpImagePoint> getKltImagePointsWithId() const;
279
280 virtual unsigned int getKltMaskBorder() const;
281 virtual int getKltNbPoints() const;
282
283 virtual vpKltOpencv getKltOpencv() const;
284 virtual void getKltOpencv(vpKltOpencv &klt1, vpKltOpencv &klt2) const;
285 virtual void getKltOpencv(std::map<std::string, vpKltOpencv> &mapOfKlts) const;
286
287#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
288 virtual std::vector<cv::Point2f> getKltPoints() const;
289#endif
290
291 virtual double getKltThresholdAcceptation() const;
292#endif
293
294 virtual void getLcircle(std::list<vpMbtDistanceCircle *> &circlesList, unsigned int level = 0) const;
295 virtual void getLcircle(const std::string &cameraName, std::list<vpMbtDistanceCircle *> &circlesList,
296 unsigned int level = 0) const;
297 virtual void getLcylinder(std::list<vpMbtDistanceCylinder *> &cylindersList, unsigned int level = 0) const;
298 virtual void getLcylinder(const std::string &cameraName, std::list<vpMbtDistanceCylinder *> &cylindersList,
299 unsigned int level = 0) const;
300 virtual void getLline(std::list<vpMbtDistanceLine *> &linesList, unsigned int level = 0) const;
301 virtual void getLline(const std::string &cameraName, std::list<vpMbtDistanceLine *> &linesList,
302 unsigned int level = 0) const;
303
304 virtual std::vector<std::vector<double> > getModelForDisplay(unsigned int width, unsigned int height,
305 const vpHomogeneousMatrix &cMo,
306 const vpCameraParameters &cam,
307 bool displayFullModel = false) VP_OVERRIDE;
308 virtual void getModelForDisplay(std::map<std::string, std::vector<std::vector<double> > > &mapOfModels,
309 const std::map<std::string, unsigned int> &mapOfwidths,
310 const std::map<std::string, unsigned int> &mapOfheights,
311 const std::map<std::string, vpHomogeneousMatrix> &mapOfcMos,
312 const std::map<std::string, vpCameraParameters> &mapOfCams,
313 bool displayFullModel = false);
314
315 virtual vpMe getMovingEdge() const;
316 virtual void getMovingEdge(vpMe &me1, vpMe &me2) const;
317 virtual void getMovingEdge(std::map<std::string, vpMe> &mapOfMovingEdges) const;
318
322 virtual inline unsigned int getNbFeaturesDepthDense() const { return m_nb_feat_depthDense; }
323
327 virtual inline unsigned int getNbFeaturesDepthNormal() const { return m_nb_feat_depthNormal; }
328
334 virtual inline unsigned int getNbFeaturesEdge() const { return m_nb_feat_edge; }
335
339 virtual inline unsigned int getNbFeaturesKlt() const { return m_nb_feat_klt; }
340
341 virtual unsigned int getNbPoints(unsigned int level = 0) const;
342 virtual void getNbPoints(std::map<std::string, unsigned int> &mapOfNbPoints, unsigned int level = 0) const;
343
344 virtual unsigned int getNbPolygon() const VP_OVERRIDE;
345 virtual void getNbPolygon(std::map<std::string, unsigned int> &mapOfNbPolygons) const;
346
347 virtual vpMbtPolygon *getPolygon(unsigned int index) VP_OVERRIDE;
348 virtual vpMbtPolygon *getPolygon(const std::string &cameraName, unsigned int index);
349
350 virtual std::pair<std::vector<vpPolygon>, std::vector<std::vector<vpPoint> > >
351 getPolygonFaces(bool orderPolygons = true, bool useVisibility = true, bool clipPolygon = false) VP_OVERRIDE;
352 virtual void getPolygonFaces(std::map<std::string, std::vector<vpPolygon> > &mapOfPolygons,
353 std::map<std::string, std::vector<std::vector<vpPoint> > > &mapOfPoints,
354 bool orderPolygons = true, bool useVisibility = true, bool clipPolygon = false);
355
356 using vpMbTracker::getPose;
357 virtual void getPose(vpHomogeneousMatrix &cMo) const VP_OVERRIDE;
358 virtual void getPose(vpHomogeneousMatrix &c1Mo, vpHomogeneousMatrix &c2Mo) const;
359 virtual void getPose(std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses) const;
360
361 virtual std::string getReferenceCameraName() const;
362
363 virtual inline vpColVector getRobustWeights() const VP_OVERRIDE { return m_w; }
364
365 virtual int getTrackerType() const;
366
367 virtual void init(const vpImage<unsigned char> &I) VP_OVERRIDE;
368
369#ifdef VISP_HAVE_MODULE_GUI
371 virtual void initClick(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
372 const std::string &initFile1, const std::string &initFile2, bool displayHelp = false,
375 virtual void initClick(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2, const std::string &initFile1,
376 const std::string &initFile2, bool displayHelp = false,
379
380 virtual void
381 initClick(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
382 const std::map<std::string, std::string> &mapOfInitFiles, bool displayHelp = false,
383 const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
384 virtual void
385 initClick(const std::map<std::string, const vpImage<vpRGBa> *> &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#endif
389
391 virtual void initFromPoints(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
392 const std::string &initFile1, const std::string &initFile2);
393 virtual void initFromPoints(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2,
394 const std::string &initFile1, const std::string &initFile2);
395
396 virtual void initFromPoints(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
397 const std::map<std::string, std::string> &mapOfInitPoints);
398 virtual void initFromPoints(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
399 const std::map<std::string, std::string> &mapOfInitPoints);
400
402 virtual void initFromPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo) VP_OVERRIDE;
403 virtual void initFromPose(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
404 const std::string &initFile1, const std::string &initFile2);
405 virtual void initFromPose(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2,
406 const std::string &initFile1, const std::string &initFile2);
407
408 virtual void initFromPose(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
409 const std::map<std::string, std::string> &mapOfInitPoses);
410 virtual void initFromPose(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
411 const std::map<std::string, std::string> &mapOfInitPoses);
412
413 virtual void initFromPose(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
414 const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo);
415 virtual void initFromPose(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2,
416 const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo);
417
418 virtual void initFromPose(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
419 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
420 virtual void initFromPose(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
421 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
422
423 virtual void loadConfigFile(const std::string &configFile, bool verbose = true) VP_OVERRIDE;
424 virtual void loadConfigFile(const std::string &configFile1, const std::string &configFile2, bool verbose = true);
425 virtual void loadConfigFile(const std::map<std::string, std::string> &mapOfConfigFiles, bool verbose = true);
426
427#ifdef VISP_HAVE_NLOHMANN_JSON
428 virtual void saveConfigFile(const std::string &settingsFile) const;
429#endif
430
431 virtual void loadModel(const std::string &modelFile, bool verbose = false,
432 const vpHomogeneousMatrix &T = vpHomogeneousMatrix()) VP_OVERRIDE;
433 virtual void loadModel(const std::string &modelFile1, const std::string &modelFile2, bool verbose = false,
436
437 virtual void
438 loadModel(const std::map<std::string, std::string> &mapOfModelFiles, bool verbose = false,
439 const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
440
441 virtual void reInitModel(const vpImage<unsigned char> &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo,
442 bool verbose = false, const vpHomogeneousMatrix &T = vpHomogeneousMatrix());
443 virtual void reInitModel(const vpImage<vpRGBa> &I_color, const std::string &cad_name, const vpHomogeneousMatrix &cMo,
444 bool verbose = false, const vpHomogeneousMatrix &T = vpHomogeneousMatrix());
445
446 virtual void reInitModel(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
447 const std::string &cad_name1, const std::string &cad_name2, const vpHomogeneousMatrix &c1Mo,
448 const vpHomogeneousMatrix &c2Mo, bool verbose = false,
451 virtual void reInitModel(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2,
452 const std::string &cad_name1, const std::string &cad_name2, const vpHomogeneousMatrix &c1Mo,
453 const vpHomogeneousMatrix &c2Mo, bool verbose = false,
456
457 virtual void
458 reInitModel(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
459 const std::map<std::string, std::string> &mapOfModelFiles,
460 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses, bool verbose = false,
461 const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
462 virtual void
463 reInitModel(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
464 const std::map<std::string, std::string> &mapOfModelFiles,
465 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses, bool verbose = false,
466 const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
467
468 virtual void resetTracker() VP_OVERRIDE;
469
470 virtual void setAngleAppear(const double &a) VP_OVERRIDE;
471 virtual void setAngleAppear(const double &a1, const double &a2);
472 virtual void setAngleAppear(const std::map<std::string, double> &mapOfAngles);
473
474 virtual void setAngleDisappear(const double &a) VP_OVERRIDE;
475 virtual void setAngleDisappear(const double &a1, const double &a2);
476 virtual void setAngleDisappear(const std::map<std::string, double> &mapOfAngles);
477
478 virtual void setCameraParameters(const vpCameraParameters &camera) VP_OVERRIDE;
479 virtual void setCameraParameters(const vpCameraParameters &camera1, const vpCameraParameters &camera2);
480 virtual void setCameraParameters(const std::map<std::string, vpCameraParameters> &mapOfCameraParameters);
481
482 virtual void setCameraTransformationMatrix(const std::string &cameraName,
483 const vpHomogeneousMatrix &cameraTransformationMatrix);
484 virtual void
485 setCameraTransformationMatrix(const std::map<std::string, vpHomogeneousMatrix> &mapOfTransformationMatrix);
486
487 virtual void setClipping(const unsigned int &flags) VP_OVERRIDE;
488 virtual void setClipping(const unsigned int &flags1, const unsigned int &flags2);
489 virtual void setClipping(const std::map<std::string, unsigned int> &mapOfClippingFlags);
490
491 virtual void setDepthDenseFilteringMaxDistance(double maxDistance);
492 virtual void setDepthDenseFilteringMethod(int method);
493 virtual void setDepthDenseFilteringMinDistance(double minDistance);
494 virtual void setDepthDenseFilteringOccupancyRatio(double occupancyRatio);
495 virtual void setDepthDenseSamplingStep(unsigned int stepX, unsigned int stepY);
496
497 virtual void setDepthNormalFaceCentroidMethod(const vpMbtFaceDepthNormal::vpFaceCentroidType &method);
498 virtual void setDepthNormalFeatureEstimationMethod(const vpMbtFaceDepthNormal::vpFeatureEstimationType &method);
499 virtual void setDepthNormalPclPlaneEstimationMethod(int method);
500 virtual void setDepthNormalPclPlaneEstimationRansacMaxIter(int maxIter);
501 virtual void setDepthNormalPclPlaneEstimationRansacThreshold(double threshold);
502 virtual void setDepthNormalSamplingStep(unsigned int stepX, unsigned int stepY);
503
504 virtual void setDisplayFeatures(bool displayF) VP_OVERRIDE;
505
506 virtual void setFarClippingDistance(const double &dist) VP_OVERRIDE;
507 virtual void setFarClippingDistance(const double &dist1, const double &dist2);
508 virtual void setFarClippingDistance(const std::map<std::string, double> &mapOfClippingDists);
509
510 virtual void setFeatureFactors(const std::map<vpTrackerType, double> &mapOfFeatureFactors);
511
512 virtual void setGoodMovingEdgesRatioThreshold(double threshold);
513
514#ifdef VISP_HAVE_OGRE
515 virtual void setGoodNbRayCastingAttemptsRatio(const double &ratio) VP_OVERRIDE;
516 virtual void setNbRayCastingAttemptsForVisibility(const unsigned int &attempts) VP_OVERRIDE;
517#endif
518
519#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
520 virtual void setKltMaskBorder(const unsigned int &e);
521 virtual void setKltMaskBorder(const unsigned int &e1, const unsigned int &e2);
522 virtual void setKltMaskBorder(const std::map<std::string, unsigned int> &mapOfErosions);
523
524 virtual void setKltOpencv(const vpKltOpencv &t);
525 virtual void setKltOpencv(const vpKltOpencv &t1, const vpKltOpencv &t2);
526 virtual void setKltOpencv(const std::map<std::string, vpKltOpencv> &mapOfKlts);
527
528 virtual void setKltThresholdAcceptation(double th);
529#endif
530
531 virtual void setLod(bool useLod, const std::string &name = "") VP_OVERRIDE;
532
533 virtual void setMask(const vpImage<bool> &mask) VP_OVERRIDE;
534
535 virtual void setMinLineLengthThresh(double minLineLengthThresh, const std::string &name = "") VP_OVERRIDE;
536 virtual void setMinPolygonAreaThresh(double minPolygonAreaThresh, const std::string &name = "") VP_OVERRIDE;
537
538 virtual void setMovingEdge(const vpMe &me);
539 virtual void setMovingEdge(const vpMe &me1, const vpMe &me2);
540 virtual void setMovingEdge(const std::map<std::string, vpMe> &mapOfMe);
541
542 virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE;
543 virtual void setNearClippingDistance(const double &dist1, const double &dist2);
544 virtual void setNearClippingDistance(const std::map<std::string, double> &mapOfDists);
545
546 virtual void setOgreShowConfigDialog(bool showConfigDialog) VP_OVERRIDE;
547 virtual void setOgreVisibilityTest(const bool &v) VP_OVERRIDE;
548
549 virtual void setOptimizationMethod(const vpMbtOptimizationMethod &opt) VP_OVERRIDE;
550
551 virtual void setPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
552 virtual void setPose(const vpImage<vpRGBa> &I_color, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
553
554 virtual void setPose(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
555 const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo);
556 virtual void setPose(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2,
557 const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo);
558
559 virtual void setPose(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
560 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
561 virtual void setPose(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
562 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
563
564 virtual void setProjectionErrorComputation(const bool &flag) VP_OVERRIDE;
565
566 virtual void setProjectionErrorDisplay(bool display) VP_OVERRIDE;
567 virtual void setProjectionErrorDisplayArrowLength(unsigned int length) VP_OVERRIDE;
568 virtual void setProjectionErrorDisplayArrowThickness(unsigned int thickness) VP_OVERRIDE;
569
570 virtual void setReferenceCameraName(const std::string &referenceCameraName);
571
572 virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE;
573
574 virtual void setTrackerType(int type);
575 virtual void setTrackerType(const std::map<std::string, int> &mapOfTrackerTypes);
576
577 virtual void setUseDepthDenseTracking(const std::string &name, const bool &useDepthDenseTracking);
578 virtual void setUseDepthNormalTracking(const std::string &name, const bool &useDepthNormalTracking);
579 virtual void setUseEdgeTracking(const std::string &name, const bool &useEdgeTracking);
580#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
581 virtual void setUseKltTracking(const std::string &name, const bool &useKltTracking);
582#endif
583
584 virtual void testTracking() VP_OVERRIDE;
585
586 virtual void track(const vpImage<unsigned char> &I) VP_OVERRIDE;
587 virtual void track(const vpImage<vpRGBa> &I_color) VP_OVERRIDE;
588
589 virtual void track(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2);
590 virtual void track(const vpImage<vpRGBa> &I_color1, const vpImage<vpRGBa> &I_color2);
591
592 virtual void track(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages);
593 virtual void track(std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages);
594
595#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
596 virtual void track(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
597 std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds);
598 virtual void track(std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
599 std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds);
600#endif
601
602 virtual void track(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
603 std::map<std::string, const std::vector<vpColVector> *> &mapOfPointClouds,
604 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
605 std::map<std::string, unsigned int> &mapOfPointCloudHeights);
606 virtual void track(std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
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
611 virtual void track(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
612 std::map<std::string, const vpMatrix *> &mapOfPointClouds,
613 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
614 std::map<std::string, unsigned int> &mapOfPointCloudHeights);
615 virtual void track(std::map<std::string, const vpImage<vpRGBa> *> &mapOfColorImages,
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
620protected:
621 virtual void computeProjectionError();
622
623 virtual void computeVVS(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages);
624
625 virtual void computeVVSInit() VP_OVERRIDE;
626 virtual void computeVVSInit(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages);
627 virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE;
628 virtual void computeVVSInteractionMatrixAndResidu(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
629 std::map<std::string, vpVelocityTwistMatrix> &mapOfVelocityTwist);
630 using vpMbTracker::computeVVSWeights;
631 virtual void computeVVSWeights();
632
633 virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace = 0,
634 const std::string &name = "") VP_OVERRIDE;
635
636 virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace = 0,
637 const std::string &name = "") VP_OVERRIDE;
638
639 virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE;
640
641 virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE;
642
643 virtual void loadConfigFileXML(const std::string &configFile, bool verbose = true);
644#ifdef VISP_HAVE_NLOHMANN_JSON
645 virtual void loadConfigFileJSON(const std::string &configFile, bool verbose = true);
646#endif
647
648#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
649 virtual void preTracking(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
650 std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds);
651#endif
652 virtual void preTracking(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
653 std::map<std::string, const std::vector<vpColVector> *> &mapOfPointClouds,
654 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
655 std::map<std::string, unsigned int> &mapOfPointCloudHeights);
656 virtual void preTracking(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
657 std::map<std::string, const vpMatrix *> &mapOfPointClouds,
658 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
659 std::map<std::string, unsigned int> &mapOfPointCloudHeights);
660
661private:
662 class TrackerWrapper : public vpMbEdgeTracker,
663#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
664 public vpMbKltTracker,
665#endif
668 {
669 friend class vpMbGenericTracker;
670#ifdef VISP_HAVE_NLOHMANN_JSON
671 friend void to_json(nlohmann::json &j, const TrackerWrapper &t);
672 friend void from_json(const nlohmann::json &j, TrackerWrapper &t);
673#endif
674
675 public:
677 vpColVector m_error;
679 vpMatrix m_L;
681 int m_trackerType;
683 vpColVector m_w;
685 vpColVector m_weightedError;
686
687 TrackerWrapper();
688 explicit TrackerWrapper(int trackerType);
689
690 virtual inline vpColVector getError() const VP_OVERRIDE { return m_error; }
691
692 virtual inline vpColVector getRobustWeights() const VP_OVERRIDE { return m_w; }
693
694 virtual inline int getTrackerType() const { return m_trackerType; }
695
696 virtual void display(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
697 const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) VP_OVERRIDE;
698 virtual void display(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
699 const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) VP_OVERRIDE;
700
701 virtual std::vector<std::vector<double> > getFeaturesForDisplay();
702
703 virtual std::vector<std::vector<double> > getModelForDisplay(unsigned int width, unsigned int height,
704 const vpHomogeneousMatrix &cMo,
705 const vpCameraParameters &cam,
706 bool displayFullModel = false) VP_OVERRIDE;
707
708 virtual void init(const vpImage<unsigned char> &I) VP_OVERRIDE;
709
710 virtual void loadConfigFile(const std::string &configFile, bool verbose = true) VP_OVERRIDE;
711
712 virtual void reInitModel(const vpImage<unsigned char> &I, const std::string &cad_name,
713 const vpHomogeneousMatrix &cMo, bool verbose = false,
714 const vpHomogeneousMatrix &T = vpHomogeneousMatrix()) VP_OVERRIDE;
715 virtual void reInitModel(const vpImage<vpRGBa> &I_color, const std::string &cad_name,
716 const vpHomogeneousMatrix &cMo, bool verbose = false,
717 const vpHomogeneousMatrix &T = vpHomogeneousMatrix());
718
719 virtual void resetTracker() VP_OVERRIDE;
720
721 virtual void setCameraParameters(const vpCameraParameters &camera) VP_OVERRIDE;
722
723 virtual void setClipping(const unsigned int &flags) VP_OVERRIDE;
724
725 virtual void setFarClippingDistance(const double &dist) VP_OVERRIDE;
726
727 virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE;
728
729 virtual void setOgreVisibilityTest(const bool &v) VP_OVERRIDE;
730
731 virtual void setPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
732 virtual void setPose(const vpImage<vpRGBa> &I_color, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
733
734 virtual void setProjectionErrorComputation(const bool &flag) VP_OVERRIDE;
735
736 virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE;
737
738 virtual void setTrackerType(int type);
739
740 virtual void testTracking() VP_OVERRIDE;
741
742 virtual void track(const vpImage<unsigned char> &I) VP_OVERRIDE;
743 virtual void track(const vpImage<vpRGBa> &I_color) VP_OVERRIDE;
744#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
745 // Fix error: using declaration ‘using vpMbDepthDenseTracker::setPose’ conflicts with a previous
746 // using declaration that occurs with g++ 4.6.3 on Ubuntu 12.04
747#if !((__GNUC__ == 4) && (__GNUC_MINOR__ == 6))
749#endif
752 virtual void track(const vpImage<unsigned char> *const ptr_I, const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud);
753#endif
754
755 protected:
756 virtual void computeVVS(const vpImage<unsigned char> *const ptr_I);
757 virtual void computeVVSInit() VP_OVERRIDE;
758 virtual void computeVVSInit(const vpImage<unsigned char> *const ptr_I);
759 virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE;
760 using vpMbEdgeTracker::computeVVSInteractionMatrixAndResidu;
761 virtual void computeVVSInteractionMatrixAndResidu(const vpImage<unsigned char> *const ptr_I);
762 using vpMbTracker::computeVVSWeights;
763 virtual void computeVVSWeights() VP_OVERRIDE;
764
765 virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace = 0,
766 const std::string &name = "") VP_OVERRIDE;
767
768 virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace = 0,
769 const std::string &name = "") VP_OVERRIDE;
770
771 virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE;
772 virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE;
773
774 virtual void initMbtTracking(const vpImage<unsigned char> *const ptr_I);
775
776#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
777 virtual void postTracking(const vpImage<unsigned char> *const ptr_I,
778 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud);
779 virtual void preTracking(const vpImage<unsigned char> *const ptr_I,
780 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud);
781#endif
782 virtual void postTracking(const vpImage<unsigned char> *const ptr_I = nullptr, const unsigned int pointcloud_width = 0,
783 const unsigned int pointcloud_height = 0);
784 virtual void preTracking(const vpImage<unsigned char> *const ptr_I = nullptr,
785 const std::vector<vpColVector> *const point_cloud = nullptr,
786 const unsigned int pointcloud_width = 0, const unsigned int pointcloud_height = 0);
787 virtual void preTracking(const vpImage<unsigned char> *const ptr_I = nullptr,
788 const vpMatrix *const point_cloud = nullptr,
789 const unsigned int pointcloud_width = 0, const unsigned int pointcloud_height = 0);
790
791 virtual void reInitModel(const vpImage<unsigned char> *const I, const vpImage<vpRGBa> *const I_color,
792 const std::string &cad_name, const vpHomogeneousMatrix &cMo, bool verbose = false,
793 const vpHomogeneousMatrix &T = vpHomogeneousMatrix());
794
795#if defined(VISP_HAVE_PCL) && defined(VISP_HAVE_PCL_SEGMENTATION) && defined(VISP_HAVE_PCL_FILTERS) && defined(VISP_HAVE_PCL_COMMON)
796 // Fix error: using declaration ‘using vpMbDepthDenseTracker::track’ conflicts with a previous
797 // using declaration that occurs with g++ 4.6.3 on Ubuntu 12.04
798#if !((__GNUC__ == 4) && (__GNUC_MINOR__ == 6))
800#endif
802#endif
803#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
804 virtual void setPose(const vpImage<unsigned char> *I, const vpImage<vpRGBa> *I_color,
805 const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
806#else
807 virtual void setPose(const vpImage<unsigned char> *I, const vpImage<vpRGBa> *I_color,
808 const vpHomogeneousMatrix &cdMo);
809#endif
810 };
811#ifdef VISP_HAVE_NLOHMANN_JSON
812 friend void to_json(nlohmann::json &j, const TrackerWrapper &t);
813 friend void from_json(const nlohmann::json &j, TrackerWrapper &t);
814#endif
815
816protected:
823 std::map<std::string, vpHomogeneousMatrix> m_mapOfCameraTransformationMatrix;
825 std::map<vpTrackerType, double> m_mapOfFeatureFactors;
828 std::map<std::string, TrackerWrapper *> m_mapOfTrackers;
841
843 unsigned int m_nb_feat_edge;
845 unsigned int m_nb_feat_klt;
850};
851
852#ifdef VISP_HAVE_NLOHMANN_JSON
853
854#define MBT_JSON_SETTINGS_VERSION "1.0"
855
856#if defined(__clang__)
857// Mute warning : declaration requires an exit-time destructor [-Wexit-time-destructors]
858// message : expanded from macro 'NLOHMANN_JSON_SERIALIZE_ENUM'
859# pragma clang diagnostic push
860# pragma clang diagnostic ignored "-Wexit-time-destructors"
861#endif
862
863// Serialize tracker type enumeration
864#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
865NLOHMANN_JSON_SERIALIZE_ENUM(vpMbGenericTracker::vpTrackerType, {
870 });
871#else
872NLOHMANN_JSON_SERIALIZE_ENUM(vpMbGenericTracker::vpTrackerType, {
876});
877#endif
878
879#if defined(__clang__)
880# pragma clang diagnostic pop
881#endif
882
889inline void to_json(nlohmann::json &j, const vpMbGenericTracker::TrackerWrapper &t)
890{
891 // Common tracker attributes
892 VP_ATTRIBUTE_NO_DESTROY const static std::vector<vpMbGenericTracker::vpTrackerType> trackerTypes = {
894 #if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
896 #endif
899 };
900 j = nlohmann::json {
901 {"camera", t.m_cam},
902 {"type", flagsToJSON(t.m_trackerType, trackerTypes)},
903 {"angleAppear", vpMath::deg(t.getAngleAppear())},
904 {"angleDisappear", vpMath::deg(t.getAngleDisappear())},
905 {"lod", {
906 {"useLod", t.useLodGeneral},
907 {"minLineLengthThresholdGeneral", t.minLineLengthThresholdGeneral},
908 {"minPolygonAreaThresholdGeneral", t.minPolygonAreaThresholdGeneral}
909 }},
910 {"display", {
911 {"features", t.displayFeatures},
912 {"projectionError", t.m_projectionErrorDisplay}
913 }},
914 {"visibilityTest", {
915 {"ogre", t.useOgre},
916 {"scanline", t.useScanLine}
917 }},
918 {"clipping", {
919 {"flags", clippingFlagsToJSON(t.getClipping())},
920 {"near", t.getNearClippingDistance()},
921 {"far", t.getFarClippingDistance()},
922 }}
923 };
924 //Check tracker type: for each type, add settings to json if the tracker t does use the features
925 //Edge tracker settings
926 if (t.m_trackerType & vpMbGenericTracker::EDGE_TRACKER) {
927 j["edge"] = t.me;
928 }
929 //KLT tracker settings
930#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
931 if (t.m_trackerType & vpMbGenericTracker::KLT_TRACKER) {
932 nlohmann::json klt = t.tracker;
933 klt["maskBorder"] = t.maskBorder;
934 j["klt"] = klt;
935 }
936#endif
937 //Depth normal settings
938 if (t.m_trackerType & vpMbGenericTracker::DEPTH_NORMAL_TRACKER) {
939 j["normals"] = nlohmann::json {
940 {"featureEstimationMethod", t.m_depthNormalFeatureEstimationMethod},
941 {"pcl", {
942 {"method", t.m_depthNormalPclPlaneEstimationMethod},
943 {"ransacMaxIter", t.m_depthNormalPclPlaneEstimationRansacMaxIter},
944 {"ransacThreshold", t.m_depthNormalPclPlaneEstimationRansacThreshold}
945 }},
946 {"sampling", {
947 {"x", t.m_depthNormalSamplingStepX},
948 {"y", t.m_depthNormalSamplingStepY}
949 }}
950 };
951 }
952 //Depth dense settings
953 if (t.m_trackerType & vpMbGenericTracker::DEPTH_DENSE_TRACKER) {
954 j["dense"] = {
955 {"sampling", {
956 {"x", t.m_depthDenseSamplingStepX},
957 {"y", t.m_depthDenseSamplingStepY}
958 }}
959 };
960 }
961}
962
982inline void from_json(const nlohmann::json &j, vpMbGenericTracker::TrackerWrapper &t)
983{
984 t.setCameraParameters(j.at("camera"));
985 t.setTrackerType(flagsFromJSON<vpMbGenericTracker::vpTrackerType>(j.at("type")));
986 //Load base settings
987 if (j.contains("angleAppear")) {
988 t.setAngleAppear(vpMath::rad(static_cast<double>(j.at("angleAppear"))));
989 }
990 if (j.contains("angleDisappear")) {
991 t.setAngleDisappear(vpMath::rad(static_cast<double>(j.at("angleDisappear"))));
992 }
993 if (j.contains("clipping")) {
994 const nlohmann::json clipping = j["clipping"];
995 t.setNearClippingDistance(clipping.value("near", t.getNearClippingDistance()));
996 t.setFarClippingDistance(clipping.value("far", t.getFarClippingDistance()));
997 if (clipping.contains("flags")) {
998 t.setClipping(flagsFromJSON<vpPolygon3D::vpPolygon3DClippingType>(clipping.at("flags")));
999 }
1000 }
1001 if (j.contains("lod")) {
1002 const nlohmann::json lod = j["lod"];
1003 t.useLodGeneral = lod.value("useLod", t.useLodGeneral);
1004 t.minLineLengthThresholdGeneral = lod.value("minLineLengthThresholdGeneral", t.minLineLengthThresholdGeneral);
1005 t.minPolygonAreaThresholdGeneral = lod.value("minPolygonAreaThresholdGeneral", t.minPolygonAreaThresholdGeneral);
1006 t.applyLodSettingInConfig = false;
1007 if (t.getNbPolygon() > 0) {
1008 t.applyLodSettingInConfig = true;
1009 t.setLod(t.useLodGeneral);
1010 t.setMinLineLengthThresh(t.minLineLengthThresholdGeneral);
1011 t.setMinPolygonAreaThresh(t.minPolygonAreaThresholdGeneral);
1012 }
1013 }
1014 if (j.contains("display")) {
1015 const nlohmann::json displayJson = j["display"];
1016 t.setDisplayFeatures(displayJson.value("features", t.displayFeatures));
1017 t.setProjectionErrorDisplay(displayJson.value("projectionError", t.m_projectionErrorDisplay));
1018 }
1019 if (j.contains("visibilityTest")) {
1020 const nlohmann::json visJson = j["visibilityTest"];
1021 t.setOgreVisibilityTest(visJson.value("ogre", t.useOgre));
1022 t.setScanLineVisibilityTest(visJson.value("scanline", t.useScanLine));
1023 }
1024
1025 //Check tracker type: for each type, load settings for this specific tracker type
1026 //Edge tracker settings
1027 if (t.m_trackerType & vpMbGenericTracker::EDGE_TRACKER) {
1028 from_json(j.at("edge"), t.me);
1029 t.setMovingEdge(t.me);
1030 }
1031 //KLT tracker settings
1032#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
1033 if (t.m_trackerType & vpMbGenericTracker::KLT_TRACKER) {
1034 const nlohmann::json klt = j.at("klt");
1035 t.tracker = klt;
1036 t.setMaskBorder(klt.value("maskBorder", t.maskBorder));
1037 t.faces.getMbScanLineRenderer().setMaskBorder(t.maskBorder);
1038 }
1039#else
1040 if (j.contains("klt")) {
1041 std::cerr << "Trying to load a KLT tracker, but the ViSP dependency requirements are not met. Ignoring." << std::endl;
1042 }
1043#endif
1044 //Depth normal settings
1045 if (t.m_trackerType & vpMbGenericTracker::DEPTH_NORMAL_TRACKER) {
1046 const nlohmann::json n = j.at("normals");
1047 t.setDepthNormalFeatureEstimationMethod(n.at("featureEstimationMethod"));
1048 if (n.contains("pcl")) {
1049 const nlohmann::json pcl = n["pcl"];
1050 t.setDepthNormalPclPlaneEstimationMethod(pcl.at("method"));
1051 t.setDepthNormalPclPlaneEstimationRansacMaxIter(pcl.at("ransacMaxIter"));
1052 t.setDepthNormalPclPlaneEstimationRansacThreshold(pcl.at("ransacThreshold"));
1053 }
1054 if (n.contains("sampling")) {
1055 const nlohmann::json sampling = n.at("sampling");
1056 t.setDepthNormalSamplingStep(sampling.at("x"), sampling.at("y"));
1057 }
1058 }
1059 //Depth Dense settings
1060 if (t.m_trackerType & vpMbGenericTracker::DEPTH_DENSE_TRACKER) {
1061 const nlohmann::json dense = j.at("dense");
1062 if (dense.contains("sampling")) {
1063 const nlohmann::json sampling = dense.at("sampling");
1064 t.setDepthDenseSamplingStep(sampling.at("x"), sampling.at("y"));
1065 }
1066 }
1067 }
1068
1069#endif
1070
1071END_VISP_NAMESPACE
1072
1073#endif
Generic class defining intrinsic camera parameters.
Implementation of column vector and the associated operations.
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:83
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:175
Model-based tracker using depth dense features.
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE
virtual void track(const vpImage< unsigned char > &) VP_OVERRIDE
Model-based tracker using depth normal features.
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.
std::map< std::string, TrackerWrapper * > m_mapOfTrackers
vpMbGenericTracker()
json namespace shortcut
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
friend void from_json(const nlohmann::json &j, TrackerWrapper &t)
Load configuration settings from a JSON object for a tracker wrapper.
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 unsigned int getNbFeaturesKlt() const
unsigned int m_nb_feat_depthDense
Number of depth dense features.
virtual unsigned int getNbFeaturesDepthDense() const
vpColVector m_weightedError
Weighted error.
vpMatrix m_L
Interaction matrix.
virtual unsigned int getNbFeaturesDepthNormal() const
vpColVector m_error
(s - s*)
virtual vpColVector getRobustWeights() const VP_OVERRIDE
std::map< vpTrackerType, double > m_mapOfFeatureFactors
Ponderation between each feature type in the VVS stage.
unsigned int m_nb_feat_klt
Number of klt features.
unsigned int m_nb_feat_depthNormal
Number of depth normal features.
std::string m_referenceCameraName
Name of the reference camera.
Implementation of the polygons management for the model-based trackers.
Model based tracker using only KLT.
Main methods for a model-based tracker.
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 vpMbHiddenFaces< vpMbtPolygon > & getFaces()
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)
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 void loadModel(const std::string &modelFile, bool verbose=false, const vpHomogeneousMatrix &od_M_o=vpHomogeneousMatrix())
virtual unsigned int getNbPolygon() const
virtual void initFromPose(const vpImage< unsigned char > &I, const std::string &initFile)
virtual void setGoodNbRayCastingAttemptsRatio(const double &ratio)
virtual void computeVVSInit()=0
virtual void testTracking()=0
virtual void loadConfigFile(const std::string &configFile, bool verbose=true)
Manage depth normal features for a particular face.
Implementation of a polygon of the model used by the model-based tracker.
Definition vpMe.h:143
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