39 #ifndef vpMbEdgeTracker_HH
40 #define vpMbEdgeTracker_HH
42 #include <visp3/core/vpPoint.h>
43 #include <visp3/mbt/vpMbTracker.h>
44 #include <visp3/mbt/vpMbtDistanceCircle.h>
45 #include <visp3/mbt/vpMbtDistanceCylinder.h>
46 #include <visp3/mbt/vpMbtDistanceLine.h>
47 #include <visp3/mbt/vpMbtMeLine.h>
48 #include <visp3/me/vpMe.h>
55 #if defined(VISP_HAVE_COIN3D)
57 #include <Inventor/VRMLnodes/SoVRMLCoordinate.h>
58 #include <Inventor/VRMLnodes/SoVRMLGroup.h>
59 #include <Inventor/VRMLnodes/SoVRMLIndexedFaceSet.h>
60 #include <Inventor/VRMLnodes/SoVRMLIndexedLineSet.h>
61 #include <Inventor/VRMLnodes/SoVRMLShape.h>
62 #include <Inventor/actions/SoGetMatrixAction.h>
63 #include <Inventor/actions/SoGetPrimitiveCountAction.h>
64 #include <Inventor/actions/SoSearchAction.h>
65 #include <Inventor/actions/SoToVRML2Action.h>
66 #include <Inventor/actions/SoWriteAction.h>
67 #include <Inventor/misc/SoChildList.h>
68 #include <Inventor/nodes/SoSeparator.h>
71 #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC)
72 #include <opencv2/imgproc/imgproc.hpp>
73 #include <opencv2/imgproc/imgproc_c.h>
245 std::vector<std::list<vpMbtDistanceLine *> >
lines;
248 std::vector<std::list<vpMbtDistanceCircle *> >
circles;
251 std::vector<std::list<vpMbtDistanceCylinder *> >
cylinders;
277 std::vector<const vpImage<unsigned char> *>
Ipyramid;
319 const
vpColor &col,
unsigned int thickness = 1,
bool displayFullModel = false) vp_override;
321 const
vpColor &col,
unsigned int thickness = 1,
bool displayFullModel = false) vp_override;
323 void getLline(std::list<
vpMbtDistanceLine *> &linesList,
unsigned int level = 0) const;
324 void getLcircle(std::list<
vpMbtDistanceCircle *> &circlesList,
unsigned int level = 0) const;
327 virtual std::vector<std::vector<
double> > getModelForDisplay(
unsigned int width,
unsigned int height,
330 bool displayFullModel = false) vp_override;
338 virtual inline
void getMovingEdge(
vpMe &p_me)
const { p_me = this->me; }
346 virtual unsigned int getNbPoints(
unsigned int level = 0)
const;
369 virtual void loadConfigFile(
const std::string &configFile,
bool verbose =
true) vp_override;
373 void resetTracker() vp_override;
384 for (
unsigned int i = 0; i < scales.size(); i += 1) {
386 for (std::list<vpMbtDistanceLine *>::const_iterator it = lines[i].begin(); it != lines[i].end(); ++it) {
387 (*it)->setCameraParameters(m_cam);
390 for (std::list<vpMbtDistanceCylinder *>::const_iterator it = cylinders[i].begin(); it != cylinders[i].end();
392 (*it)->setCameraParameters(m_cam);
395 for (std::list<vpMbtDistanceCircle *>::const_iterator it = circles[i].begin(); it != circles[i].end(); ++it) {
396 (*it)->setCameraParameters(m_cam);
402 virtual void setClipping(
const unsigned int &flags) vp_override;
419 #ifdef VISP_HAVE_OGRE
420 faces.getOgreContext()->setWindowName(
"MBT Edge");
433 for (
unsigned int i = 0; i < scales.size(); i += 1) {
435 for (std::list<vpMbtDistanceLine *>::const_iterator it = lines[i].begin(); it != lines[i].end(); ++it) {
436 (*it)->useScanLine = v;
457 void setMovingEdge(
const vpMe &me);
462 void setScales(
const std::vector<bool> &_scales);
464 void setUseEdgeTracking(
const std::string &name,
const bool &useEdgeTracking);
474 const std::string &name =
"");
475 void addCylinder(
const vpPoint &P1,
const vpPoint &P2,
double r,
int idFace = -1,
const std::string &name =
"");
476 void addLine(
vpPoint &p1,
vpPoint &p2,
int polygon = -1, std::string name =
"");
483 void computeVVSFirstPhase(
const vpImage<unsigned char> &I,
unsigned int iter,
double &count,
unsigned int lvl = 0);
485 void computeVVSFirstPhasePoseEstimation(
unsigned int iter,
bool &isoJoIdentity);
487 virtual
void computeVVSInteractionMatrixAndResidu() vp_override;
488 virtual
void computeVVSInteractionMatrixAndResidu(const
vpImage<
unsigned char> &I);
489 virtual
void computeVVSWeights();
492 void displayFeaturesOnImage(const
vpImage<
unsigned char> &I);
494 void downScale(const
unsigned int _scale);
495 virtual std::vector<std::vector<
double> > getFeaturesForDisplayEdge();
496 virtual
void init(const
vpImage<
unsigned char> &I) vp_override;
497 virtual
void initCircle(const
vpPoint &p1, const
vpPoint &p2, const
vpPoint &p3,
double radius,
int idFace = 0,
498 const std::
string &name = "") vp_override;
499 virtual
void initCylinder(const
vpPoint &p1, const
vpPoint &p2,
double radius,
int idFace = 0,
500 const std::
string &name = "") vp_override;
501 virtual
void initFaceFromCorners(
vpMbtPolygon &polygon) vp_override;
502 virtual
void initFaceFromLines(
vpMbtPolygon &polygon) vp_override;
503 unsigned int initMbtTracking(
unsigned int &nberrors_lines,
unsigned int &nberrors_cylinders,
504 unsigned int &nberrors_circles);
506 void initPyramid(const
vpImage<
unsigned char> &_I, std::vector<const
vpImage<
unsigned char> *> &_pyramid);
507 void reInitLevel(const
unsigned int _lvl);
509 void removeCircle(const std::
string &name);
510 void removeCylinder(const std::
string &name);
511 void removeLine(const std::
string &name);
512 void resetMovingEdge();
513 virtual
void testTracking() vp_override;
514 void trackMovingEdge(const
vpImage<
unsigned char> &I);
515 void updateMovingEdge(const
vpImage<
unsigned char> &I);
516 void updateMovingEdgeWeights();
517 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
vpColVector m_error_edge
(s - s*)
virtual void setOgreVisibilityTest(const bool &v) vp_override
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
virtual void setScanLineVisibilityTest(const bool &v) vp_override
vpColVector m_weightedError_edge
Weighted error.
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
virtual vpColVector getError() const vp_override
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
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.