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>
60#include <visp3/mbt/vpMbtDistanceCircle.h>
61#include <visp3/mbt/vpMbtDistanceCylinder.h>
62#include <visp3/mbt/vpMbtDistanceLine.h>
64#ifdef VISP_HAVE_COIN3D
72#include <Inventor/VRMLnodes/SoVRMLGroup.h>
73#include <Inventor/VRMLnodes/SoVRMLIndexedFaceSet.h>
74#include <Inventor/VRMLnodes/SoVRMLIndexedLineSet.h>
281 std::cerr <<
"Warning : The covariance matrix has not been computed. "
282 "See setCovarianceComputation() to do it."
379 virtual inline unsigned int getNbPolygon()
const {
return static_cast<unsigned int>(
faces.size()); }
408 if (index >=
static_cast<unsigned int>(
faces.size())) {
415 virtual std::pair<std::vector<vpPolygon>, std::vector<std::vector<vpPoint> > >
416 getPolygonFaces(
bool orderPolygons =
true,
bool useVisibility =
true,
bool clipPolygon =
false);
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,
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 =
"");
453 virtual void initFromPoints(
const vpImage<vpRGBa> &I_color,
const std::string &initFile);
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);
461 virtual void initFromPose(
const vpImage<vpRGBa> &I_color,
const std::string &initFile);
469 virtual void loadModel(
const std::string &modelFile,
bool verbose =
false,
501 virtual void setClipping(
const unsigned int &flags);
531 virtual void setEstimatedDoF(
const vpColVector &v);
533 virtual void setFarClippingDistance(
const double &dist);
549 virtual void setLod(
bool useLod,
const std::string &name =
"");
558 virtual void setMinLineLengthThresh(
double minLineLengthThresh,
const std::string &name =
"");
560 virtual void setMinPolygonAreaThresh(
double minPolygonAreaThresh,
const std::string &name =
"");
562 virtual void setNearClippingDistance(
const double &dist);
571 void setProjectionErrorMovingEdge(
const vpMe &me);
573 void setProjectionErrorKernelSize(
const unsigned int &size);
625 virtual void setOgreVisibilityTest(
const bool &v);
627 void savePose(
const std::string &filename)
const;
651 faces.setNbRayCastingAttemptsForVisibility(attempts);
694 const vpColor &col,
unsigned int thickness = 1,
bool displayFullModel =
false) = 0;
708 const vpColor &col,
unsigned int thickness = 1,
bool displayFullModel =
false) = 0;
710 virtual std::vector<std::vector<double> >
getModelForDisplay(
unsigned int width,
unsigned int height,
713 bool displayFullModel =
false) = 0;
730 virtual void loadConfigFile(
const std::string &configFile,
bool verbose =
true);
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);
787 const std::string &polygonName =
"",
bool useLod =
false,
double minPolygonAreaThreshold = 2500.0);
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);
794 const std::string &name =
"");
796 const std::string &name =
"");
800 const std::string &polygonName =
"",
bool useLod =
false,
801 double minPolygonAreaThreshold = 2500.0,
const double minLineLengthThreshold = 50.0);
803 int idFace = -1,
const std::string &polygonName =
"",
bool useLod =
false,
804 double minPolygonAreaThreshold = 2500.0);
806 const std::string &polygonName =
"",
bool useLod =
false,
807 double minLineLengthThreshold = 50);
809 const std::string &polygonName =
"",
bool useLod =
false,
810 double minLineLengthThreshold = 50);
813 std::vector<std::vector<vpPoint> > &listFaces);
826 bool &reStartFromLastIncrement,
vpColVector *
const w =
nullptr,
836#ifdef VISP_HAVE_COIN3D
839 const std::string &polygonName =
"");
840 virtual void extractLines(SoVRMLIndexedLineSet *line_set,
int &idFace,
const std::string &polygonName =
"");
842 const std::string &polygonName =
"");
859 const std::string &name =
"") = 0;
861#ifdef VISP_HAVE_MODULE_GUI
863 const std::string &initFile,
bool displayHelp =
false,
867 const std::vector<vpPoint> &points3D_list,
const std::string &displayFile =
"");
871 const std::string &initFile);
874 const std::vector<vpImagePoint> &points2D_list,
875 const std::vector<vpPoint> &points3D_list);
878 const std::string &initFile);
891 const std::string &name =
"") = 0;
909 const std::string &name =
"");
911 const std::string &name =
"");
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,
927 std::map<std::string, std::string>
parseParameters(std::string &endLine);
Generic class defining intrinsic camera parameters.
Implementation of column vector and the associated operations.
Class to define RGB colors available for display functionalities.
error that can be emitted by ViSP classes.
@ dimensionError
Bad dimension.
Implementation of an homogeneous matrix and operations on such kind of matrices.
Definition of the vpImage class member functions.
Implementation of a matrix and operations on matrices.
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.
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.
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 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 <L, vpColVector &R, const vpColVector &error, vpColVector &error_prev, vpColVector <R, 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.
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
Implementation of a pose vector and operations on poses.
Contains an M-estimator and various influence function.
Class for generating random numbers with uniform probability density.