39 #ifndef vpMbEdgeTracker_HH
40 #define vpMbEdgeTracker_HH
42 #include <visp3/core/vpConfig.h>
43 #include <visp3/core/vpPoint.h>
44 #include <visp3/mbt/vpMbTracker.h>
45 #include <visp3/mbt/vpMbtDistanceCircle.h>
46 #include <visp3/mbt/vpMbtDistanceCylinder.h>
47 #include <visp3/mbt/vpMbtDistanceLine.h>
48 #include <visp3/mbt/vpMbtMeLine.h>
49 #include <visp3/me/vpMe.h>
56 #if defined(VISP_HAVE_COIN3D)
58 #include <Inventor/VRMLnodes/SoVRMLCoordinate.h>
59 #include <Inventor/VRMLnodes/SoVRMLGroup.h>
60 #include <Inventor/VRMLnodes/SoVRMLIndexedFaceSet.h>
61 #include <Inventor/VRMLnodes/SoVRMLIndexedLineSet.h>
62 #include <Inventor/VRMLnodes/SoVRMLShape.h>
63 #include <Inventor/actions/SoGetMatrixAction.h>
64 #include <Inventor/actions/SoGetPrimitiveCountAction.h>
65 #include <Inventor/actions/SoSearchAction.h>
66 #include <Inventor/actions/SoToVRML2Action.h>
67 #include <Inventor/actions/SoWriteAction.h>
68 #include <Inventor/misc/SoChildList.h>
69 #include <Inventor/nodes/SoSeparator.h>
72 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC)
73 #include <opencv2/imgproc/imgproc.hpp>
74 #if (VISP_HAVE_OPENCV_VERSION < 0x050000)
75 #include <opencv2/imgproc/imgproc_c.h>
258 std::vector<std::list<vpMbtDistanceLine *> >
lines;
261 std::vector<std::list<vpMbtDistanceCircle *> >
circles;
264 std::vector<std::list<vpMbtDistanceCylinder *> >
cylinders;
290 std::vector<const vpImage<unsigned char> *>
Ipyramid;
332 const
vpColor &col,
unsigned int thickness = 1,
bool displayFullModel = false) VP_OVERRIDE;
334 const
vpColor &col,
unsigned int thickness = 1,
bool displayFullModel = false) VP_OVERRIDE;
336 void getLline(std::list<
vpMbtDistanceLine *> &linesList,
unsigned int level = 0) const;
337 void getLcircle(std::list<
vpMbtDistanceCircle *> &circlesList,
unsigned int level = 0) const;
340 virtual std::vector<std::vector<
double> > getModelForDisplay(
unsigned int width,
unsigned int height,
343 bool displayFullModel = false) VP_OVERRIDE;
351 virtual inline
void getMovingEdge(
vpMe &p_me)
const { p_me = this->me; }
359 virtual unsigned int getNbPoints(
unsigned int level = 0)
const;
382 virtual void loadConfigFile(
const std::string &configFile,
bool verbose =
true) VP_OVERRIDE;
386 void resetTracker() VP_OVERRIDE;
397 for (
unsigned int i = 0; i < scales.size(); i += 1) {
399 for (std::list<vpMbtDistanceLine *>::const_iterator it = lines[i].begin(); it != lines[i].end(); ++it) {
400 (*it)->setCameraParameters(m_cam);
403 for (std::list<vpMbtDistanceCylinder *>::const_iterator it = cylinders[i].begin(); it != cylinders[i].end();
405 (*it)->setCameraParameters(m_cam);
408 for (std::list<vpMbtDistanceCircle *>::const_iterator it = circles[i].begin(); it != circles[i].end(); ++it) {
409 (*it)->setCameraParameters(m_cam);
415 virtual void setClipping(
const unsigned int &flags) VP_OVERRIDE;
432 #ifdef VISP_HAVE_OGRE
433 faces.getOgreContext()->setWindowName(
"MBT Edge");
446 for (
unsigned int i = 0; i < scales.size(); i += 1) {
448 for (std::list<vpMbtDistanceLine *>::const_iterator it = lines[i].begin(); it != lines[i].end(); ++it) {
449 (*it)->useScanLine = v;
470 void setMovingEdge(
const vpMe &me);
475 void setScales(
const std::vector<bool> &_scales);
477 void setUseEdgeTracking(
const std::string &name,
const bool &useEdgeTracking);
487 const std::string &name =
"");
488 void addCylinder(
const vpPoint &P1,
const vpPoint &P2,
double r,
int idFace = -1,
const std::string &name =
"");
489 void addLine(
vpPoint &p1,
vpPoint &p2,
int polygon = -1, std::string name =
"");
496 void computeVVSFirstPhase(
const vpImage<unsigned char> &I,
unsigned int iter,
double &count,
unsigned int lvl = 0);
498 void computeVVSFirstPhasePoseEstimation(
unsigned int iter,
bool &isoJoIdentity);
500 virtual
void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE;
501 virtual
void computeVVSInteractionMatrixAndResidu(const
vpImage<
unsigned char> &I);
502 virtual
void computeVVSWeights();
505 void displayFeaturesOnImage(const
vpImage<
unsigned char> &I);
507 void downScale(const
unsigned int _scale);
508 virtual std::vector<std::vector<
double> > getFeaturesForDisplayEdge();
509 virtual
void init(const
vpImage<
unsigned char> &I) VP_OVERRIDE;
510 virtual
void initCircle(const
vpPoint &p1, const
vpPoint &p2, const
vpPoint &p3,
double radius,
int idFace = 0,
511 const std::
string &name = "") VP_OVERRIDE;
512 virtual
void initCylinder(const
vpPoint &p1, const
vpPoint &p2,
double radius,
int idFace = 0,
513 const std::
string &name = "") VP_OVERRIDE;
514 virtual
void initFaceFromCorners(
vpMbtPolygon &polygon) VP_OVERRIDE;
515 virtual
void initFaceFromLines(
vpMbtPolygon &polygon) VP_OVERRIDE;
516 unsigned int initMbtTracking(
unsigned int &nberrors_lines,
unsigned int &nberrors_cylinders,
517 unsigned int &nberrors_circles);
519 void initPyramid(const
vpImage<
unsigned char> &_I, std::vector<const
vpImage<
unsigned char> *> &_pyramid);
520 void reInitLevel(const
unsigned int _lvl);
522 void removeCircle(const std::
string &name);
523 void removeCylinder(const std::
string &name);
524 void removeLine(const std::
string &name);
525 void resetMovingEdge();
526 virtual
void testTracking() VP_OVERRIDE;
527 void trackMovingEdge(const
vpImage<
unsigned char> &I);
528 void updateMovingEdge(const
vpImage<
unsigned char> &I);
529 void updateMovingEdgeWeights();
530 void upScale(const
unsigned int _scale);
Generic class defining intrinsic camera parameters.
Implementation of column vector and the associated operations.
Class to define RGB colors available for display functionalities.
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.
Make the complete tracking of an object by using its CAD model.
double getGoodMovingEdgesRatioThreshold() const
vpColVector m_errorCircles
vpColVector m_w_edge
Robust weights.
vpRobust m_robust_edge
Robust.
std::vector< std::list< vpMbtDistanceLine * > > lines
vpMe me
The moving edges parameters.
std::vector< bool > getScales() const
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
vpColVector m_error_edge
(s - s*)
std::vector< std::list< vpMbtDistanceCylinder * > > cylinders
Vector of the tracked cylinders.
std::vector< std::vector< double > > m_featuresToBeDisplayedEdge
Display features.
unsigned int nbvisiblepolygone
Number of polygon (face) currently visible.
std::vector< std::list< vpMbtDistanceCircle * > > circles
Vector of the tracked circles.
std::vector< const vpImage< unsigned char > * > Ipyramid
vpColVector m_weightedError_edge
Weighted error.
virtual void setOgreVisibilityTest(const bool &v) VP_OVERRIDE
std::vector< bool > scales
Vector of scale level to use for the multi-scale tracking.
vpMatrix m_L_edge
Interaction matrix.
vpRobust m_robustCylinders
void setGoodMovingEdgesRatioThreshold(double threshold)
virtual vpMe getMovingEdge() const
unsigned int nbFeaturesForProjErrorComputation
Number of features used in the computation of the projection error.
vpColVector m_factor
Edge VVS variables.
virtual vpColVector getRobustWeights() const VP_OVERRIDE
virtual vpColVector getError() const VP_OVERRIDE
vpColVector m_errorCylinders
Main methods for a model-based tracker.
virtual void track(const vpImage< unsigned char > &I)=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)
virtual void setScanLineVisibilityTest(const bool &v)
virtual void setOgreVisibilityTest(const bool &v)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)=0
virtual void setNearClippingDistance(const double &dist)
virtual void setFarClippingDistance(const double &dist)
virtual void setClipping(const unsigned int &flags)
virtual void computeVVSInit()=0
virtual void loadConfigFile(const std::string &configFile, bool verbose=true)
Manage a circle used in the model-based tracker.
Manage a cylinder used in the model-based tracker.
Manage the line of a polygon used in the model-based tracker.
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 ...
Contains an M-estimator and various influence function.