Visual Servoing Platform version 3.7.0
Loading...
Searching...
No Matches
vpMbEdgeKltTracker.h
1/*
2 * ViSP, open source Visual Servoing Platform software.
3 * Copyright (C) 2005 - 2025 by Inria. All rights reserved.
4 *
5 * This software is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
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 https://visp.inria.fr 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 *
24 * If you have questions regarding the use of this file, please contact
25 * Inria at visp@inria.fr
26 *
27 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29 *
30 * Description:
31 * Hybrid tracker based on edges (vpMbt) and points of interests (KLT)
32 */
33
38
39#ifndef _vpMbEdgeKltTracker_h_
40#define _vpMbEdgeKltTracker_h_
41
42#include <visp3/core/vpConfig.h>
43
44#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
45
46#include <visp3/core/vpExponentialMap.h>
47#include <visp3/core/vpPoseVector.h>
48#include <visp3/core/vpSubColVector.h>
49#include <visp3/core/vpSubMatrix.h>
50#include <visp3/klt/vpKltOpencv.h>
51#include <visp3/mbt/vpMbEdgeTracker.h>
52#include <visp3/mbt/vpMbKltTracker.h>
53#include <visp3/mbt/vpMbTracker.h>
54
225class VISP_EXPORT vpMbEdgeKltTracker :
226#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
227 public vpMbKltTracker,
228#endif
229 public vpMbEdgeTracker
230{
231protected:
237 unsigned int m_maxIterKlt;
246
247public:
249 virtual ~vpMbEdgeKltTracker();
250
251 virtual void display(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
252 const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) VP_OVERRIDE;
253 virtual void display(const vpImage<vpRGBa> &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam,
254 const vpColor &col, unsigned int thickness = 1, bool displayFullModel = false) VP_OVERRIDE;
255
256 virtual inline vpColVector getError() const VP_OVERRIDE { return m_error_hybrid; }
257
258 virtual std::vector<std::vector<double> > getModelForDisplay(unsigned int width, unsigned int height,
259 const vpHomogeneousMatrix &cMo,
260 const vpCameraParameters &cam,
261 bool displayFullModel = false) VP_OVERRIDE;
262
263 virtual inline vpColVector getRobustWeights() const VP_OVERRIDE { return m_w_hybrid; }
264
270 virtual inline double getNearClippingDistance() const VP_OVERRIDE { return vpMbKltTracker::getNearClippingDistance(); }
271
272 virtual void loadConfigFile(const std::string &configFile, bool verbose = true) VP_OVERRIDE;
273
274 void reInitModel(const vpImage<unsigned char> &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo,
275 bool verbose = false, const vpHomogeneousMatrix &T = vpHomogeneousMatrix()) VP_OVERRIDE;
276 void resetTracker() VP_OVERRIDE;
277
278 virtual void setCameraParameters(const vpCameraParameters &cam) VP_OVERRIDE;
279
287 virtual void setClipping(const unsigned int &flags) VP_OVERRIDE { vpMbEdgeTracker::setClipping(flags); }
288
294 virtual void setFarClippingDistance(const double &dist) VP_OVERRIDE { vpMbEdgeTracker::setFarClippingDistance(dist); }
295
301 virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE { vpMbEdgeTracker::setNearClippingDistance(dist); }
302
311 virtual void setOgreVisibilityTest(const bool &v) VP_OVERRIDE
312 {
314#ifdef VISP_HAVE_OGRE
315 faces.getOgreContext()->setWindowName("MBT Hybrid");
316#endif
317 }
318
329
330 virtual void setPose(const vpImage<unsigned char> &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
331 virtual void setPose(const vpImage<vpRGBa> &I_color, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE;
332
339 virtual void setProjectionErrorComputation(const bool &flag) VP_OVERRIDE
340 {
342 }
343
344 virtual void testTracking() VP_OVERRIDE { }
345 virtual void track(const vpImage<unsigned char> &I) VP_OVERRIDE;
346 virtual void track(const vpImage<vpRGBa> &I_color) VP_OVERRIDE;
347
348protected:
349 virtual void computeVVS(const vpImage<unsigned char> &I, const unsigned int &nbInfos, unsigned int &nbrow,
350 unsigned int lvl = 0, double *edge_residual = nullptr, double *klt_residual = nullptr);
351 virtual void computeVVSInit() VP_OVERRIDE;
352 virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE;
353 using vpMbTracker::computeCovarianceMatrixVVS;
354 using vpMbTracker::computeVVSPoseEstimation;
355
356 virtual void init(const vpImage<unsigned char> &I) VP_OVERRIDE;
357 virtual void initCircle(const vpPoint &, const vpPoint &, const vpPoint &, double r, int idFace = 0,
358 const std::string &name = "") VP_OVERRIDE;
359 virtual void initCylinder(const vpPoint &, const vpPoint &, double r, int idFace, const std::string &name = "") VP_OVERRIDE;
360 virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE;
361 virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE;
362 unsigned int initMbtTracking(unsigned int level = 0);
363
364 bool postTracking(const vpImage<unsigned char> &I, vpColVector &w_mbt, vpColVector &w_klt, unsigned int lvl = 0);
365 bool postTracking(const vpImage<vpRGBa> &I_color, vpColVector &w_mbt, vpColVector &w_klt, unsigned int lvl = 0);
366 void postTrackingMbt(vpColVector &w, unsigned int level = 0);
367
368 unsigned int trackFirstLoop(const vpImage<unsigned char> &I, vpColVector &factor, unsigned int lvl = 0);
369 void trackSecondLoop(const vpImage<unsigned char> &I, vpMatrix &L, vpColVector &_error,
370 const vpHomogeneousMatrix &cMo, unsigned int lvl = 0);
371};
372END_VISP_NAMESPACE
373#endif
374
375#endif // VISP_HAVE_OPENCV
Generic class defining intrinsic camera parameters.
Implementation of column vector and the associated operations.
Class to define RGB colors available for display functionalities.
Definition vpColor.h:157
Implementation of an homogeneous matrix and operations on such kind of matrices.
Definition of the vpImage class member functions.
Definition vpImage.h:131
Implementation of a matrix and operations on matrices.
Definition vpMatrix.h:175
double m_thresholdKLT
The threshold used in the robust estimation of KLT.
virtual void testTracking() VP_OVERRIDE
virtual double getNearClippingDistance() const 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
virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
virtual void setOgreVisibilityTest(const bool &v) VP_OVERRIDE
virtual vpColVector getError() const VP_OVERRIDE
vpColVector m_w_mbt
Robust weights for Edge.
virtual void setProjectionErrorComputation(const bool &flag) VP_OVERRIDE
virtual vpColVector getRobustWeights() const VP_OVERRIDE
vpColVector m_error_hybrid
(s - s*)
virtual void setClipping(const unsigned int &flags) VP_OVERRIDE
virtual void setFarClippingDistance(const double &dist) VP_OVERRIDE
vpColVector m_w_klt
Robust weights for KLT.
double m_thresholdMBT
The threshold used in the robust estimation of MBT.
unsigned int m_maxIterKlt
The maximum iteration of the virtual visual servoing stage.
vpColVector m_w_hybrid
Robust weights.
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE
virtual void setFarClippingDistance(const double &dist) VP_OVERRIDE
virtual void setClipping(const unsigned int &flags) VP_OVERRIDE
virtual void setScanLineVisibilityTest(const bool &v) VP_OVERRIDE
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 computeVVSInit() VP_OVERRIDE
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo) 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
virtual void track(const vpImage< unsigned char > &I) VP_OVERRIDE
virtual void loadConfigFile(const std::string &configFile, bool verbose=true) VP_OVERRIDE
Main methods for a model-based tracker.
virtual double getNearClippingDistance() const
vpMbHiddenFaces< vpMbtPolygon > faces
Set of faces describing the object.
virtual void setOgreVisibilityTest(const bool &v)
virtual void setProjectionErrorComputation(const bool &flag)
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 ...
Definition vpPoint.h:79