Visual Servoing Platform  version 3.0.1
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
vpMbEdgeKltMultiTracker.h
1 /****************************************************************************
2  *
3  * This file is part of the ViSP software.
4  * Copyright (C) 2005 - 2016 by INRIA. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * ("GPL") version 2 as published by the Free Software Foundation.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ViSP with software that can not be combined with the GNU
13  * GPL, please contact INRIA about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
17  *
18  * This software was developed at:
19  * INRIA Rennes - Bretagne Atlantique
20  * Campus Universitaire de Beaulieu
21  * 35042 Rennes Cedex
22  * France
23  * http://www.irisa.fr/lagadic
24  *
25  * If you have questions regarding the use of this file, please contact
26  * INRIA at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  *
32  * Description:
33  * Model-based edge klt tracker with multiple cameras.
34  *
35  * Authors:
36  * Souriya Trinh
37  *
38  *****************************************************************************/
39 
45 #ifndef __vpMbEdgeKltMultiTracker_h__
46 #define __vpMbEdgeKltMultiTracker_h__
47 
48 #include <iostream>
49 #include <vector>
50 
51 #include <visp3/core/vpConfig.h>
52 
53 #if (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100))
54 
55 #include <visp3/mbt/vpMbEdgeMultiTracker.h>
56 #include <visp3/mbt/vpMbKltMultiTracker.h>
57 
74 {
75 protected:
79  double lambda;
81  double m_factorKLT;
83  double m_factorMBT;
85  double thresholdKLT;
87  double thresholdMBT;
89  unsigned int maxIter;
90 
92  std::map<std::string, vpHomogeneousMatrix> m_mapOfCameraTransformationMatrix;
93 
95  std::string m_referenceCameraName;
96 
97 
98 public:
100  vpMbEdgeKltMultiTracker(const unsigned int nbCameras);
101  vpMbEdgeKltMultiTracker(const std::vector<std::string> &cameraNames);
102 
103  virtual ~vpMbEdgeKltMultiTracker();
104 
105  virtual void display(const vpImage<unsigned char>& I, const vpHomogeneousMatrix &cMo_, const vpCameraParameters &cam_,
106  const vpColor& col, const unsigned int thickness=1, const bool displayFullModel=false);
107 
108  virtual void display(const vpImage<vpRGBa>& I, const vpHomogeneousMatrix &cMo_, const vpCameraParameters &cam_,
109  const vpColor& col, const unsigned int thickness=1, const bool displayFullModel=false);
110 
111  virtual void display(const vpImage<unsigned char>& I1, const vpImage<unsigned char>& I2, const vpHomogeneousMatrix &c1Mo,
112  const vpHomogeneousMatrix &c2Mo, const vpCameraParameters &cam1, const vpCameraParameters &cam2,
113  const vpColor& color, const unsigned int thickness=1, const bool displayFullModel = false);
114 
115  virtual void display(const vpImage<vpRGBa>& I1, const vpImage<vpRGBa>& I2, const vpHomogeneousMatrix &c1Mo,
116  const vpHomogeneousMatrix &c2Mo, const vpCameraParameters &cam1, const vpCameraParameters &cam2,
117  const vpColor& color, const unsigned int thickness=1, const bool displayFullModel = false);
118 
119  virtual void display(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
120  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
121  const std::map<std::string, vpCameraParameters> &mapOfCameraParameters,
122  const vpColor& col, const unsigned int thickness=1, const bool displayFullModel=false);
123 
124  virtual void display(const std::map<std::string, const vpImage<vpRGBa> *> &mapOfImages,
125  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
126  const std::map<std::string, vpCameraParameters> &mapOfCameraParameters,
127  const vpColor& col, const unsigned int thickness=1, const bool displayFullModel=false);
128 
129  virtual std::vector<std::string> getCameraNames() const;
130 
131  virtual void getCameraParameters(vpCameraParameters &camera) const;
132  virtual void getCameraParameters(vpCameraParameters &cam1, vpCameraParameters &cam2) const;
133  virtual void getCameraParameters(const std::string &cameraName, vpCameraParameters &camera) const;
134  virtual void getCameraParameters(std::map<std::string, vpCameraParameters> &mapOfCameraParameters) const;
135 
137  virtual unsigned int getClipping(const std::string &cameraName) const;
138 
140  vpMbHiddenFaces<vpMbtPolygon>& getEdgeFaces(const std::string &cameraName);
141  std::map<std::string, vpMbHiddenFaces<vpMbtPolygon> > getEdgeFaces() const;
142  vpMbHiddenFaces<vpMbtPolygon>& getKltFaces(const std::string &cameraName);
143  std::map<std::string, vpMbHiddenFaces<vpMbtPolygon> > getKltFaces() const;
144 
150  inline double getFactorKLT() const {
151  return m_factorKLT;
152  }
153 
159  inline double getFactorMBT() const {
160  return m_factorMBT;
161  }
162 
163  virtual unsigned int getNbPolygon() const;
164  virtual std::map<std::string, unsigned int> getEdgeMultiNbPolygon() const;
165  virtual std::map<std::string, unsigned int> getKltMultiNbPolygon() const;
166 
167 
173  inline unsigned int getNumberOfCameras() const {
174  return (unsigned int) m_mapOfKltTrackers.size();
175  }
176 
178  virtual void getPose(vpHomogeneousMatrix &c1Mo, vpHomogeneousMatrix &c2Mo) const;
179  virtual void getPose(const std::string &cameraName, vpHomogeneousMatrix &cMo_) const;
180  virtual void getPose(std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses) const;
181 
182  virtual void init(const vpImage<unsigned char>& I);
183 
184 #ifdef VISP_HAVE_MODULE_GUI
185  virtual void initClick(const vpImage<unsigned char>& I, const std::vector<vpPoint> &points3D_list,
186  const std::string &displayFile="");
187 
188  virtual void initClick(const vpImage<unsigned char>& I, const std::string& initFile, const bool displayHelp=false);
189 
190  virtual void initClick(const vpImage<unsigned char>& I1, const vpImage<unsigned char> &I2,
191  const std::string& initFile1, const std::string& initFile2, const bool displayHelp=false,
192  const bool firstCameraIsReference=true);
193 
194  virtual void initClick(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
195  const std::string &initFile, const bool displayHelp=false);
196 
197  virtual void initClick(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
198  const std::map<std::string, std::string> &mapOfInitFiles, const bool displayHelp=false);
199 #endif
200 
201  virtual void initCircle(const vpPoint&, const vpPoint &, const vpPoint &, const double, const int,
202  const std::string &name="");
203  virtual void initCylinder(const vpPoint&, const vpPoint &, const double, const int,
204  const std::string &name="");
205 
206  virtual void initFromPose(const vpImage<unsigned char>& I, const std::string &initFile);
207  virtual void initFromPose(const vpImage<unsigned char>& I, const vpHomogeneousMatrix &cMo);
208  virtual void initFromPose(const vpImage<unsigned char>& I, const vpPoseVector &cPo);
209 
210  virtual void initFromPose(const vpImage<unsigned char>& I1, const vpImage<unsigned char>& I2,
211  const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo, const bool firstCameraIsReference=true);
212  virtual void initFromPose(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
213  const vpHomogeneousMatrix &cMo_);
214  virtual void initFromPose(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
215  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
216 
217  virtual void initFaceFromCorners(vpMbtPolygon &polygon);
218  virtual void initFaceFromLines(vpMbtPolygon &polygon);
219 
220  virtual void loadConfigFile(const std::string &configFile);
221 
222  virtual void loadConfigFile(const std::string& configFile1, const std::string& configFile2,
223  const bool firstCameraIsReference=true);
224 
225  virtual void loadConfigFile(const std::map<std::string, std::string> &mapOfConfigFiles);
226 
227  virtual void loadModel(const std::string &modelFile, const bool verbose=false);
228 
229  virtual void reInitModel(const vpImage<unsigned char>& I, const std::string &cad_name, const vpHomogeneousMatrix& cMo_,
230  const bool verbose=false);
231  virtual void reInitModel(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2,
232  const std::string &cad_name, const vpHomogeneousMatrix &c1Mo, const vpHomogeneousMatrix &c2Mo,
233  const bool verbose=false, const bool firstCameraIsReference=true);
234  virtual void reInitModel(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
235  const std::string &cad_name, const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses,
236  const bool verbose=false);
237 
238  virtual void resetTracker();
239 
240  virtual void setAngleAppear(const double &a);
241  virtual void setAngleDisappear(const double &a);
242 
243  virtual void setCameraParameters(const vpCameraParameters& camera);
244 
245  virtual void setCameraParameters(const vpCameraParameters& camera1, const vpCameraParameters& camera2,
246  const bool firstCameraIsReference=true);
247 
248  virtual void setCameraParameters(const std::string &cameraName, const vpCameraParameters& camera);
249 
250  virtual void setCameraParameters(const std::map<std::string, vpCameraParameters> &mapOfCameraParameters);
251 
252  virtual void setCameraTransformationMatrix(const std::string &cameraName,
253  const vpHomogeneousMatrix &cameraTransformationMatrix);
254 
255  virtual void setCameraTransformationMatrix(const std::map<std::string, vpHomogeneousMatrix> &mapOfTransformationMatrix);
256 
257  virtual void setClipping(const unsigned int &flags);
258  virtual void setClipping(const std::string &cameraName, const unsigned int &flags);
259 
260  virtual void setCovarianceComputation(const bool& flag);
261 
262  virtual void setDisplayFeatures(const bool displayF);
263 
264  virtual void setFarClippingDistance(const double &dist);
265  virtual void setFarClippingDistance(const std::string &cameraName, const double &dist);
266 
272  inline void setFactorKLT(const double factor) {
273  m_factorKLT = factor;
274  }
275 
281  inline void setFactorMBT(const double factor) {
282  m_factorMBT = factor;
283  }
284 
285 #ifdef VISP_HAVE_OGRE
286 
293  void setGoodNbRayCastingAttemptsRatio(const double &ratio);
294 
303  void setNbRayCastingAttemptsForVisibility(const unsigned int &attempts);
304 #endif
305 
306  virtual void setLod(const bool useLod, const std::string &name="");
307  virtual void setLod(const bool useLod, const std::string &cameraName, const std::string &name);
308 
309  virtual void setMinLineLengthThresh(const double minLineLengthThresh, const std::string &name="");
310  virtual void setMinLineLengthThresh(const double minLineLengthThresh, const std::string &cameraName,
311  const std::string &name);
312 
313  virtual void setMinPolygonAreaThresh(const double minPolygonAreaThresh, const std::string &name="");
314  virtual void setMinPolygonAreaThresh(const double minPolygonAreaThresh, const std::string &cameraName,
315  const std::string &name);
316 
317  virtual void setNearClippingDistance(const double &dist);
318  virtual void setNearClippingDistance(const std::string &cameraName, const double &dist);
319 
320  virtual void setOgreShowConfigDialog(const bool showConfigDialog);
321 
322  virtual void setOgreVisibilityTest(const bool &v);
323 
324  virtual void setOptimizationMethod(const vpMbtOptimizationMethod &opt);
325 
326  virtual void setPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo);
327 
328  virtual void setPose(const vpImage<unsigned char> &I1, const vpImage<unsigned char> &I2, const vpHomogeneousMatrix &c1Mo,
329  const vpHomogeneousMatrix c2Mo, const bool firstCameraIsReference=true);
330 
331  virtual void setPose(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
332  const vpHomogeneousMatrix &cMo_);
333 
334  virtual void setPose(const std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
335  const std::map<std::string, vpHomogeneousMatrix> &mapOfCameraPoses);
336 
337  virtual void setProjectionErrorComputation(const bool &flag);
338 
339  virtual void setReferenceCameraName(const std::string &referenceCameraName);
340 
341  virtual void setScanLineVisibilityTest(const bool &v);
342 
343  virtual void setThresholdAcceptation(const double th);
344 
345  virtual void testTracking();
346 
347  virtual void track(const vpImage<unsigned char> &I);
348  virtual void track(const vpImage<unsigned char>& I1, const vpImage<unsigned char>& I2);
349  virtual void track(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages);
350 
351 protected:
352  //Current computeVVS function hides the base computeVVS but it is intended.
353  //The two following lines should have been added to remove compiler warning.
356 
357  virtual void computeVVS(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
358  std::map<std::string, unsigned int> &mapOfNumberOfRows, std::map<std::string, unsigned int> &mapOfNbInfos,
359  vpColVector &w_mbt, vpColVector &w_klt, const unsigned int lvl=0);
360 
361  virtual unsigned int initMbtTracking(std::vector<FeatureType> &indexOfFeatures,
362  std::map<std::string, unsigned int> &mapOfNumberOfRows,
363  std::map<std::string, unsigned int> &mapOfNumberOfLines,
364  std::map<std::string, unsigned int> &mapOfNumberOfCylinders,
365  std::map<std::string, unsigned int> &mapOfNumberOfCircles);
366 
367  //Same thing as computeVVS
369 
370  virtual void postTracking(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages,
371  vpColVector &w_mbt, vpColVector &w_klt, std::map<std::string, unsigned int> &mapOfNumberOfRows,
372  std::map<std::string, unsigned int> &mapOfNbInfos, const unsigned int lvl);
373 
374  virtual void reinit(/*const vpImage<unsigned char>& I*/);
375 
376  virtual unsigned int trackFirstLoop(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages, vpColVector &factor,
377  std::vector<FeatureType> &indexOfFeatures,
378  std::map<std::string, unsigned int> &mapOfNumberOfRows,
379  std::map<std::string, unsigned int> &mapOfNumberOfLines,
380  std::map<std::string, unsigned int> &mapOfNumberOfCylinders,
381  std::map<std::string, unsigned int> &mapOfNumberOfCircles, const unsigned int lvl);
382 
383  virtual void trackMovingEdges(std::map<std::string, const vpImage<unsigned char> *> &mapOfImages);
384 };
385 
386 #endif // VISP_HAVE_OPENCV
387 #endif //__vpMbEdgeKltMultiTracker_h__
virtual void loadModel(const std::string &modelFile, const bool verbose=false)
virtual void setMinLineLengthThresh(const double minLineLengthThresh, const std::string &name="")
virtual void setFarClippingDistance(const double &dist)
double lambda
The gain of the virtual visual servoing stage.
virtual void setLod(const bool useLod, const std::string &name="")
double thresholdMBT
The threshold used in the robust estimation of MBT.
virtual void initFaceFromCorners(vpMbtPolygon &polygon)
virtual unsigned int getClipping() const
Definition: vpMbTracker.h:208
void setNbRayCastingAttemptsForVisibility(const unsigned int &attempts)
std::map< std::string, vpHomogeneousMatrix > m_mapOfCameraTransformationMatrix
Map of camera transformation matrix between the current camera frame to the reference camera frame (c...
virtual void setDisplayFeatures(const bool displayF)
Implementation of an homogeneous matrix and operations on such kind of matrices.
virtual void computeVVS(std::map< std::string, unsigned int > &mapOfNbInfos, vpColVector &w)
virtual void initFromPose(const vpImage< unsigned char > &I, const std::string &initFile)
friend class vpMbEdgeKltMultiTracker
Class to define colors available for display functionnalities.
Definition: vpColor.h:121
virtual void track(const vpImage< unsigned char > &I)
virtual void setProjectionErrorComputation(const bool &flag)
double m_factorMBT
Factor for edge trackers.
virtual void loadConfigFile(const std::string &configFile)
virtual void setThresholdAcceptation(const double th)
Hybrid stereo (or more) tracker based on moving-edges and keypoints tracked using KLT tracker...
virtual void setClipping(const unsigned int &flags)
virtual void setOgreShowConfigDialog(const bool showConfigDialog)
virtual unsigned int getNbPolygon() const
virtual void setReferenceCameraName(const std::string &referenceCameraName)
virtual void setNearClippingDistance(const double &dist)
Class that defines what is a point.
Definition: vpPoint.h:59
double thresholdKLT
The threshold used in the robust estimation of KLT.
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo_, const vpCameraParameters &cam_, const vpColor &col, const unsigned int thickness=1, const bool displayFullModel=false)
void setGoodNbRayCastingAttemptsRatio(const double &ratio)
virtual void initClick(const vpImage< unsigned char > &I, const std::vector< vpPoint > &points3D_list, const std::string &displayFile="")
void init(const vpImage< unsigned char > &I)
Implementation of a polygon of the model used by the model-based tracker.
Definition: vpMbtPolygon.h:64
bool compute_interaction
If true, compute the interaction matrix at each iteration of the minimization. Otherwise, compute it only on the first iteration.
virtual vpHomogeneousMatrix getPose() const
Definition: vpMbTracker.h:342
virtual void setOgreVisibilityTest(const bool &v)
virtual void computeVVS(std::map< std::string, const vpImage< unsigned char > * > &mapOfImages, const unsigned int lvl)
virtual void setScanLineVisibilityTest(const bool &v)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo)
virtual void setCameraParameters(const vpCameraParameters &camera)
Generic class defining intrinsic camera parameters.
unsigned int initMbtTracking(unsigned int &nberrors_lines, unsigned int &nberrors_cylinders, unsigned int &nberrors_circles)
virtual void setCameraTransformationMatrix(const std::string &cameraName, const vpHomogeneousMatrix &cameraTransformationMatrix)
virtual void setMinPolygonAreaThresh(const double minPolygonAreaThresh, const std::string &name="")
void setFactorMBT(const double factor)
void setFactorKLT(const double factor)
virtual void setCovarianceComputation(const bool &flag)
virtual void postTracking(std::map< std::string, const vpImage< unsigned char > * > &mapOfImages, std::map< std::string, unsigned int > &mapOfNbInfos, vpColVector &w_klt)
virtual void initFaceFromLines(vpMbtPolygon &polygon)
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, const double radius, const int idFace=0, const std::string &name="")
virtual void getCameraParameters(vpCameraParameters &camera) const
Implementation of column vector and the associated operations.
Definition: vpColVector.h:72
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, const double radius, const int idFace=0, const std::string &name="")
Implementation of a pose vector and operations on poses.
Definition: vpPoseVector.h:93
virtual vpMbHiddenFaces< vpMbtPolygon > & getFaces()
std::string m_referenceCameraName
Name of the reference camera.
virtual std::vector< std::string > getCameraNames() const
unsigned int maxIter
The maximum iteration of the virtual visual servoing stage.
unsigned int getNumberOfCameras() const
virtual void setAngleDisappear(const double &a)
double m_factorKLT
Factor for KLT trackers.
Make the complete stereo (or more) tracking of an object by using its CAD model.
virtual void setOptimizationMethod(const vpMbtOptimizationMethod &opt)
virtual void reInitModel(const vpImage< unsigned char > &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo_, const bool verbose=false)
Model based stereo (or more) tracker using only KLT.
virtual void setAngleAppear(const double &a)