34#include <visp3/core/vpImageConvert.h>
35#include <visp3/core/vpDebug.h>
36#include <visp3/core/vpTrackingException.h>
37#include <visp3/core/vpVelocityTwistMatrix.h>
38#include <visp3/mbt/vpMbKltTracker.h>
39#include <visp3/mbt/vpMbtXmlGenericParser.h>
41#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
43#if defined(__APPLE__) && defined(__MACH__)
44#include <TargetConditionals.h>
49#ifndef DOXYGEN_SHOULD_SKIP_THIS
74 double px =
cam.get_px();
75 double py =
cam.get_py();
76 double u0 =
cam.get_u0();
77 double v0 =
cam.get_v0();
78 double one_over_px =
cam.get_px_inverse();
79 double one_over_py =
cam.get_py_inverse();
80 double h00 = H[0][0], h01 = H[0][1], h02 = H[0][2];
81 double h10 = H[1][0], h11 = H[1][1], h12 = H[1][2];
82 double h20 = H[2][0], h21 = H[2][1], h22 = H[2][2];
84 double A = h00 * px + u0 * h20;
85 double B = h01 * px + u0 * h21;
86 double C = h02 * px + u0 * h22;
87 double D = h10 * py + v0 * h20;
88 double E = h11 * py + v0 * h21;
89 double F = h12 * py + v0 * h22;
91 G[0][0] = A * one_over_px;
92 G[1][0] = D * one_over_px;
93 G[2][0] = h20 * one_over_px;
95 G[0][1] = B * one_over_py;
96 G[1][1] = E * one_over_py;
97 G[2][1] = h21 * one_over_py;
99 double u0_one_over_px = u0 * one_over_px;
100 double v0_one_over_py = v0 * one_over_py;
102 G[0][2] = -A * u0_one_over_px - B * v0_one_over_py + C;
103 G[1][2] = -D * u0_one_over_px - E * v0_one_over_py + F;
104 G[2][2] = -h20 * u0_one_over_px - h21 * v0_one_over_py + h22;
124 tracker.setHarrisFreeParameter(0.01);
129 faces.getOgreContext()->setWindowName(
"MBT Klt");
143 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
145 if (kltpoly !=
nullptr) {
155 if (kltPolyCylinder !=
nullptr) {
156 delete kltPolyCylinder;
158 kltPolyCylinder =
nullptr;
180 bool reInitialisation =
false;
185 if (!
faces.isOgreInitialised()) {
186 faces.setBackgroundSizeOgre(I.getHeight(), I.getWidth());
211 m_cam.computeFov(I.getWidth(), I.getHeight());
215 faces.computeScanLineRender(
m_cam, I.getWidth(), I.getHeight());
219 cv::Mat mask(
static_cast<int>(I.getRows()),
static_cast<int>(I.getCols()), CV_8UC1, cv::Scalar(0));
227 unsigned char val = 255 ;
228 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
241 kltPolyCylinder = *it;
246 if (
faces[indCylBBox]->isVisible() &&
faces[indCylBBox]->getNbPoint() > 2u) {
247 faces[indCylBBox]->computePolygonClipped(
m_cam);
262 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
271 kltPolyCylinder = *it;
287 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
289 if (kltpoly !=
nullptr) {
299 if (kltPolyCylinder !=
nullptr) {
300 delete kltPolyCylinder;
302 kltPolyCylinder =
nullptr;
328 tracker.setHarrisFreeParameter(0.01);
365 std::vector<vpImagePoint> kltPoints;
366 for (
unsigned int i = 0; i < static_cast<unsigned int>(
tracker.getNbFeatures()); i++) {
369 tracker.getFeature(
static_cast<int>(i),
id, x_tmp, y_tmp);
386 std::map<int, vpImagePoint> kltPoints;
387 for (
unsigned int i = 0; i < static_cast<unsigned int>(
tracker.getNbFeatures()); i++) {
390 tracker.getFeature(
static_cast<int>(i),
id, x_tmp, y_tmp);
391#ifdef TARGET_OS_IPHONE
392 kltPoints[
static_cast<int>(id)] =
vpImagePoint(y_tmp, x_tmp);
408 tracker.setMaxFeatures(t.getMaxFeatures());
409 tracker.setWindowSize(t.getWindowSize());
410 tracker.setQuality(t.getQuality());
411 tracker.setMinDistance(t.getMinDistance());
412 tracker.setHarrisFreeParameter(t.getHarrisFreeParameter());
413 tracker.setBlockSize(t.getBlockSize());
414 tracker.setPyramidLevels(t.getPyramidLevels());
428 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
450 std::cout <<
"WARNING: Cannot set pose when model contains cylinder(s). "
451 "This feature is not implemented yet."
453 std::cout <<
"Tracker will be reinitialized with the given pose." << std::endl;
465 std::vector<cv::Point2f> init_pts;
466 std::vector<long> init_ids;
467 std::vector<cv::Point2f> guess_pts;
480 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
493 double invDc = 1.0 / plan.
getD();
497 vpGEMM(cdtc, Nc, -invDc, cdRc, 1.0, cdHc, VP_GEMM_B_T);
504 std::map<int, vpImagePoint>::const_iterator iter = kltpoly->
getCurrentPoints().begin();
507#ifdef TARGET_OS_IPHONE
508 if (std::find(init_ids.begin(), init_ids.end(), (
long)(kltpoly->
getCurrentPointsInd())[
static_cast<int>(iter->first)]) !=
511 if (std::find(init_ids.begin(), init_ids.end(),
512 (
long)(kltpoly->
getCurrentPointsInd())[
static_cast<size_t>(iter->first)]) != init_ids.end())
521 cdp[0] = iter->second.get_j();
522 cdp[1] = iter->second.get_i();
525 cv::Point2f p(
static_cast<float>(cdp[0]),
static_cast<float>(cdp[1]));
526 init_pts.push_back(p);
527#ifdef TARGET_OS_IPHONE
528 init_ids.push_back(
static_cast<size_t>(kltpoly->
getCurrentPointsInd()[
static_cast<int>(iter->first)]));
530 init_ids.push_back(
static_cast<size_t>(kltpoly->
getCurrentPointsInd()[
static_cast<size_t>(iter->first)]));
533 double p_mu_t_2 = cdp[0] * cdGc[2][0] + cdp[1] * cdGc[2][1] + cdGc[2][2];
535 if (fabs(p_mu_t_2) < std::numeric_limits<double>::epsilon()) {
541 cdp[0] = (cdp[0] * cdGc[0][0] + cdp[1] * cdGc[0][1] + cdGc[0][2]) / p_mu_t_2;
542 cdp[1] = (cdp[0] * cdGc[1][0] + cdp[1] * cdGc[1][1] + cdGc[1][2]) / p_mu_t_2;
545 cv::Point2f p_guess(
static_cast<float>(cdp[0]),
static_cast<float>(cdp[1]));
546 guess_pts.push_back(p_guess);
558 tracker.setInitialGuess(init_pts, guess_pts, init_ids);
560 bool reInitialisation =
false;
589 m_cam.computeFov(I ? I->getWidth() :
m_I.getWidth(), I ? I->getHeight() :
m_I.getHeight());
593 faces.computeScanLineRender(
m_cam, I ? I->getWidth() :
m_I.getWidth(), I ? I->getHeight() :
m_I.getHeight());
596 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
683 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
717 bool reInitialisation =
false;
719 unsigned int initialNumber = 0;
720 unsigned int currentNumber = 0;
721 unsigned int shift = 0;
723 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
758 double value =
percentGood *
static_cast<double>(initialNumber);
759 if (
static_cast<double>(currentNumber) < value) {
762 reInitialisation =
true;
777 if (reInitialisation)
800 double normRes_1 = -1;
801 unsigned int iter = 0;
809 while ((
static_cast<int>((normRes - normRes_1) * 1e8) != 0) && (iter <
m_maxIter)) {
812 bool reStartFromLastIncrement =
false;
814 if (reStartFromLastIncrement) {
818 if (!reStartFromLastIncrement) {
823 if (!isoJoIdentity) {
833 for (
unsigned int i = 0; i <
m_error_klt.getRows(); i++) {
839 for (
unsigned int i = 0; i <
m_error_klt.getRows(); i++) {
840 for (
unsigned int j = 0; j < 6; j++) {
864 m_L_klt.resize(nbFeatures, 6,
false,
false);
868 m_w_klt.resize(nbFeatures,
false);
876 unsigned int shift = 0;
879 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1010#if defined(VISP_HAVE_PUGIXML)
1029 std::cout <<
" *********** Parsing XML for MBT KLT Tracker ************ " << std::endl;
1031 xmlp.
parse(configFile.c_str());
1034 vpERROR_TRACE(
"Can't open XML file \"%s\"\n ", configFile.c_str());
1096 bool displayFullModel)
1098 std::vector<std::vector<double> > models =
1101 for (
size_t i = 0; i < models.size(); i++) {
1109 double n20 = models[i][3];
1110 double n11 = models[i][4];
1111 double n02 = models[i][5];
1124 std::stringstream ss;
1131#ifdef VISP_HAVE_OGRE
1133 faces.displayOgre(cMo);
1149 const vpColor &col,
unsigned int thickness,
bool displayFullModel)
1151 std::vector<std::vector<double> > models =
1154 for (
size_t i = 0; i < models.size(); i++) {
1162 double n20 = models[i][3];
1163 double n11 = models[i][4];
1164 double n02 = models[i][5];
1177 std::stringstream ss;
1184#ifdef VISP_HAVE_OGRE
1186 faces.displayOgre(cMo);
1192 std::vector<std::vector<double> > features;
1194 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1199 features.insert(features.end(), currentFeatures.begin(), currentFeatures.end());
1209 features.insert(features.end(), currentFeatures.begin(), currentFeatures.end());
1234 bool displayFullModel)
1236 std::vector<std::vector<double> > models;
1253 faces.computeClippedPolygons(cMo, c);
1256 faces.computeScanLineRender(
m_cam, width, height);
1258 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1260 std::vector<std::vector<double> > modelLines = kltpoly->
getModelForDisplay(cam, displayFullModel);
1261 models.insert(models.end(), modelLines.begin(), modelLines.end());
1267 std::vector<std::vector<double> > modelLines = kltPolyCylinder->
getModelForDisplay(cMo, cam);
1268 models.insert(models.end(), modelLines.begin(), modelLines.end());
1273 std::vector<double> paramsCircle = displayCircle->
getModelForDisplay(cMo, cam, displayFullModel);
1274 if (!paramsCircle.empty()) {
1275 models.push_back(paramsCircle);
1290 unsigned int nbTotalPoints = 0;
1292 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1307 if (nbTotalPoints < 10) {
1308 std::cerr <<
"test tracking failed (too few points to realize a good tracking)." << std::endl;
1310 "test tracking failed (too few points to realize a good tracking).");
1325 const std::string &name)
1356 const std::string &name)
1373 const std::string &name)
1375 bool already_here =
false;
1390 if (!already_here) {
1420 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1422 if (kltpoly !=
nullptr) {
1432 if (kltPolyCylinder !=
nullptr) {
1433 delete kltPolyCylinder;
1435 kltPolyCylinder =
nullptr;
1442 if (ci !=
nullptr) {
1463 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1471#elif !defined(VISP_BUILD_SHARED_LIBS)
1473void dummy_vpMbKltTracker() { }
Generic class defining intrinsic camera parameters.
void computeFov(const unsigned int &w, const unsigned int &h)
Implementation of column vector and the associated operations.
vpColVector & normalize()
Class to define RGB colors available for display functionalities.
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1, bool segment=true)
static void displayEllipse(const vpImage< unsigned char > &I, const vpImagePoint ¢er, const double &coef1, const double &coef2, const double &coef3, bool use_normalized_centered_moments, const vpColor &color, unsigned int thickness=1, bool display_center=false, bool display_arc=false)
static void displayCross(const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
error that can be emitted by ViSP classes.
@ divideByZeroError
Division by zero.
static vpHomogeneousMatrix direct(const vpColVector &v)
Implementation of an homogeneous matrix and operations on such kind of matrices.
vpHomogeneousMatrix inverse() const
void extract(vpRotationMatrix &R) const
Implementation of an homography and operations on homographies.
static void convert(const vpImage< unsigned char > &src, vpImage< vpRGBa > &dest)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition of the vpImage class member functions.
Wrapper for the KLT (Kanade-Lucas-Tomasi) feature tracker implemented in OpenCV. Thus to enable this ...
static double rad(double deg)
static bool equal(double x, double y, double threshold=0.001)
static double deg(double rad)
Implementation of a matrix and operations on matrices.
std::list< vpMbtDistanceKltCylinder * > kltCylinders
virtual void reInitModel(const vpImage< unsigned char > &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
vpColVector m_error_klt
(s - s*)
vpHomogeneousMatrix c0Mo
Initial pose.
void addCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, const std::string &name="")
vpHomogeneousMatrix ctTc0
std::list< vpMbtDistanceKltPoints * > kltPolygons
virtual void initCircle(const vpPoint &, const vpPoint &, const vpPoint &, double, int, const std::string &name="") VP_OVERRIDE
virtual void setKltOpencv(const vpKltOpencv &t)
void resetTracker() VP_OVERRIDE
virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE
cv::Mat cur
Temporary OpenCV image for fast conversion.
void setCameraParameters(const vpCameraParameters &cam) VP_OVERRIDE
std::map< int, vpImagePoint > getKltImagePointsWithId() const
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false) VP_OVERRIDE
std::list< vpMbtDistanceCircle * > circles_disp
Vector of the circles used here only to display the full model.
vpColVector m_weightedError_klt
Weighted error.
virtual ~vpMbKltTracker()
vpKltOpencv tracker
Points tracker.
virtual std::vector< std::vector< double > > getFeaturesForDisplayKlt()
virtual void init(const vpImage< unsigned char > &I) VP_OVERRIDE
void preTracking(const vpImage< unsigned char > &I)
virtual void initCylinder(const vpPoint &, const vpPoint &, double, int, const std::string &name="") VP_OVERRIDE
virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE
virtual void computeVVSInit() VP_OVERRIDE
bool postTracking(const vpImage< unsigned char > &I, vpColVector &w)
vpRobust m_robust_klt
Robust.
virtual void reinit(const vpImage< unsigned char > &I)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE
std::vector< vpImagePoint > getKltImagePoints() const
unsigned int maskBorder
Erosion of the mask.
unsigned int m_nbFaceUsed
vpColVector m_w_klt
Robust weights.
std::vector< std::vector< double > > m_featuresToBeDisplayedKlt
Display features.
vpMatrix m_L_klt
Interaction matrix.
void setUseKltTracking(const std::string &name, const bool &useKltTracking)
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 initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE
virtual void track(const vpImage< unsigned char > &I) VP_OVERRIDE
virtual void testTracking() VP_OVERRIDE
virtual void loadConfigFile(const std::string &configFile, bool verbose=true) VP_OVERRIDE
double m_lambda
Gain of the virtual visual servoing stage.
double minLineLengthThresholdGeneral
Minimum line length threshold for LOD mode (general setting).
virtual void setMinLineLengthThresh(double minLineLengthThresh, const std::string &name="")
vpImage< unsigned char > m_I
Grayscale image buffer, used when passing color images.
bool useLodGeneral
True if LOD mode is enabled.
double minPolygonAreaThresholdGeneral
Minimum polygon area threshold for LOD mode (general setting).
bool m_computeInteraction
vpMatrix oJo
The Degrees of Freedom to estimate.
virtual void setMinPolygonAreaThresh(double minPolygonAreaThresh, const std::string &name="")
double m_initialMu
Initial Mu for Levenberg Marquardt optimization loop.
vpHomogeneousMatrix m_cMo
The current pose.
virtual void computeVVSCheckLevenbergMarquardt(unsigned int iter, vpColVector &error, const vpColVector &m_error_prev, const vpHomogeneousMatrix &cMoPrev, double &mu, bool &reStartFromLastIncrement, vpColVector *const w=nullptr, const vpColVector *const m_w_prev=nullptr)
vpCameraParameters m_cam
The camera parameters.
bool useOgre
Use Ogre3d for global visibility tests.
virtual void computeVVSWeights(vpRobust &robust, const vpColVector &error, vpColVector &w)
vpMbHiddenFaces< vpMbtPolygon > faces
Set of faces describing the object.
virtual void setLod(bool useLod, const std::string &name="")
virtual void computeCovarianceMatrixVVS(const bool isoJoIdentity, const vpColVector &w_true, const vpHomogeneousMatrix &cMoPrev, const vpMatrix &L_true, const vpMatrix &LVJ_true, const vpColVector &error)
vpMbtOptimizationMethod m_optimizationMethod
Optimization method used.
virtual void computeVVSPoseEstimation(const bool isoJoIdentity, unsigned int iter, vpMatrix &L, vpMatrix <L, vpColVector &R, const vpColVector &error, vpColVector &error_prev, vpColVector <R, double &mu, vpColVector &v, const vpColVector *const w=nullptr, vpColVector *const m_w_prev=nullptr)
bool displayFeatures
If true, the features are displayed.
virtual void loadModel(const std::string &modelFile, bool verbose=false, const vpHomogeneousMatrix &od_M_o=vpHomogeneousMatrix())
double angleDisappears
Angle used to detect a face disappearance.
virtual unsigned int getNbPolygon() const
virtual void setNearClippingDistance(const double &dist)
bool applyLodSettingInConfig
virtual void setFarClippingDistance(const double &dist)
bool m_isoJoIdentity
Boolean to know if oJo is identity (for fast computation).
bool useScanLine
Use Scanline for global visibility tests.
virtual void setClipping(const unsigned int &flags)
double angleAppears
Angle used to detect a face appearance.
const vpImage< bool > * m_mask
Mask used to disable tracking on a part of image.
virtual void initFromPose(const vpImage< unsigned char > &I, const std::string &initFile)
bool computeCovariance
Flag used to specify if the covariance matrix has to be computed or not.
unsigned int m_maxIter
Maximum number of iterations of the virtual visual servoing stage.
bool ogreShowConfigDialog
unsigned int clippingFlag
Flags specifying which clipping to used.
virtual void loadConfigFile(const std::string &configFile, bool verbose=true)
Manage a circle used in the model-based tracker.
void setCameraParameters(const vpCameraParameters &camera)
void buildFrom(const vpPoint &_p1, const vpPoint &_p2, const vpPoint &_p3, double r)
std::vector< double > getModelForDisplay(const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false)
void setName(const std::string &circle_name)
Implementation of a polygon of the model containing points of interest. It is used by the model-based...
virtual void setCameraParameters(const vpCameraParameters &_cam)
void buildFrom(const vpPoint &p1, const vpPoint &p2, const double &r)
void removeOutliers(const vpColVector &weight, const double &threshold_outlier)
unsigned int computeNbDetectedCurrent(const vpKltOpencv &_tracker)
std::vector< std::vector< double > > getFeaturesForDisplay()
void computeInteractionMatrixAndResidu(const vpHomogeneousMatrix &cMc0, vpColVector &_R, vpMatrix &_J)
bool useScanLine
Use scanline rendering.
void updateMask(cv::Mat &mask, unsigned char _nb=255, unsigned int _shiftBorder=0)
void init(const vpKltOpencv &_tracker, const vpHomogeneousMatrix &cMo)
std::vector< std::vector< double > > getModelForDisplay(const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam)
unsigned int getCurrentNumberPoints() const
std::vector< int > listIndicesCylinderBBox
Pointer to the polygon that define a face.
bool hasEnoughPoints() const
vpMbHiddenFaces< vpMbtPolygon > * hiddenface
Pointer to the list of faces.
unsigned int getInitialNumberPoint() const
Implementation of a polygon of the model containing points of interest. It is used by the model-based...
bool hasEnoughPoints() const
void updateMask(cv::Mat &mask, unsigned char _nb=255, unsigned int _shiftBorder=0)
bool useScanLine
Use scanline rendering.
void computeInteractionMatrixAndResidu(vpColVector &_R, vpMatrix &_J)
unsigned int computeNbDetectedCurrent(const vpKltOpencv &_tracker, const vpImage< bool > *mask=nullptr)
std::vector< std::vector< double > > getFeaturesForDisplay()
vpMbHiddenFaces< vpMbtPolygon > * hiddenface
Pointer to the list of faces.
void init(const vpKltOpencv &_tracker, const vpImage< bool > *mask=nullptr)
virtual void setCameraParameters(const vpCameraParameters &_cam)
unsigned int getCurrentNumberPoints() const
std::vector< std::vector< double > > getModelForDisplay(const vpCameraParameters &cam, bool displayFullModel=false)
vpMbtPolygon * polygon
Pointer to the polygon that define a face.
std::map< int, int > & getCurrentPointsInd()
unsigned int getInitialNumberPoint() const
void removeOutliers(const vpColVector &weight, const double &threshold_outlier)
std::map< int, vpImagePoint > & getCurrentPoints()
void computeHomography(const vpHomogeneousMatrix &_cTc0, vpHomography &cHc0)
void setTracked(const bool &track)
Implementation of a polygon of the model used by the model-based tracker.
std::string getName() const
virtual bool isVisible(const vpHomogeneousMatrix &cMo, double alpha, const bool &modulo=false, const vpCameraParameters &cam=vpCameraParameters(), unsigned int width=0, unsigned int height=0)
Parse an Xml file to extract configuration parameters of a mbtConfig object.
unsigned int getKltMaxFeatures() const
void setKltMinDistance(const double &mD)
unsigned int getKltBlockSize() const
void getCameraParameters(vpCameraParameters &cam) const
double getAngleAppear() const
void setKltMaskBorder(const unsigned int &mb)
double getLodMinLineLengthThreshold() const
unsigned int getKltMaskBorder() const
void setAngleDisappear(const double &adisappear)
double getKltQuality() const
double getAngleDisappear() const
void setKltPyramidLevels(const unsigned int &pL)
void setKltWindowSize(const unsigned int &w)
double getKltMinDistance() const
void setKltMaxFeatures(const unsigned int &mF)
void setAngleAppear(const double &aappear)
void setKltBlockSize(const unsigned int &bs)
void setKltHarrisParam(const double &hp)
void parse(const std::string &filename)
double getNearClippingDistance() const
void setKltQuality(const double &q)
bool hasNearClippingDistance() const
bool hasFarClippingDistance() const
unsigned int getKltPyramidLevels() const
double getKltHarrisParam() const
unsigned int getKltWindowSize() const
double getFarClippingDistance() const
bool getFovClipping() const
double getLodMinPolygonAreaThreshold() const
void setVerbose(bool verbose)
This class defines the container for a plane geometrical structure.
void changeFrame(const vpHomogeneousMatrix &cMo)
vpColVector getNormal() const
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
void changeFrame(const vpHomogeneousMatrix &cMo)
unsigned int getNbPoint() const
vpPoint * p
corners in the object frame
void computePolygonClipped(const vpCameraParameters &cam=vpCameraParameters())
Implementation of a rotation matrix and operations on such kind of matrices.
Definition of the vpSubMatrix class that provides a mask on a vpMatrix. All properties of vpMatrix ar...
Error that can be emitted by the vpTracker class and its derivatives.
@ notEnoughPointError
Not enough point to track.
@ fatalError
Tracker fatal error.
Class that consider the case of a translation vector.
vpVelocityTwistMatrix & buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)