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 #include <opencv2/imgproc/imgproc_c.h>
256 std::vector<std::list<vpMbtDistanceLine *> >
lines;
259 std::vector<std::list<vpMbtDistanceCircle *> >
circles;
262 std::vector<std::list<vpMbtDistanceCylinder *> >
cylinders;
288 std::vector<const vpImage<unsigned char> *>
Ipyramid;
330 const
vpColor &col,
unsigned int thickness = 1,
bool displayFullModel = false) VP_OVERRIDE;
332 const
vpColor &col,
unsigned int thickness = 1,
bool displayFullModel = false) VP_OVERRIDE;
334 void getLline(std::list<
vpMbtDistanceLine *> &linesList,
unsigned int level = 0) const;
335 void getLcircle(std::list<
vpMbtDistanceCircle *> &circlesList,
unsigned int level = 0) const;
338 virtual std::vector<std::vector<
double> > getModelForDisplay(
unsigned int width,
unsigned int height,
341 bool displayFullModel = false) VP_OVERRIDE;
349 virtual inline
void getMovingEdge(
vpMe &p_me)
const { p_me = this->me; }
357 virtual unsigned int getNbPoints(
unsigned int level = 0)
const;
380 virtual void loadConfigFile(
const std::string &configFile,
bool verbose =
true) VP_OVERRIDE;
384 void resetTracker() VP_OVERRIDE;
395 for (
unsigned int i = 0; i < scales.size(); i += 1) {
397 for (std::list<vpMbtDistanceLine *>::const_iterator it = lines[i].begin(); it != lines[i].end(); ++it) {
398 (*it)->setCameraParameters(m_cam);
401 for (std::list<vpMbtDistanceCylinder *>::const_iterator it = cylinders[i].begin(); it != cylinders[i].end();
403 (*it)->setCameraParameters(m_cam);
406 for (std::list<vpMbtDistanceCircle *>::const_iterator it = circles[i].begin(); it != circles[i].end(); ++it) {
407 (*it)->setCameraParameters(m_cam);
413 virtual void setClipping(
const unsigned int &flags) VP_OVERRIDE;
430 #ifdef VISP_HAVE_OGRE
431 faces.getOgreContext()->setWindowName(
"MBT Edge");
444 for (
unsigned int i = 0; i < scales.size(); i += 1) {
446 for (std::list<vpMbtDistanceLine *>::const_iterator it = lines[i].begin(); it != lines[i].end(); ++it) {
447 (*it)->useScanLine = v;
468 void setMovingEdge(
const vpMe &me);
473 void setScales(
const std::vector<bool> &_scales);
475 void setUseEdgeTracking(
const std::string &name,
const bool &useEdgeTracking);
485 const std::string &name =
"");
486 void addCylinder(
const vpPoint &P1,
const vpPoint &P2,
double r,
int idFace = -1,
const std::string &name =
"");
487 void addLine(
vpPoint &p1,
vpPoint &p2,
int polygon = -1, std::string name =
"");
494 void computeVVSFirstPhase(
const vpImage<unsigned char> &I,
unsigned int iter,
double &count,
unsigned int lvl = 0);
496 void computeVVSFirstPhasePoseEstimation(
unsigned int iter,
bool &isoJoIdentity);
498 virtual
void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE;
499 virtual
void computeVVSInteractionMatrixAndResidu(const
vpImage<
unsigned char> &I);
500 virtual
void computeVVSWeights();
503 void displayFeaturesOnImage(const
vpImage<
unsigned char> &I);
505 void downScale(const
unsigned int _scale);
506 virtual std::vector<std::vector<
double> > getFeaturesForDisplayEdge();
507 virtual
void init(const
vpImage<
unsigned char> &I) VP_OVERRIDE;
508 virtual
void initCircle(const
vpPoint &p1, const
vpPoint &p2, const
vpPoint &p3,
double radius,
int idFace = 0,
509 const std::
string &name = "") VP_OVERRIDE;
510 virtual
void initCylinder(const
vpPoint &p1, const
vpPoint &p2,
double radius,
int idFace = 0,
511 const std::
string &name = "") VP_OVERRIDE;
512 virtual
void initFaceFromCorners(
vpMbtPolygon &polygon) VP_OVERRIDE;
513 virtual
void initFaceFromLines(
vpMbtPolygon &polygon) VP_OVERRIDE;
514 unsigned int initMbtTracking(
unsigned int &nberrors_lines,
unsigned int &nberrors_cylinders,
515 unsigned int &nberrors_circles);
517 void initPyramid(const
vpImage<
unsigned char> &_I, std::vector<const
vpImage<
unsigned char> *> &_pyramid);
518 void reInitLevel(const
unsigned int _lvl);
520 void removeCircle(const std::
string &name);
521 void removeCylinder(const std::
string &name);
522 void removeLine(const std::
string &name);
523 void resetMovingEdge();
524 virtual
void testTracking() VP_OVERRIDE;
525 void trackMovingEdge(const
vpImage<
unsigned char> &I);
526 void updateMovingEdge(const
vpImage<
unsigned char> &I);
527 void updateMovingEdgeWeights();
528 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.