Visual Servoing Platform version 3.7.0
Loading...
Searching...
No Matches
vpMbTracker.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. This class declares the methods to implement
32 * in order to have a model based tracker.
33 */
34
39#ifndef vpMbTracker_hh
40#define vpMbTracker_hh
41
42#include <map>
43#include <string>
44#include <vector>
45
46#include <visp3/core/vpConfig.h>
47#include <visp3/core/vpCameraParameters.h>
48#include <visp3/core/vpColVector.h>
49#include <visp3/core/vpHomogeneousMatrix.h>
50#include <visp3/core/vpImage.h>
51#include <visp3/core/vpImagePoint.h>
52#include <visp3/core/vpMatrix.h>
53#include <visp3/core/vpPoint.h>
54#include <visp3/core/vpPolygon.h>
55#include <visp3/core/vpRGBa.h>
56#include <visp3/core/vpRobust.h>
57#include <visp3/mbt/vpMbHiddenFaces.h>
58#include <visp3/mbt/vpMbtPolygon.h>
59
60#include <visp3/mbt/vpMbtDistanceCircle.h>
61#include <visp3/mbt/vpMbtDistanceCylinder.h>
62#include <visp3/mbt/vpMbtDistanceLine.h>
63
64#ifdef VISP_HAVE_COIN3D
65// Work around to avoid type redefinition int8_t with Coin
66// #if defined(_WIN32) && defined(VISP_HAVE_OGRE) && (_MSC_VER >= 1600) //
67// Visual Studio 2010
68// #define HAVE_INT8_T 1
69// #endif
70
71// Inventor includes
72#include <Inventor/VRMLnodes/SoVRMLGroup.h>
73#include <Inventor/VRMLnodes/SoVRMLIndexedFaceSet.h>
74#include <Inventor/VRMLnodes/SoVRMLIndexedLineSet.h>
75#endif
76
109class VISP_EXPORT vpMbTracker
110{
111public:
112 typedef enum { GAUSS_NEWTON_OPT = 0, LEVENBERG_MARQUARDT_OPT = 1 } vpMbtOptimizationMethod;
113
114protected:
125 std::string modelFileName;
146
158 unsigned int clippingFlag;
165 unsigned int m_nbInitPoints;
167 unsigned int m_maxInitPoints;
169 unsigned int nbPoints;
171 unsigned int nbLines;
173 unsigned int nbPolygonLines;
175 unsigned int nbPolygonPoints;
177 unsigned int nbCylinders;
179 unsigned int nbCircles;
191 std::map<std::string, std::string> mapOfParameterNames;
196 double m_lambda;
198 unsigned int m_maxIter;
203
205 std::vector<vpMbtDistanceLine *> m_projectionErrorLines;
207 std::vector<vpMbtDistanceCylinder *> m_projectionErrorCylinders;
209 std::vector<vpMbtDistanceCircle *> m_projectionErrorCircles;
237
238public:
239 vpMbTracker();
240 vpMbTracker(const vpMbTracker &tracker);
241 virtual ~vpMbTracker();
242 vpMbTracker &operator=(const vpMbTracker &tracker);
243
246 const vpCameraParameters &_cam);
247
249 virtual inline double getAngleAppear() const { return angleAppears; }
250
252 virtual inline double getAngleDisappear() const { return angleDisappears; }
253
259 virtual void getCameraParameters(vpCameraParameters &cam) const { cam = m_cam; }
260
267 virtual inline unsigned int getClipping() const { return clippingFlag; }
268
275
277 {
278 if (!computeCovariance) {
279 // vpTRACE("Warning : The covariance matrix has not been computed.
280 // See setCovarianceComputation() to do it.");
281 std::cerr << "Warning : The covariance matrix has not been computed. "
282 "See setCovarianceComputation() to do it."
283 << std::endl;
284 }
285
286 return covarianceMatrix;
287 }
288
295 virtual inline double getInitialMu() const { return m_initialMu; }
296
302 virtual inline double getLambda() const { return m_lambda; }
303
309 virtual inline unsigned int getMaxIter() const { return m_maxIter; }
310
321 virtual double getProjectionError() const { return projectionError; }
322
323 virtual vpColVector getEstimatedDoF() const;
324
340 virtual vpColVector getError() const = 0;
341
343 virtual inline vpMbHiddenFaces<vpMbtPolygon> &getFaces() { return faces; }
344
350 virtual inline double getFarClippingDistance() const { return distFarClip; }
351
372 virtual vpColVector getRobustWeights() const = 0;
373
379 virtual inline unsigned int getNbPolygon() const { return static_cast<unsigned int>(faces.size()); }
380
386 virtual inline double getNearClippingDistance() const { return distNearClip; }
387
396
406 virtual inline vpMbtPolygon *getPolygon(unsigned int index)
407 {
408 if (index >= static_cast<unsigned int>(faces.size())) {
409 throw vpException(vpException::dimensionError, "index out of range");
410 }
411
412 return faces[index];
413 }
414
415 virtual std::pair<std::vector<vpPolygon>, std::vector<std::vector<vpPoint> > >
416 getPolygonFaces(bool orderPolygons = true, bool useVisibility = true, bool clipPolygon = false);
417
425 virtual inline void getPose(vpHomogeneousMatrix &cMo) const { cMo = m_cMo; }
426
434 virtual inline vpHomogeneousMatrix getPose() const { return m_cMo; }
435
436 virtual inline double getStopCriteriaEpsilon() const { return m_stopCriteriaEpsilon; }
437
438 // initializer
439
440#ifdef VISP_HAVE_MODULE_GUI
441 virtual void initClick(const vpImage<unsigned char> &I, const std::string &initFile, bool displayHelp = false,
443 virtual void initClick(const vpImage<vpRGBa> &I_color, const std::string &initFile, bool displayHelp = false,
445
446 virtual void initClick(const vpImage<unsigned char> &I, const std::vector<vpPoint> &points3D_list,
447 const std::string &displayFile = "");
448 virtual void initClick(const vpImage<vpRGBa> &I_color, const std::vector<vpPoint> &points3D_list,
449 const std::string &displayFile = "");
450#endif
451
452 virtual void initFromPoints(const vpImage<unsigned char> &I, const std::string &initFile);
453 virtual void initFromPoints(const vpImage<vpRGBa> &I_color, const std::string &initFile);
454
455 virtual void initFromPoints(const vpImage<unsigned char> &I, const std::vector<vpImagePoint> &points2D_list,
456 const std::vector<vpPoint> &points3D_list);
457 virtual void initFromPoints(const vpImage<vpRGBa> &I_color, const std::vector<vpImagePoint> &points2D_list,
458 const std::vector<vpPoint> &points3D_list);
459
460 virtual void initFromPose(const vpImage<unsigned char> &I, const std::string &initFile);
461 virtual void initFromPose(const vpImage<vpRGBa> &I_color, const std::string &initFile);
462
463 virtual void initFromPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo);
464 virtual void initFromPose(const vpImage<vpRGBa> &I_color, const vpHomogeneousMatrix &cMo);
465
466 virtual void initFromPose(const vpImage<unsigned char> &I, const vpPoseVector &cPo);
467 virtual void initFromPose(const vpImage<vpRGBa> &I_color, const vpPoseVector &cPo);
468
469 virtual void loadModel(const std::string &modelFile, bool verbose = false,
470 const vpHomogeneousMatrix &od_M_o = vpHomogeneousMatrix());
471
481 virtual inline void setAngleAppear(const double &a) { angleAppears = a; }
482
492 virtual inline void setAngleDisappear(const double &a) { angleDisappears = a; }
493
499 virtual void setCameraParameters(const vpCameraParameters &cam) { m_cam = cam; }
500
501 virtual void setClipping(const unsigned int &flags);
502
511 virtual void setCovarianceComputation(const bool &flag) { computeCovariance = flag; }
512
529 virtual void setDisplayFeatures(bool displayF) { displayFeatures = displayF; }
530
531 virtual void setEstimatedDoF(const vpColVector &v);
532
533 virtual void setFarClippingDistance(const double &dist);
534
540 virtual inline void setInitialMu(double mu) { m_initialMu = mu; }
541
547 virtual inline void setLambda(double gain) { m_lambda = gain; }
548
549 virtual void setLod(bool useLod, const std::string &name = "");
550
556 virtual inline void setMaxIter(unsigned int max) { m_maxIter = max; }
557
558 virtual void setMinLineLengthThresh(double minLineLengthThresh, const std::string &name = "");
559
560 virtual void setMinPolygonAreaThresh(double minPolygonAreaThresh, const std::string &name = "");
561
562 virtual void setNearClippingDistance(const double &dist);
563
569 virtual inline void setOptimizationMethod(const vpMbtOptimizationMethod &opt) { m_optimizationMethod = opt; }
570
571 void setProjectionErrorMovingEdge(const vpMe &me);
572
573 void setProjectionErrorKernelSize(const unsigned int &size);
574
575 virtual void setMask(const vpImage<bool> &mask) { m_mask = &mask; }
576
583 virtual inline void setStopCriteriaEpsilon(const double eps) { m_stopCriteriaEpsilon = eps; }
584
596 virtual void setProjectionErrorComputation(const bool &flag) { computeProjError = flag; }
597
602
606 virtual void setProjectionErrorDisplayArrowLength(unsigned int length)
607 {
609 }
610
614 virtual void setProjectionErrorDisplayArrowThickness(unsigned int thickness)
615 {
617 }
618
623 virtual void setScanLineVisibilityTest(const bool &v) { useScanLine = v; }
624
625 virtual void setOgreVisibilityTest(const bool &v);
626
627 void savePose(const std::string &filename) const;
628
629#ifdef VISP_HAVE_OGRE
639 virtual void setGoodNbRayCastingAttemptsRatio(const double &ratio) { faces.setGoodNbRayCastingAttemptsRatio(ratio); }
649 virtual void setNbRayCastingAttemptsForVisibility(const unsigned int &attempts)
650 {
651 faces.setNbRayCastingAttemptsForVisibility(attempts);
652 }
653#endif
654
665 inline virtual void setOgreShowConfigDialog(bool showConfigDialog) { ogreShowConfigDialog = showConfigDialog; }
666
677 inline void setPoseSavingFilename(const std::string &filename) { poseSavingFilename = filename; }
678
679 /* PURE VIRTUAL METHODS */
680
693 virtual void display(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
694 const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) = 0;
707 virtual void display(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
708 const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) = 0;
709
710 virtual std::vector<std::vector<double> > getModelForDisplay(unsigned int width, unsigned int height,
711 const vpHomogeneousMatrix &cMo,
712 const vpCameraParameters &cam,
713 bool displayFullModel = false) = 0;
714
720 virtual void init(const vpImage<unsigned char> &I) = 0;
721
730 virtual void loadConfigFile(const std::string &configFile, bool verbose = true);
731
735 virtual void resetTracker() = 0;
736
747 virtual void setPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cdMo) = 0;
748
759 virtual void setPose(const vpImage<vpRGBa> &I_color, const vpHomogeneousMatrix &cdMo) = 0;
760
766 virtual void testTracking() = 0;
767
773 virtual void track(const vpImage<unsigned char> &I) = 0;
774
780 virtual void track(const vpImage<vpRGBa> &I) = 0;
781
782protected:
784 void addPolygon(const std::vector<vpPoint> &corners, int idFace = -1, const std::string &polygonName = "",
785 bool useLod = false, double minPolygonAreaThreshold = 2500.0, double minLineLengthThreshold = 50.0);
786 void addPolygon(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace = -1,
787 const std::string &polygonName = "", bool useLod = false, double minPolygonAreaThreshold = 2500.0);
788 void addPolygon(const vpPoint &p1, const vpPoint &p2, int idFace = -1, const std::string &polygonName = "",
789 bool useLod = false, double minLineLengthThreshold = 50);
790 void addPolygon(const std::vector<std::vector<vpPoint> > &listFaces, int idFace = -1,
791 const std::string &polygonName = "", bool useLod = false, double minLineLengthThreshold = 50);
792
793 void addProjectionErrorCircle(const vpPoint &P1, const vpPoint &P2, const vpPoint &P3, double r, int idFace = -1,
794 const std::string &name = "");
795 void addProjectionErrorCylinder(const vpPoint &P1, const vpPoint &P2, double r, int idFace = -1,
796 const std::string &name = "");
797 void addProjectionErrorLine(vpPoint &p1, vpPoint &p2, int polygon = -1, std::string name = "");
798
799 void addProjectionErrorPolygon(const std::vector<vpPoint> &corners, int idFace = -1,
800 const std::string &polygonName = "", bool useLod = false,
801 double minPolygonAreaThreshold = 2500.0, const double minLineLengthThreshold = 50.0);
802 void addProjectionErrorPolygon(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius,
803 int idFace = -1, const std::string &polygonName = "", bool useLod = false,
804 double minPolygonAreaThreshold = 2500.0);
805 void addProjectionErrorPolygon(const vpPoint &p1, const vpPoint &p2, int idFace = -1,
806 const std::string &polygonName = "", bool useLod = false,
807 double minLineLengthThreshold = 50);
808 void addProjectionErrorPolygon(const std::vector<std::vector<vpPoint> > &listFaces, int idFace = -1,
809 const std::string &polygonName = "", bool useLod = false,
810 double minLineLengthThreshold = 50);
811
812 void createCylinderBBox(const vpPoint &p1, const vpPoint &p2, const double &radius,
813 std::vector<std::vector<vpPoint> > &listFaces);
814
815 virtual void computeCovarianceMatrixVVS(const bool isoJoIdentity, const vpColVector &w_true,
816 const vpHomogeneousMatrix &cMoPrev, const vpMatrix &L_true,
817 const vpMatrix &LVJ_true, const vpColVector &error);
818
819 void computeJTR(const vpMatrix &J, const vpColVector &R, vpColVector &JTR) const;
820
822 const vpCameraParameters &_cam, unsigned int &nbFeatures);
823
824 virtual void computeVVSCheckLevenbergMarquardt(unsigned int iter, vpColVector &error, const vpColVector &m_error_prev,
825 const vpHomogeneousMatrix &cMoPrev, double &mu,
826 bool &reStartFromLastIncrement, vpColVector *const w = nullptr,
827 const vpColVector *const m_w_prev = nullptr);
828 virtual void computeVVSInit() = 0;
830 virtual void computeVVSPoseEstimation(const bool isoJoIdentity, unsigned int iter, vpMatrix &L, vpMatrix &LTL,
831 vpColVector &R, const vpColVector &error, vpColVector &error_prev,
832 vpColVector &LTR, double &mu, vpColVector &v, const vpColVector *const w = nullptr,
833 vpColVector *const m_w_prev = nullptr);
834 virtual void computeVVSWeights(vpRobust &robust, const vpColVector &error, vpColVector &w);
835
836#ifdef VISP_HAVE_COIN3D
837 virtual void extractGroup(SoVRMLGroup *sceneGraphVRML2, vpHomogeneousMatrix &transform, int &idFace);
838 virtual void extractFaces(SoVRMLIndexedFaceSet *face_set, vpHomogeneousMatrix &transform, int &idFace,
839 const std::string &polygonName = "");
840 virtual void extractLines(SoVRMLIndexedLineSet *line_set, int &idFace, const std::string &polygonName = "");
841 virtual void extractCylinders(SoVRMLIndexedFaceSet *face_set, vpHomogeneousMatrix &transform, int &idFace,
842 const std::string &polygonName = "");
843#endif
844
845 vpPoint getGravityCenter(const std::vector<vpPoint> &_pts) const;
846
858 virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace = 0,
859 const std::string &name = "") = 0;
860
861#ifdef VISP_HAVE_MODULE_GUI
862 virtual void initClick(const vpImage<unsigned char> *const I, const vpImage<vpRGBa> *const I_color,
863 const std::string &initFile, bool displayHelp = false,
864 const vpHomogeneousMatrix &od_M_o = vpHomogeneousMatrix());
865
866 virtual void initClick(const vpImage<unsigned char> *const I, const vpImage<vpRGBa> *const I_color,
867 const std::vector<vpPoint> &points3D_list, const std::string &displayFile = "");
868#endif
869
870 virtual void initFromPoints(const vpImage<unsigned char> *const I, const vpImage<vpRGBa> *const I_color,
871 const std::string &initFile);
872
873 virtual void initFromPoints(const vpImage<unsigned char> *const I, const vpImage<vpRGBa> *const I_color,
874 const std::vector<vpImagePoint> &points2D_list,
875 const std::vector<vpPoint> &points3D_list);
876
877 virtual void initFromPose(const vpImage<unsigned char> *const I, const vpImage<vpRGBa> *const I_color,
878 const std::string &initFile);
879
890 virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace = 0,
891 const std::string &name = "") = 0;
892
905 virtual void initFaceFromCorners(vpMbtPolygon &polygon) = 0;
906 virtual void initFaceFromLines(vpMbtPolygon &polygon) = 0;
907
908 void initProjectionErrorCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace = 0,
909 const std::string &name = "");
910 void initProjectionErrorCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace = 0,
911 const std::string &name = "");
914
915 virtual void loadVRMLModel(const std::string &modelFile);
916 virtual void loadCAOModel(const std::string &modelFile, std::vector<std::string> &vectorOfModelFilename,
917 int &startIdFace, bool verbose = false, bool parent = true,
919 void loadInitFile(const std::string &initFile, std::vector<std::string> &vectorOfInitFilename,
920 bool parent, const vpHomogeneousMatrix &T, std::vector<vpPoint> &P);
923 void projectionErrorVisibleFace(unsigned int width, unsigned int height, const vpHomogeneousMatrix &_cMo);
924
925 void removeCommentsAndEmptyLines(std::ifstream &fileId);
926
927 std::map<std::string, std::string> parseParameters(std::string &endLine);
928
929 bool samePoint(const vpPoint &P1, const vpPoint &P2) const;
930};
931END_VISP_NAMESPACE
932#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
error that can be emitted by ViSP classes.
Definition vpException.h:60
@ dimensionError
Bad dimension.
Definition vpException.h:71
Implementation of an homogeneous matrix and operations on such kind of matrices.
Definition of the vpImage class member functions.
Definition vpImage.h:131
Implementation of a matrix and operations on matrices.
Definition vpMatrix.h:175
Implementation of the polygons management for the model-based trackers.
std::map< std::string, std::string > parseParameters(std::string &endLine)
virtual double getNearClippingDistance() const
virtual void setProjectionErrorDisplayArrowLength(unsigned int length)
virtual double computeCurrentProjectionError(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo, const vpCameraParameters &_cam)
double m_lambda
Gain of the virtual visual servoing stage.
double computeProjectionErrorImpl(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo, const vpCameraParameters &_cam, unsigned int &nbFeatures)
virtual void setMaxIter(unsigned int max)
void addProjectionErrorLine(vpPoint &p1, vpPoint &p2, int polygon=-1, std::string name="")
virtual void display(const vpImage< vpRGBa > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false)=0
vpCameraParameters m_projectionErrorCam
Camera parameters used for projection error computation.
unsigned int nbPolygonPoints
Number of polygon points in CAO model.
bool modelInitialised
virtual void setPose(const vpImage< vpRGBa > &I_color, const vpHomogeneousMatrix &cdMo)=0
virtual void extractFaces(SoVRMLIndexedFaceSet *face_set, vpHomogeneousMatrix &transform, int &idFace, const std::string &polygonName="")
double minLineLengthThresholdGeneral
Minimum line length threshold for LOD mode (general setting).
bool m_projectionErrorDisplay
Display gradient and model orientation for projection error computation.
void projectionErrorResetMovingEdges()
virtual void track(const vpImage< unsigned char > &I)=0
void initProjectionErrorCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="")
virtual double getInitialMu() const
virtual void resetTracker()=0
virtual void setOgreShowConfigDialog(bool showConfigDialog)
virtual double getAngleAppear() const
@ LEVENBERG_MARQUARDT_OPT
virtual void extractCylinders(SoVRMLIndexedFaceSet *face_set, vpHomogeneousMatrix &transform, int &idFace, const std::string &polygonName="")
virtual void setMask(const vpImage< bool > &mask)
virtual void getCameraParameters(vpCameraParameters &cam) const
vpImage< unsigned char > m_I
Grayscale image buffer, used when passing color images.
unsigned int m_projectionErrorDisplayLength
Length of the arrows used to show the gradient and model orientation.
std::vector< vpMbtDistanceCylinder * > m_projectionErrorCylinders
Distance cylinder primitives for projection error.
virtual void loadCAOModel(const std::string &modelFile, std::vector< std::string > &vectorOfModelFilename, int &startIdFace, bool verbose=false, bool parent=true, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
virtual void init(const vpImage< unsigned char > &I)=0
virtual void setDisplayFeatures(bool displayF)
virtual void initFromPoints(const vpImage< unsigned char > &I, const std::string &initFile)
bool samePoint(const vpPoint &P1, const vpPoint &P2) const
virtual vpHomogeneousMatrix getPose() const
bool useLodGeneral
True if LOD mode is enabled.
double minPolygonAreaThresholdGeneral
Minimum polygon area threshold for LOD mode (general setting).
std::map< std::string, std::string > mapOfParameterNames
bool m_computeInteraction
vpMatrix oJo
The Degrees of Freedom to estimate.
virtual void loadVRMLModel(const std::string &modelFile)
virtual void getPose(vpHomogeneousMatrix &cMo) const
unsigned int nbLines
Number of lines in CAO model.
virtual void initFaceFromLines(vpMbtPolygon &polygon)=0
void addPolygon(const std::vector< vpPoint > &corners, int idFace=-1, const std::string &polygonName="", bool useLod=false, double minPolygonAreaThreshold=2500.0, double minLineLengthThreshold=50.0)
vpUniRand m_rand
Random number generator used in vpMbtDistanceLine::buildFrom().
vpMatrix covarianceMatrix
Covariance matrix.
double m_initialMu
Initial Mu for Levenberg Marquardt optimization loop.
bool computeProjError
virtual vpColVector getError() const =0
vpHomogeneousMatrix m_cMo
The current pose.
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="")=0
virtual vpMbtOptimizationMethod getOptimizationMethod() const
vpMatrix m_SobelX
Sobel kernel in X.
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="")=0
virtual void computeVVSCheckLevenbergMarquardt(unsigned int iter, vpColVector &error, const vpColVector &m_error_prev, const vpHomogeneousMatrix &cMoPrev, double &mu, bool &reStartFromLastIncrement, vpColVector *const w=nullptr, const vpColVector *const m_w_prev=nullptr)
void setPoseSavingFilename(const std::string &filename)
unsigned int nbPoints
Number of points in CAO model.
vpCameraParameters m_cam
The camera parameters.
double projectionError
double m_stopCriteriaEpsilon
Epsilon threshold to stop the VVS optimization loop.
std::string modelFileName
bool useOgre
Use Ogre3d for global visibility tests.
virtual double getAngleDisappear() const
virtual void setStopCriteriaEpsilon(const double eps)
virtual vpMbHiddenFaces< vpMbtPolygon > & getFaces()
virtual void computeVVSWeights(vpRobust &robust, const vpColVector &error, vpColVector &w)
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false)=0
vpMbHiddenFaces< vpMbtPolygon > faces
Set of faces describing the object.
void projectionErrorInitMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo)
virtual void setCameraParameters(const vpCameraParameters &cam)
virtual void setAngleDisappear(const double &a)
virtual void setCovarianceComputation(const bool &flag)
virtual void setInitialMu(double mu)
virtual void setNbRayCastingAttemptsForVisibility(const unsigned int &attempts)
virtual void setScanLineVisibilityTest(const bool &v)
std::vector< vpMbtDistanceCircle * > m_projectionErrorCircles
Distance circle primitive for projection error.
std::string poseSavingFilename
void loadInitFile(const std::string &initFile, std::vector< std::string > &vectorOfInitFilename, bool parent, const vpHomogeneousMatrix &T, std::vector< vpPoint > &P)
void initProjectionErrorCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="")
virtual void initClick(const vpImage< unsigned char > &I, const std::string &initFile, bool displayHelp=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
unsigned int nbPolygonLines
Number of polygon lines in CAO model.
virtual vpColVector getRobustWeights() const =0
unsigned int m_projectionErrorDisplayThickness
Thickness of the arrows used to show the gradient and model orientation.
virtual void computeCovarianceMatrixVVS(const bool isoJoIdentity, const vpColVector &w_true, const vpHomogeneousMatrix &cMoPrev, const vpMatrix &L_true, const vpMatrix &LVJ_true, const vpColVector &error)
vpMbtOptimizationMethod m_optimizationMethod
Optimization method used.
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)=0
virtual vpMatrix getCovarianceMatrix() const
virtual void computeVVSPoseEstimation(const bool isoJoIdentity, unsigned int iter, vpMatrix &L, vpMatrix &LTL, vpColVector &R, const vpColVector &error, vpColVector &error_prev, vpColVector &LTR, double &mu, vpColVector &v, const vpColVector *const w=nullptr, vpColVector *const m_w_prev=nullptr)
bool displayFeatures
If true, the features are displayed.
virtual void setProjectionErrorDisplay(bool display)
double angleDisappears
Angle used to detect a face disappearance.
virtual unsigned int getNbPolygon() const
virtual void setLambda(double gain)
bool applyLodSettingInConfig
virtual double getProjectionError() const
double distFarClip
Distance for near clipping.
bool m_isoJoIdentity
Boolean to know if oJo is identity (for fast computation).
void projectionErrorVisibleFace(unsigned int width, unsigned int height, const vpHomogeneousMatrix &_cMo)
virtual double getStopCriteriaEpsilon() const
unsigned int m_maxInitPoints
Max allowed number of points in init file.
void removeCommentsAndEmptyLines(std::ifstream &fileId)
bool useScanLine
Use Scanline for global visibility tests.
void computeJTR(const vpMatrix &J, const vpColVector &R, vpColVector &JTR) const
void addProjectionErrorCylinder(const vpPoint &P1, const vpPoint &P2, double r, int idFace=-1, const std::string &name="")
vpMatrix m_SobelY
Sobel kernel in Y.
virtual void setProjectionErrorComputation(const bool &flag)
double angleAppears
Angle used to detect a face appearance.
virtual void setOptimizationMethod(const vpMbtOptimizationMethod &opt)
virtual void computeVVSInteractionMatrixAndResidu()=0
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false)=0
bool m_projectionErrorOgreShowConfigDialog
void initProjectionErrorFaceFromCorners(vpMbtPolygon &polygon)
virtual void extractGroup(SoVRMLGroup *sceneGraphVRML2, vpHomogeneousMatrix &transform, int &idFace)
virtual unsigned int getMaxIter() const
const vpImage< bool > * m_mask
Mask used to disable tracking on a part of image.
virtual double getLambda() const
virtual void initFromPose(const vpImage< unsigned char > &I, const std::string &initFile)
void addProjectionErrorPolygon(const std::vector< vpPoint > &corners, int idFace=-1, const std::string &polygonName="", bool useLod=false, double minPolygonAreaThreshold=2500.0, const double minLineLengthThreshold=50.0)
virtual void setProjectionErrorDisplayArrowThickness(unsigned int thickness)
virtual void setAngleAppear(const double &a)
virtual void setGoodNbRayCastingAttemptsRatio(const double &ratio)
virtual void computeVVSInit()=0
unsigned int m_nbInitPoints
Number of points in init file.
virtual vpMbtPolygon * getPolygon(unsigned int index)
bool computeCovariance
Flag used to specify if the covariance matrix has to be computed or not.
void initProjectionErrorFaceFromLines(vpMbtPolygon &polygon)
virtual void extractLines(SoVRMLIndexedLineSet *line_set, int &idFace, const std::string &polygonName="")
std::vector< vpMbtDistanceLine * > m_projectionErrorLines
Distance line primitives for projection error.
double distNearClip
Distance for near clipping.
bool m_sodb_init_called
Flag that indicates that SoDB::init(); was called.
unsigned int m_maxIter
Maximum number of iterations of the virtual visual servoing stage.
virtual void testTracking()=0
bool ogreShowConfigDialog
vpMbTracker & operator=(const vpMbTracker &tracker)
void addProjectionErrorCircle(const vpPoint &P1, const vpPoint &P2, const vpPoint &P3, double r, int idFace=-1, const std::string &name="")
unsigned int nbCylinders
Number of cylinders in CAO model.
virtual void track(const vpImage< vpRGBa > &I)=0
unsigned int clippingFlag
Flags specifying which clipping to used.
unsigned int m_projectionErrorKernelSize
Kernel size used to compute the gradient orientation.
unsigned int nbCircles
Number of circles in CAO model.
vpPoint getGravityCenter(const std::vector< vpPoint > &_pts) const
vpMe m_projectionErrorMe
Moving-Edges parameters for projection error.
virtual double getFarClippingDistance() const
vpMbHiddenFaces< vpMbtPolygon > m_projectionErrorFaces
Set of faces describing the object, used for projection error.
virtual void initFaceFromCorners(vpMbtPolygon &polygon)=0
virtual unsigned int getClipping() const
void createCylinderBBox(const vpPoint &p1, const vpPoint &p2, const double &radius, std::vector< std::vector< vpPoint > > &listFaces)
virtual void loadConfigFile(const std::string &configFile, bool verbose=true)
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
Implementation of a pose vector and operations on poses.
Contains an M-estimator and various influence function.
Definition vpRobust.h:84
Class for generating random numbers with uniform probability density.
Definition vpUniRand.h:127