40 #ifndef _vpMbGenericTracker_h_
41 #define _vpMbGenericTracker_h_
43 #include <visp3/mbt/vpMbDepthDenseTracker.h>
44 #include <visp3/mbt/vpMbDepthNormalTracker.h>
45 #include <visp3/mbt/vpMbEdgeTracker.h>
46 #include <visp3/mbt/vpMbKltTracker.h>
84 EDGE_TRACKER = 1 << 0,
85 #if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100))
88 DEPTH_NORMAL_TRACKER = 1 << 2,
89 DEPTH_DENSE_TRACKER = 1 << 3
95 vpMbGenericTracker(
const std::vector<std::string> &cameraNames,
const std::vector<int> &trackerTypes);
105 const vpColor &col,
unsigned int thickness = 1,
bool displayFullModel =
false);
107 const vpColor &col,
unsigned int thickness = 1,
bool displayFullModel =
false);
112 bool displayFullModel =
false);
115 const vpColor &color,
unsigned int thickness = 1,
bool displayFullModel =
false);
118 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
119 const std::map<std::string, vpCameraParameters> &mapOfCameraParameters,
const vpColor &col,
120 unsigned int thickness = 1,
bool displayFullModel =
false);
122 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
123 const std::map<std::string, vpCameraParameters> &mapOfCameraParameters,
const vpColor &col,
124 unsigned int thickness = 1,
bool displayFullModel =
false);
126 virtual std::vector<std::string> getCameraNames()
const;
131 virtual void getCameraParameters(std::map<std::string, vpCameraParameters> &mapOfCameraParameters)
const;
133 virtual std::map<std::string, int> getCameraTrackerTypes()
const;
136 virtual void getClipping(
unsigned int &clippingFlag1,
unsigned int &clippingFlag2)
const;
137 virtual void getClipping(std::map<std::string, unsigned int> &mapOfClippingFlags)
const;
144 #if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100))
145 virtual std::list<vpMbtDistanceCircle *> &getFeaturesCircle();
146 virtual std::list<vpMbtDistanceKltCylinder *> &getFeaturesKltCylinder();
147 virtual std::list<vpMbtDistanceKltPoints *> &getFeaturesKlt();
150 virtual std::vector<std::vector<double> > getFeaturesForDisplay();
151 virtual void getFeaturesForDisplay(std::map<std::string, std::vector<std::vector<double> > > &mapOfFeatures);
153 virtual double getGoodMovingEdgesRatioThreshold()
const;
155 #if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100))
156 virtual std::vector<vpImagePoint> getKltImagePoints()
const;
157 virtual std::map<int, vpImagePoint> getKltImagePointsWithId()
const;
159 virtual unsigned int getKltMaskBorder()
const;
160 virtual int getKltNbPoints()
const;
164 virtual void getKltOpencv(std::map<std::string, vpKltOpencv> &mapOfKlts)
const;
166 #if (VISP_HAVE_OPENCV_VERSION >= 0x020408)
167 virtual std::vector<cv::Point2f> getKltPoints()
const;
170 virtual double getKltThresholdAcceptation()
const;
173 virtual void getLcircle(std::list<vpMbtDistanceCircle *> &circlesList,
unsigned int level = 0)
const;
174 virtual void getLcircle(
const std::string &cameraName, std::list<vpMbtDistanceCircle *> &circlesList,
175 unsigned int level = 0)
const;
176 virtual void getLcylinder(std::list<vpMbtDistanceCylinder *> &cylindersList,
unsigned int level = 0)
const;
177 virtual void getLcylinder(
const std::string &cameraName, std::list<vpMbtDistanceCylinder *> &cylindersList,
178 unsigned int level = 0)
const;
179 virtual void getLline(std::list<vpMbtDistanceLine *> &linesList,
unsigned int level = 0)
const;
180 virtual void getLline(
const std::string &cameraName, std::list<vpMbtDistanceLine *> &linesList,
181 unsigned int level = 0)
const;
183 virtual std::vector<std::vector<double> >
getModelForDisplay(
unsigned int width,
unsigned int height,
186 bool displayFullModel =
false);
187 virtual void getModelForDisplay(std::map<std::string, std::vector<std::vector<double> > > &mapOfModels,
188 const std::map<std::string, unsigned int> &mapOfwidths,
189 const std::map<std::string, unsigned int> &mapOfheights,
190 const std::map<std::string, vpHomogeneousMatrix> &mapOfcMos,
191 const std::map<std::string, vpCameraParameters> &mapOfCams,
192 bool displayFullModel =
false);
194 virtual vpMe getMovingEdge()
const;
195 virtual void getMovingEdge(
vpMe &me1,
vpMe &me2)
const;
196 virtual void getMovingEdge(std::map<std::string, vpMe> &mapOfMovingEdges)
const;
217 virtual unsigned int getNbPoints(
unsigned int level = 0)
const;
218 virtual void getNbPoints(std::map<std::string, unsigned int> &mapOfNbPoints,
unsigned int level = 0)
const;
221 virtual void getNbPolygon(std::map<std::string, unsigned int> &mapOfNbPolygons)
const;
226 virtual std::pair<std::vector<vpPolygon>, std::vector<std::vector<vpPoint> > >
227 getPolygonFaces(
bool orderPolygons =
true,
bool useVisibility =
true,
bool clipPolygon =
false);
228 virtual void getPolygonFaces(std::map<std::string, std::vector<vpPolygon> > &mapOfPolygons,
229 std::map<std::string, std::vector<std::vector<vpPoint> > > &mapOfPoints,
230 bool orderPolygons =
true,
bool useVisibility =
true,
bool clipPolygon =
false);
235 virtual void getPose(std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses)
const;
237 virtual std::string getReferenceCameraName()
const;
241 virtual int getTrackerType()
const;
245 #ifdef VISP_HAVE_MODULE_GUI
248 const std::string &initFile1,
const std::string &initFile2,
bool displayHelp =
false,
252 const std::string &initFile2,
bool displayHelp =
false,
258 const std::map<std::string, std::string> &mapOfInitFiles,
bool displayHelp =
false,
259 const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
262 const std::map<std::string, std::string> &mapOfInitFiles,
bool displayHelp =
false,
263 const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
268 const std::string &initFile1,
const std::string &initFile2);
270 const std::string &initFile1,
const std::string &initFile2);
273 const std::map<std::string, std::string> &mapOfInitPoints);
275 const std::map<std::string, std::string> &mapOfInitPoints);
280 const std::string &initFile1,
const std::string &initFile2);
282 const std::string &initFile1,
const std::string &initFile2);
285 const std::map<std::string, std::string> &mapOfInitPoses);
287 const std::map<std::string, std::string> &mapOfInitPoses);
295 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
297 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
299 virtual void loadConfigFile(
const std::string &configFile,
bool verbose =
true);
300 virtual void loadConfigFile(
const std::string &configFile1,
const std::string &configFile2,
bool verbose =
true);
301 virtual void loadConfigFile(
const std::map<std::string, std::string> &mapOfConfigFiles,
bool verbose =
true);
303 virtual void loadModel(
const std::string &modelFile,
bool verbose =
false,
305 virtual void loadModel(
const std::string &modelFile1,
const std::string &modelFile2,
bool verbose =
false,
309 loadModel(
const std::map<std::string, std::string> &mapOfModelFiles,
bool verbose =
false,
310 const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
318 const std::string &cad_name1,
const std::string &cad_name2,
const vpHomogeneousMatrix &c1Mo,
323 const std::string &cad_name1,
const std::string &cad_name2,
const vpHomogeneousMatrix &c1Mo,
330 const std::map<std::string, std::string> &mapOfModelFiles,
331 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
bool verbose =
false,
332 const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
334 reInitModel(
const std::map<std::string,
const vpImage<vpRGBa> *> &mapOfColorImages,
335 const std::map<std::string, std::string> &mapOfModelFiles,
336 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
bool verbose =
false,
337 const std::map<std::string, vpHomogeneousMatrix> &mapOfT = std::map<std::string, vpHomogeneousMatrix>());
343 virtual void setAngleAppear(
const std::map<std::string, double> &mapOfAngles);
347 virtual void setAngleDisappear(
const std::map<std::string, double> &mapOfAngles);
351 virtual void setCameraParameters(
const std::map<std::string, vpCameraParameters> &mapOfCameraParameters);
353 virtual void setCameraTransformationMatrix(
const std::string &cameraName,
356 setCameraTransformationMatrix(
const std::map<std::string, vpHomogeneousMatrix> &mapOfTransformationMatrix);
358 virtual void setClipping(
const unsigned int &flags);
359 virtual void setClipping(
const unsigned int &flags1,
const unsigned int &flags2);
360 virtual void setClipping(
const std::map<std::string, unsigned int> &mapOfClippingFlags);
362 virtual void setDepthDenseFilteringMaxDistance(
double maxDistance);
363 virtual void setDepthDenseFilteringMethod(
int method);
364 virtual void setDepthDenseFilteringMinDistance(
double minDistance);
365 virtual void setDepthDenseFilteringOccupancyRatio(
double occupancyRatio);
366 virtual void setDepthDenseSamplingStep(
unsigned int stepX,
unsigned int stepY);
370 virtual void setDepthNormalPclPlaneEstimationMethod(
int method);
371 virtual void setDepthNormalPclPlaneEstimationRansacMaxIter(
int maxIter);
372 virtual void setDepthNormalPclPlaneEstimationRansacThreshold(
double threshold);
373 virtual void setDepthNormalSamplingStep(
unsigned int stepX,
unsigned int stepY);
381 virtual void setFeatureFactors(
const std::map<vpTrackerType, double> &mapOfFeatureFactors);
383 virtual void setGoodMovingEdgesRatioThreshold(
double threshold);
385 #ifdef VISP_HAVE_OGRE
390 #if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100))
391 virtual void setKltMaskBorder(
const unsigned int &e);
392 virtual void setKltMaskBorder(
const unsigned int &e1,
const unsigned int &e2);
393 virtual void setKltMaskBorder(
const std::map<std::string, unsigned int> &mapOfErosions);
397 virtual void setKltOpencv(
const std::map<std::string, vpKltOpencv> &mapOfKlts);
399 virtual void setKltThresholdAcceptation(
double th);
403 virtual void setLod(
bool useLod,
const std::string &name =
"");
410 virtual void setMovingEdge(
const vpMe &me);
411 virtual void setMovingEdge(
const vpMe &me1,
const vpMe &me2);
412 virtual void setMovingEdge(
const std::map<std::string, vpMe> &mapOfMe);
432 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
434 const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
442 virtual void setReferenceCameraName(
const std::string &referenceCameraName);
446 virtual void setTrackerType(
int type);
447 virtual void setTrackerType(
const std::map<std::string, int> &mapOfTrackerTypes);
449 virtual void setUseDepthDenseTracking(
const std::string &name,
const bool &useDepthDenseTracking);
450 virtual void setUseDepthNormalTracking(
const std::string &name,
const bool &useDepthNormalTracking);
451 virtual void setUseEdgeTracking(
const std::string &name,
const bool &useEdgeTracking);
452 #if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100))
453 virtual void setUseKltTracking(
const std::string &name,
const bool &useKltTracking);
469 std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds);
471 std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds);
475 std::map<std::string,
const std::vector<vpColVector> *> &mapOfPointClouds,
476 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
477 std::map<std::string, unsigned int> &mapOfPointCloudHeights);
479 std::map<std::string,
const std::vector<vpColVector> *> &mapOfPointClouds,
480 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
481 std::map<std::string, unsigned int> &mapOfPointCloudHeights);
484 virtual void computeProjectionError();
492 std::map<std::string, vpVelocityTwistMatrix> &mapOfVelocityTwist);
497 const std::string &name =
"");
500 const std::string &name =
"");
508 std::map<std::string, pcl::PointCloud<pcl::PointXYZ>::ConstPtr> &mapOfPointClouds);
511 std::map<std::string,
const std::vector<vpColVector> *> &mapOfPointClouds,
512 std::map<std::string, unsigned int> &mapOfPointCloudWidths,
513 std::map<std::string, unsigned int> &mapOfPointCloudHeights);
517 #if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100))
538 explicit TrackerWrapper(
int trackerType);
540 virtual ~TrackerWrapper();
546 virtual inline int getTrackerType()
const {
return m_trackerType; }
549 const vpColor &col,
unsigned int thickness = 1,
bool displayFullModel =
false);
551 const vpColor &col,
unsigned int thickness = 1,
bool displayFullModel =
false);
555 virtual std::vector<std::vector<double> >
getModelForDisplay(
unsigned int width,
unsigned int height,
558 bool displayFullModel =
false);
562 virtual void loadConfigFile(
const std::string &configFile,
bool verbose =
true);
575 virtual void setClipping(
const unsigned int &flags);
599 #if !((__GNUC__ == 4) && (__GNUC_MINOR__ == 6))
605 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud);
619 const std::string &name =
"");
622 const std::string &name =
"");
631 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud);
633 const pcl::PointCloud<pcl::PointXYZ>::ConstPtr &point_cloud);
635 virtual void postTracking(
const vpImage<unsigned char> *
const ptr_I = NULL,
const unsigned int pointcloud_width = 0,
636 const unsigned int pointcloud_height = 0);
638 const std::vector<vpColVector> *
const point_cloud = NULL,
639 const unsigned int pointcloud_width = 0,
const unsigned int pointcloud_height = 0);
648 #if !((__GNUC__ == 4) && (__GNUC_MINOR__ == 6))
Generic class defining intrinsic camera parameters.
Implementation of column vector and the associated operations.
Class to define RGB colors available for display functionnalities.
Implementation of an homogeneous matrix and operations on such kind of matrices.
Wrapper for the KLT (Kanade-Lucas-Tomasi) feature tracker implemented in OpenCV. Thus to enable this ...
Implementation of a matrix and operations on matrices.
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
virtual void track(const vpImage< unsigned char > &)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
virtual void track(const vpImage< unsigned char > &)
Make the complete tracking of an object by using its CAD model.
virtual void computeVVSInteractionMatrixAndResidu()
virtual void track(const vpImage< unsigned char > &I)
Real-time 6D object pose tracking using its CAD model.
virtual void setCameraParameters(const vpCameraParameters &camera)
virtual std::vector< std::vector< double > > getFeaturesForDisplay()
virtual int getTrackerType() const
std::map< std::string, TrackerWrapper * > m_mapOfTrackers
virtual void setProjectionErrorComputation(const bool &flag)
unsigned int m_nb_feat_edge
Number of moving-edges features.
virtual unsigned int getNbFeaturesEdge() const
std::map< std::string, vpHomogeneousMatrix > m_mapOfCameraTransformationMatrix
virtual void resetTracker()
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false)
virtual void computeVVSInteractionMatrixAndResidu()
vpColVector m_w
Robust weights.
virtual void setNearClippingDistance(const double &dist)
virtual unsigned int getNbFeaturesKlt() const
unsigned int m_nb_feat_depthDense
Number of depth dense features.
virtual void initFaceFromCorners(vpMbtPolygon &polygon)
virtual vpColVector getRobustWeights() const
virtual void reInitModel(const vpImage< unsigned char > &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
virtual void setScanLineVisibilityTest(const bool &v)
virtual void testTracking()
virtual unsigned int getNbFeaturesDepthDense() const
vpColVector m_weightedError
Weighted error.
vpMatrix m_L
Interaction matrix.
virtual void init(const vpImage< unsigned char > &I)
virtual void computeVVSWeights()
virtual void computeVVSInit()
virtual unsigned int getNbFeaturesDepthNormal() const
vpColVector m_error
(s - s*)
std::map< vpTrackerType, double > m_mapOfFeatureFactors
Ponderation between each feature type in the VVS stage.
double m_thresholdOutlier
virtual void computeVVS(std::map< std::string, const vpImage< unsigned char > * > &mapOfImages)
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="")
virtual void setTrackerType(int type)
unsigned int m_nb_feat_klt
Number of klt features.
virtual void initFaceFromLines(vpMbtPolygon &polygon)
unsigned int m_nb_feat_depthNormal
Number of depth normal features.
virtual void setFarClippingDistance(const double &dist)
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="")
virtual void preTracking(std::map< std::string, const vpImage< unsigned char > * > &mapOfImages, std::map< std::string, pcl::PointCloud< pcl::PointXYZ >::ConstPtr > &mapOfPointClouds)
virtual void setClipping(const unsigned int &flags)
virtual void loadConfigFile(const std::string &configFile, bool verbose=true)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
virtual void setOgreVisibilityTest(const bool &v)
std::string m_referenceCameraName
Name of the reference camera.
virtual vpColVector getError() const
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false)
virtual void track(const vpImage< unsigned char > &I)
Model based tracker using only KLT.
Main methods for a model-based tracker.
virtual void setProjectionErrorDisplayArrowLength(unsigned int length)
virtual double computeCurrentProjectionError(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo, const vpCameraParameters &_cam)
virtual void track(const vpImage< unsigned char > &I)=0
virtual void resetTracker()=0
virtual void setOgreShowConfigDialog(bool showConfigDialog)
virtual void setMask(const vpImage< bool > &mask)
virtual void setMinLineLengthThresh(double minLineLengthThresh, const std::string &name="")
virtual void getCameraParameters(vpCameraParameters &cam) const
virtual void init(const vpImage< unsigned char > &I)=0
virtual void setDisplayFeatures(bool displayF)
virtual void initFromPoints(const vpImage< unsigned char > &I, const std::string &initFile)
virtual vpHomogeneousMatrix getPose() const
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 setMinPolygonAreaThresh(double minPolygonAreaThresh, const std::string &name="")
virtual void initFaceFromLines(vpMbtPolygon &polygon)=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 void setCameraParameters(const vpCameraParameters &cam)
virtual void setAngleDisappear(const double &a)
virtual void setNbRayCastingAttemptsForVisibility(const unsigned int &attempts)
virtual void setScanLineVisibilityTest(const bool &v)
virtual vpMbHiddenFaces< vpMbtPolygon > & getFaces()
virtual void setOgreVisibilityTest(const bool &v)
virtual void initClick(const vpImage< unsigned char > &I, const std::string &initFile, bool displayHelp=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
virtual void setLod(bool useLod, const std::string &name="")
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)=0
virtual void setProjectionErrorDisplay(bool display)
virtual unsigned int getNbPolygon() const
virtual void setNearClippingDistance(const double &dist)
virtual void setFarClippingDistance(const double &dist)
virtual vpMbtPolygon * getPolygon(unsigned int index)
virtual void setProjectionErrorComputation(const bool &flag)
virtual void setClipping(const unsigned int &flags)
virtual void setOptimizationMethod(const vpMbtOptimizationMethod &opt)
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 initFromPose(const vpImage< unsigned char > &I, const std::string &initFile)
virtual void setProjectionErrorDisplayArrowThickness(unsigned int thickness)
virtual void loadModel(const std::string &modelFile, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
virtual void setAngleAppear(const double &a)
virtual void setGoodNbRayCastingAttemptsRatio(const double &ratio)
virtual void computeVVSInit()=0
virtual std::pair< std::vector< vpPolygon >, std::vector< std::vector< vpPoint > > > getPolygonFaces(bool orderPolygons=true, bool useVisibility=true, bool clipPolygon=false)
virtual void testTracking()=0
virtual void initFaceFromCorners(vpMbtPolygon &polygon)=0
virtual unsigned int getClipping() const
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 ...