Visual Servoing Platform  version 3.3.0
vpMbEdgeKltTracker.h
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See http://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
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  * Description:
32  * Hybrid tracker based on edges (vpMbt) and points of interests (KLT)
33  *
34  * Authors:
35  * Romain Tallonneau
36  * Aurelien Yol
37  *
38  *****************************************************************************/
39 
45 #ifndef vpMbEdgeKltTracker_HH
46 #define vpMbEdgeKltTracker_HH
47 
48 #include <visp3/core/vpConfig.h>
49 
50 #if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100))
51 
52 #include <visp3/core/vpExponentialMap.h>
53 #include <visp3/core/vpPoseVector.h>
54 #include <visp3/core/vpSubColVector.h>
55 #include <visp3/core/vpSubMatrix.h>
56 #include <visp3/klt/vpKltOpencv.h>
57 #include <visp3/mbt/vpMbEdgeTracker.h>
58 #include <visp3/mbt/vpMbKltTracker.h>
59 #include <visp3/mbt/vpMbTracker.h>
60 
218 class VISP_EXPORT vpMbEdgeKltTracker : public vpMbKltTracker, public vpMbEdgeTracker
219 {
220 protected:
222  double m_thresholdKLT;
224  double m_thresholdMBT;
226  unsigned int m_maxIterKlt;
228  vpColVector m_w_mbt;
232  vpColVector m_error_hybrid;
234  vpColVector m_w_hybrid;
235 
236 public:
238  virtual ~vpMbEdgeKltTracker();
239 
240  virtual void display(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
241  const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false);
242  virtual void display(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
243  const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false);
244 
245  virtual inline vpColVector getError() const { return m_error_hybrid; }
246 
247  virtual std::vector<std::vector<double> > getModelForDisplay(unsigned int width, unsigned int height,
248  const vpHomogeneousMatrix &cMo,
249  const vpCameraParameters &cam,
250  bool displayFullModel=false);
251 
252  virtual inline vpColVector getRobustWeights() const { return m_w_hybrid; }
253 
259  virtual inline double getNearClippingDistance() const { return vpMbKltTracker::getNearClippingDistance(); }
260 
261  virtual void loadConfigFile(const std::string &configFile);
262 
263  void reInitModel(const vpImage<unsigned char> &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo,
264  bool verbose = false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix());
265  void resetTracker();
266 
267  virtual void setCameraParameters(const vpCameraParameters &cam);
268 
276  virtual void setClipping(const unsigned int &flags) { vpMbEdgeTracker::setClipping(flags); }
277 
283  virtual void setFarClippingDistance(const double &dist) { vpMbEdgeTracker::setFarClippingDistance(dist); }
284 
290  virtual void setNearClippingDistance(const double &dist) { vpMbEdgeTracker::setNearClippingDistance(dist); }
291 
300  virtual void setOgreVisibilityTest(const bool &v)
301  {
303 #ifdef VISP_HAVE_OGRE
304  faces.getOgreContext()->setWindowName("MBT Hybrid");
305 #endif
306  }
307 
313  virtual void setScanLineVisibilityTest(const bool &v)
314  {
317  }
318 
319  virtual void setPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cdMo);
320  virtual void setPose(const vpImage<vpRGBa> &I_color, const vpHomogeneousMatrix &cdMo);
327  virtual void setProjectionErrorComputation(const bool &flag) { vpMbEdgeTracker::setProjectionErrorComputation(flag); }
328 
329  virtual void testTracking() {}
330  virtual void track(const vpImage<unsigned char> &I);
331  virtual void track(const vpImage<vpRGBa> &I_color);
332 
333 protected:
334  virtual void computeVVS(const vpImage<unsigned char> &I, const unsigned int &nbInfos, unsigned int &nbrow,
335  unsigned int lvl = 0);
336  virtual void computeVVSInit();
340 
341  virtual void init(const vpImage<unsigned char> &I);
342  virtual void initCircle(const vpPoint &, const vpPoint &, const vpPoint &, double r, int idFace = 0,
343  const std::string &name = "");
344  virtual void initCylinder(const vpPoint &, const vpPoint &, double r, int idFace,
345  const std::string &name = "");
346  virtual void initFaceFromCorners(vpMbtPolygon &polygon);
347  virtual void initFaceFromLines(vpMbtPolygon &polygon);
348  unsigned int initMbtTracking(unsigned int level = 0);
349 
350  bool postTracking(const vpImage<unsigned char> &I, vpColVector &w_mbt, vpColVector &w_klt,
351  unsigned int lvl = 0);
352  bool postTracking(const vpImage<vpRGBa> &I_color, vpColVector &w_mbt, vpColVector &w_klt,
353  unsigned int lvl = 0);
354  void postTrackingMbt(vpColVector &w, unsigned int level = 0);
355 
356  unsigned int trackFirstLoop(const vpImage<unsigned char> &I, vpColVector &factor, unsigned int lvl = 0);
357  void trackSecondLoop(const vpImage<unsigned char> &I, vpMatrix &L, vpColVector &_error, const vpHomogeneousMatrix &cMo,
358  unsigned int lvl = 0);
359 };
360 
361 #endif
362 
363 #endif // VISP_HAVE_OPENCV
vpMbEdgeTracker::setClipping
virtual void setClipping(const unsigned int &flags)
Definition: vpMbEdgeTracker.cpp:2693
vpMbTracker::setProjectionErrorComputation
virtual void setProjectionErrorComputation(const bool &flag)
Definition: vpMbTracker.h:579
vpMbKltTracker::m_w_klt
vpColVector m_w_klt
Robust weights.
Definition: vpMbKltTracker.h:260
vpMbEdgeTracker::init
virtual void init(const vpImage< unsigned char > &I)
Definition: vpMbEdgeTracker.cpp:1134
vpMbEdgeTracker::track
virtual void track(const vpImage< unsigned char > &I)
Definition: vpMbEdgeTracker.cpp:1028
vpMbEdgeTracker
Make the complete tracking of an object by using its CAD model.
Definition: vpMbEdgeTracker.h:257
vpCameraParameters
Generic class defining intrinsic camera parameters.
Definition: vpCameraParameters.h:232
vpMbEdgeTracker::computeVVS
void computeVVS(const vpImage< unsigned char > &_I, unsigned int lvl)
Definition: vpMbEdgeTracker.cpp:166
vpMbKltTracker
Model based tracker using only KLT.
Definition: vpMbKltTracker.h:215
vpMbEdgeTracker::getError
virtual vpColVector getError() const
Definition: vpMbEdgeTracker.h:388
vpMbEdgeTracker::loadConfigFile
void loadConfigFile(const std::string &configFile)
Definition: vpMbEdgeTracker.cpp:1223
vpMbEdgeTracker::setNearClippingDistance
virtual void setNearClippingDistance(const double &dist)
Definition: vpMbEdgeTracker.cpp:2661
vpMbEdgeTracker::setOgreVisibilityTest
virtual void setOgreVisibilityTest(const bool &v)
Definition: vpMbEdgeTracker.h:440
vpMbEdgeTracker::initCylinder
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="")
Definition: vpMbEdgeTracker.cpp:2365
vpMbEdgeTracker::display
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false)
Definition: vpMbEdgeTracker.cpp:1290
vpMbEdgeTracker::initMbtTracking
unsigned int initMbtTracking(unsigned int &nberrors_lines, unsigned int &nberrors_cylinders, unsigned int &nberrors_circles)
Definition: vpMbEdgeTracker.cpp:2293
vpMbEdgeTracker::getModelForDisplay
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false)
Definition: vpMbEdgeTracker.cpp:1409
vpColVector
Implementation of column vector and the associated operations.
Definition: vpColVector.h:129
vpMbEdgeTracker::setFarClippingDistance
virtual void setFarClippingDistance(const double &dist)
Definition: vpMbEdgeTracker.cpp:2631
vpMatrix
Implementation of a matrix and operations on matrices.
Definition: vpMatrix.h:163
vpMbtPolygon
Implementation of a polygon of the model used by the model-based tracker.
Definition: vpMbtPolygon.h:65
vpMbTracker::computeVVSPoseEstimation
virtual void computeVVSPoseEstimation(const bool isoJoIdentity_, unsigned int iter, vpMatrix &L, vpMatrix &LTL, vpColVector &R, const vpColVector &error, vpColVector &error_prev, vpColVector &LTR, double &mu, vpColVector &v, const vpColVector *const w=NULL, vpColVector *const m_w_prev=NULL)
Definition: vpMbTracker.cpp:2924
vpMbEdgeTracker::resetTracker
void resetTracker()
Definition: vpMbEdgeTracker.cpp:2376
vpMbKltTracker::postTracking
bool postTracking(const vpImage< unsigned char > &I, vpColVector &w)
Definition: vpMbKltTracker.cpp:715
vpMbEdgeKltTracker
Hybrid tracker based on moving-edges and keypoints tracked using KLT tracker.
Definition: vpMbEdgeKltTracker.h:217
vpMbEdgeTracker::initFaceFromCorners
virtual void initFaceFromCorners(vpMbtPolygon &polygon)
Definition: vpMbEdgeTracker.cpp:2260
vpMbEdgeTracker::initFaceFromLines
virtual void initFaceFromLines(vpMbtPolygon &polygon)
Definition: vpMbEdgeTracker.cpp:2284
vpMbEdgeTracker::getRobustWeights
virtual vpColVector getRobustWeights() const
Definition: vpMbEdgeTracker.h:390
vpMbEdgeTracker::computeVVSInit
virtual void computeVVSInit()
Definition: vpMbEdgeTracker.cpp:724
vpMbEdgeTracker::setScanLineVisibilityTest
virtual void setScanLineVisibilityTest(const bool &v)
Definition: vpMbEdgeTracker.h:453
vpMbEdgeTracker::setCameraParameters
virtual void setCameraParameters(const vpCameraParameters &cam)
Definition: vpMbEdgeTracker.h:404
vpMbTracker::setOgreVisibilityTest
virtual void setOgreVisibilityTest(const bool &v)
Definition: vpMbTracker.cpp:2691
vpMbEdgeTracker::testTracking
virtual void testTracking()
Definition: vpMbEdgeTracker.cpp:941
vpMbTracker::getNearClippingDistance
virtual double getNearClippingDistance() const
Definition: vpMbTracker.h:370
vpMbEdgeTracker::initCircle
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="")
Definition: vpMbEdgeTracker.cpp:2349
vpMbTracker::computeCovarianceMatrixVVS
virtual void computeCovarianceMatrixVVS(const bool isoJoIdentity_, const vpColVector &w_true, const vpHomogeneousMatrix &cMoPrev, const vpMatrix &L_true, const vpMatrix &LVJ_true, const vpColVector &error)
Definition: vpMbTracker.cpp:2822
vpImage< unsigned char >
vpPoint
Class that defines what is a point.
Definition: vpPoint.h:57
vpColor
Class to define colors available for display functionnalities.
Definition: vpColor.h:118
vpHomogeneousMatrix
Implementation of an homogeneous matrix and operations on such kind of matrices.
Definition: vpHomogeneousMatrix.h:148
vpMbEdgeTracker::computeVVSInteractionMatrixAndResidu
virtual void computeVVSInteractionMatrixAndResidu()
Definition: vpMbEdgeTracker.cpp:767
vpMbKltTracker::setScanLineVisibilityTest
virtual void setScanLineVisibilityTest(const bool &v)
Definition: vpMbKltTracker.h:392
vpMbEdgeTracker::reInitModel
virtual void reInitModel(const vpImage< unsigned char > &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
Definition: vpMbEdgeTracker.cpp:2449
vpMbEdgeTracker::setPose
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
Definition: vpMbEdgeTracker.cpp:1191