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>
271 std::vector<std::list<vpMbtDistanceLine *> >
lines;
274 std::vector<std::list<vpMbtDistanceCircle *> >
circles;
277 std::vector<std::list<vpMbtDistanceCylinder *> >
cylinders;
303 std::vector<const vpImage<unsigned char> *>
Ipyramid;
344 const
vpColor &col,
unsigned int thickness = 1,
bool displayFullModel = false) VP_OVERRIDE;
346 const
vpColor &col,
unsigned int thickness = 1,
bool displayFullModel = false) VP_OVERRIDE;
352 virtual std::vector<std::vector<
double> >
getModelForDisplay(
unsigned int width,
unsigned int height,
355 bool displayFullModel = false) VP_OVERRIDE;
371 virtual unsigned int getNbPoints(
unsigned int level = 0)
const;
394 virtual void loadConfigFile(
const std::string &configFile,
bool verbose =
true) VP_OVERRIDE;
398 void resetTracker() VP_OVERRIDE;
409 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
411 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[i].begin(); it !=
lines[i].end(); ++it) {
412 (*it)->setCameraParameters(
m_cam);
415 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[i].begin(); it !=
cylinders[i].end();
417 (*it)->setCameraParameters(
m_cam);
420 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[i].begin(); it !=
circles[i].end(); ++it) {
421 (*it)->setCameraParameters(
m_cam);
427 virtual void setClipping(
const unsigned int &flags) VP_OVERRIDE;
445 faces.getOgreContext()->setWindowName(
"MBT Edge");
458 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
460 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[i].begin(); it !=
lines[i].end(); ++it) {
461 (*it)->useScanLine = v;
482 void setMovingEdge(
const vpMe &me);
487 void setScales(
const std::vector<bool> &_scales);
489 void setUseEdgeTracking(
const std::string &name,
const bool &useEdgeTracking);
499 const std::string &name =
"");
500 void addCylinder(
const vpPoint &P1,
const vpPoint &P2,
double r,
int idFace = -1,
const std::string &name =
"");
501 void addLine(
vpPoint &p1,
vpPoint &p2,
int polygon = -1, std::string name =
"");
508 void computeVVSFirstPhase(
const vpImage<unsigned char> &I,
unsigned int iter,
double &count,
unsigned int lvl = 0);
510 void computeVVSFirstPhasePoseEstimation(
unsigned int iter,
bool &isoJoIdentity);
512 virtual
void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE;
513 virtual
void computeVVSInteractionMatrixAndResidu(const
vpImage<
unsigned char> &I);
514 virtual
void computeVVSWeights();
517 void displayFeaturesOnImage(const
vpImage<
unsigned char> &I);
519 void downScale(const
unsigned int _scale);
520 virtual std::vector<std::vector<
double> > getFeaturesForDisplayEdge();
521 virtual
void init(const
vpImage<
unsigned char> &I) VP_OVERRIDE;
522 virtual
void initCircle(const
vpPoint &p1, const
vpPoint &p2, const
vpPoint &p3,
double radius,
int idFace = 0,
523 const std::
string &name =
"") VP_OVERRIDE;
524 virtual
void initCylinder(const
vpPoint &p1, const
vpPoint &p2,
double radius,
int idFace = 0,
525 const std::
string &name =
"") VP_OVERRIDE;
526 virtual
void initFaceFromCorners(
vpMbtPolygon &polygon) VP_OVERRIDE;
527 virtual
void initFaceFromLines(
vpMbtPolygon &polygon) VP_OVERRIDE;
528 unsigned int initMbtTracking(
unsigned int &nberrors_lines,
unsigned int &nberrors_cylinders,
529 unsigned int &nberrors_circles);
531 void initPyramid(const
vpImage<
unsigned char> &_I, std::vector<const
vpImage<
unsigned char> *> &_pyramid);
532 void reInitLevel(const
unsigned int _lvl);
534 void removeCircle(const std::
string &name);
535 void removeCylinder(const std::
string &name);
536 void removeLine(const std::
string &name);
537 void resetMovingEdge();
538 virtual
void testTracking() VP_OVERRIDE;
539 void trackMovingEdge(const
vpImage<
unsigned char> &I);
540 void updateMovingEdge(const
vpImage<
unsigned char> &I);
541 void updateMovingEdgeWeights();
542 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.
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.
void getLcylinder(std::list< vpMbtDistanceCylinder * > &cylindersList, unsigned int level=0) const
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false) 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.
void getLcircle(std::list< vpMbtDistanceCircle * > &circlesList, unsigned int level=0) const
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 std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false) VP_OVERRIDE
virtual void getMovingEdge(vpMe &p_me) const
virtual vpMe getMovingEdge() const
virtual void setCameraParameters(const vpCameraParameters &cam) VP_OVERRIDE
void getLline(std::list< vpMbtDistanceLine * > &linesList, unsigned int level=0) 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
std::vector< bool > getScales() const
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)
vpCameraParameters m_cam
The camera parameters.
vpMbHiddenFaces< vpMbtPolygon > faces
Set of faces describing the object.
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.