41#ifndef vpMbEdgeTracker_HH
42#define vpMbEdgeTracker_HH
44#include <visp3/core/vpPoint.h>
45#include <visp3/mbt/vpMbTracker.h>
46#include <visp3/mbt/vpMbtDistanceCircle.h>
47#include <visp3/mbt/vpMbtDistanceCylinder.h>
48#include <visp3/mbt/vpMbtDistanceLine.h>
49#include <visp3/mbt/vpMbtMeLine.h>
50#include <visp3/me/vpMe.h>
57#if defined(VISP_HAVE_COIN3D)
59#include <Inventor/VRMLnodes/SoVRMLCoordinate.h>
60#include <Inventor/VRMLnodes/SoVRMLGroup.h>
61#include <Inventor/VRMLnodes/SoVRMLIndexedFaceSet.h>
62#include <Inventor/VRMLnodes/SoVRMLIndexedLineSet.h>
63#include <Inventor/VRMLnodes/SoVRMLShape.h>
64#include <Inventor/actions/SoGetMatrixAction.h>
65#include <Inventor/actions/SoGetPrimitiveCountAction.h>
66#include <Inventor/actions/SoSearchAction.h>
67#include <Inventor/actions/SoToVRML2Action.h>
68#include <Inventor/actions/SoWriteAction.h>
69#include <Inventor/misc/SoChildList.h>
70#include <Inventor/nodes/SoSeparator.h>
73#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC)
74#include <opencv2/imgproc/imgproc.hpp>
75#include <opencv2/imgproc/imgproc_c.h>
249 std::vector<std::list<vpMbtDistanceLine *> >
lines;
252 std::vector<std::list<vpMbtDistanceCircle *> >
circles;
255 std::vector<std::list<vpMbtDistanceCylinder *> >
cylinders;
281 std::vector<const vpImage<unsigned char> *>
Ipyramid;
323 const vpColor &col,
unsigned int thickness = 1,
bool displayFullModel =
false);
325 const vpColor &col,
unsigned int thickness = 1,
bool displayFullModel =
false);
327 void getLline(std::list<vpMbtDistanceLine *> &linesList,
unsigned int level = 0)
const;
328 void getLcircle(std::list<vpMbtDistanceCircle *> &circlesList,
unsigned int level = 0)
const;
329 void getLcylinder(std::list<vpMbtDistanceCylinder *> &cylindersList,
unsigned int level = 0)
const;
331 virtual std::vector<std::vector<double> >
getModelForDisplay(
unsigned int width,
unsigned int height,
334 bool displayFullModel =
false);
350 virtual unsigned int getNbPoints(
unsigned int level = 0)
const;
373 virtual void loadConfigFile(
const std::string &configFile,
bool verbose =
true);
388 for (
unsigned int i = 0; i < scales.size(); i += 1) {
390 for (std::list<vpMbtDistanceLine *>::const_iterator it = lines[i].begin(); it != lines[i].end(); ++it) {
391 (*it)->setCameraParameters(m_cam);
394 for (std::list<vpMbtDistanceCylinder *>::const_iterator it = cylinders[i].begin(); it != cylinders[i].end();
396 (*it)->setCameraParameters(m_cam);
399 for (std::list<vpMbtDistanceCircle *>::const_iterator it = circles[i].begin(); it != circles[i].end(); ++it) {
400 (*it)->setCameraParameters(m_cam);
406 virtual void setClipping(
const unsigned int &flags);
424 faces.getOgreContext()->setWindowName(
"MBT Edge");
437 for (
unsigned int i = 0; i < scales.size(); i += 1) {
439 for (std::list<vpMbtDistanceLine *>::const_iterator it = lines[i].begin(); it != lines[i].end(); ++it) {
440 (*it)->useScanLine = v;
461 void setMovingEdge(
const vpMe &me);
466 void setScales(
const std::vector<bool> &_scales);
468 void setUseEdgeTracking(
const std::string &name,
const bool &useEdgeTracking);
478 const std::string &name =
"");
479 void addCylinder(
const vpPoint &P1,
const vpPoint &P2,
double r,
int idFace = -1,
const std::string &name =
"");
480 void addLine(
vpPoint &p1,
vpPoint &p2,
int polygon = -1, std::string name =
"");
487 void computeVVSFirstPhase(
const vpImage<unsigned char> &I,
unsigned int iter,
double &count,
unsigned int lvl = 0);
489 void computeVVSFirstPhasePoseEstimation(
unsigned int iter,
bool &isoJoIdentity);
498 void downScale(
const unsigned int _scale);
499 virtual std::vector<std::vector<double> > getFeaturesForDisplayEdge();
502 const std::string &name =
"");
504 const std::string &name =
"");
507 unsigned int initMbtTracking(
unsigned int &nberrors_lines,
unsigned int &nberrors_cylinders,
508 unsigned int &nberrors_circles);
511 void reInitLevel(
const unsigned int _lvl);
513 void removeCircle(
const std::string &name);
514 void removeCylinder(
const std::string &name);
515 void removeLine(
const std::string &name);
516 void resetMovingEdge();
520 void updateMovingEdgeWeights();
521 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.
virtual void setCameraParameters(const vpCameraParameters &cam)
virtual void setScanLineVisibilityTest(const bool &v)
vpRobust m_robust_edge
Robust.
virtual vpColVector getRobustWeights() const
std::vector< std::list< vpMbtDistanceLine * > > lines
vpMe me
The moving edges parameters.
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.
virtual vpColVector getError() const
virtual void setOgreVisibilityTest(const bool &v)
std::vector< std::list< vpMbtDistanceCircle * > > circles
Vector of the tracked circles.
std::vector< const vpImage< unsigned char > * > Ipyramid
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 void getMovingEdge(vpMe &p_me) const
virtual vpMe getMovingEdge() const
unsigned int nbFeaturesForProjErrorComputation
Number of features used in the computation of the projection error.
vpColVector m_factor
Edge VVS variables.
std::vector< bool > getScales() const
vpColVector m_errorCylinders
Main methods for a model-based tracker.
virtual void track(const vpImage< unsigned char > &I)=0
virtual void resetTracker()=0
virtual void init(const vpImage< unsigned char > &I)=0
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)
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="")=0
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="")=0
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
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 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
virtual void computeVVSInit()=0
virtual void testTracking()=0
virtual void initFaceFromCorners(vpMbtPolygon &polygon)=0
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 ...
Contains an M-estimator and various influence function.