36#include <visp3/core/vpDebug.h>
37#include <visp3/core/vpTrackingException.h>
38#include <visp3/core/vpVelocityTwistMatrix.h>
39#include <visp3/mbt/vpMbEdgeKltTracker.h>
40#include <visp3/mbt/vpMbtXmlGenericParser.h>
42#if defined(VISP_HAVE_MODULE_KLT) && defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO)
51 faces.getOgreContext()->setWindowName(
"MBT Hybrid");
78 unsigned int i =
static_cast<unsigned int>(
scales.size());
107 m_cam.computeFov(I.getWidth(), I.getHeight());
109 faces.computeScanLineRender(
m_cam, I.getWidth(), I.getHeight());
114 unsigned int i =
static_cast<unsigned int>(
scales.size());
151 unsigned int i =
static_cast<unsigned int>(
scales.size());
180 unsigned int nbrow = 0;
181 for (std::list<vpMbtDistanceLine *>::iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
190 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
200 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
275#if defined(VISP_HAVE_PUGIXML)
298 std::cout <<
" *********** Parsing XML for Mb Edge KLT Tracker ************ " << std::endl;
300 xmlp.
parse(configFile.c_str());
303 vpERROR_TRACE(
"Can't open XML file \"%s\"\n ", configFile.c_str());
368 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
375 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
383 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
395 m_cam.computeFov(I.getWidth(), I.getHeight());
397 faces.computeScanLineRender(
m_cam, I.getWidth(), I.getHeight());
424 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
431 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
439 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
488 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
489 if ((*it)->isTracked()) {
491 unsigned int indexLine = 0;
494 for (
size_t a = 0; a < l->
meline.size(); a++) {
495 std::list<vpMeSite>::iterator itListLine;
497 itListLine = l->
meline[a]->getMeList().begin();
499 for (
unsigned int i = 0; i < l->
nbFeature[a]; i++) {
500 wmean += w[n + indexLine];
502 if (w[n + indexLine] < 0.5) {
528 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
530 if ((*it)->isTracked()) {
533 std::list<vpMeSite>::iterator itListCyl1;
534 std::list<vpMeSite>::iterator itListCyl2;
536 itListCyl1 = cy->
meline1->getMeList().begin();
537 itListCyl2 = cy->
meline2->getMeList().begin();
541 for (
unsigned int i = 0; i < cy->
nbFeaturel1; i++) {
544 if (w[n + i] < 0.5) {
565 for (
unsigned int i = cy->
nbFeaturel1; i < cy->nbFeature; i++) {
568 if (w[n + i] < 0.5) {
594 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
595 if ((*it)->isTracked()) {
598 std::list<vpMeSite>::iterator itListCir;
601 itListCir = ci->
meEllipse->getMeList().begin();
605 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
608 if (w[n + i] < 0.5) {
644 unsigned int lvl,
double *edge_residual,
double *klt_residual)
649 if (nbrow < 4 && nbInfos < 4) {
655 unsigned int totalNbRows = nbrow + 2 * nbInfos;
657 double residu_1 = -1;
658 unsigned int iter = 0;
668 L_mbt.
resize(nbrow, 6,
false,
false);
669 R_mbt.
resize(nbrow,
false);
673 L_klt.
resize(2 * nbInfos, 6,
false,
false);
674 R_klt.
resize(2 * nbInfos,
false);
698 if (edge_residual !=
nullptr)
700 if (klt_residual !=
nullptr)
722 m_w_klt.resize(2 * nbInfos,
false);
728 while ((
static_cast<int>((residu - residu_1) * 1e8) != 0) && (iter <
m_maxIter)) {
733 unsigned int shift = 0;
775 unsigned int cpt = 0;
776 while (cpt < (nbrow + 2 * nbInfos)) {
777 if (cpt <
static_cast<unsigned int>(nbrow)) {
786 bool reStartFromLastIncrement =
false;
789 if (reStartFromLastIncrement) {
793 if (!reStartFromLastIncrement) {
796 if (edge_residual !=
nullptr) {
798 for (
unsigned int i = 0; i < R_mbt.
getRows(); i++)
799 *edge_residual += fabs(R_mbt[i]);
800 *edge_residual /= R_mbt.
getRows();
806 L.insert(L_mbt, 0, 0);
810 if (klt_residual !=
nullptr) {
812 for (
unsigned int i = 0; i < R_klt.
getRows(); i++)
813 *klt_residual += fabs(R_klt[i]);
814 *klt_residual /= R_klt.
getRows();
820 L.insert(L_klt, nbrow, 0);
824 while (cpt < (nbrow + 2 * nbInfos)) {
825 if (cpt <
static_cast<unsigned int>(nbrow)) {
836 if (!isoJoIdentity) {
839 LVJ_true = (L * cVo *
oJo);
848 for (
unsigned int i = 0; i < weighted_error.
getRows(); i++) {
854 for (
unsigned int j = 0; j < 6; j += 1) {
860 residu = sqrt(num / den);
862 computeVVSPoseEstimation(isoJoIdentity, iter, L, LTL, weighted_error,
m_error_hybrid, m_error_prev, LTR, mu, v,
885 "computeVVSInteractionMatrixAndR"
886 "esidu() should not be called!");
917 unsigned int nbrow = 0;
975 unsigned int nbrow = 0;
1022 factor.
resize(nbrow,
false);
1026 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
1027 if ((*it)->isTracked()) {
1034 int index = *itindex;
1045 for (
size_t a = 0; a < l->
meline.size(); a++) {
1046 std::list<vpMeSite>::const_iterator itListLine;
1047 if (l->
meline[a] !=
nullptr) {
1048 itListLine = l->
meline[a]->getMeList().begin();
1050 for (
unsigned int i = 0; i < l->
nbFeature[a]; i++) {
1051 factor[n + i] = fac;
1054 factor[n + i] = 0.2;
1063 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
1065 if ((*it)->isTracked()) {
1070 std::list<vpMeSite>::const_iterator itCyl1;
1071 std::list<vpMeSite>::const_iterator itCyl2;
1073 itCyl1 = cy->
meline1->getMeList().begin();
1074 itCyl2 = cy->
meline2->getMeList().begin();
1077 for (
unsigned int i = 0; i < cy->
nbFeature; i++) {
1078 factor[n + i] = fac;
1080 if (i < cy->nbFeaturel1) {
1089 factor[n + i] = 0.2;
1096 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
1097 if ((*it)->isTracked()) {
1102 std::list<vpMeSite>::const_iterator itCir;
1104 itCir = ci->
meEllipse->getMeList().begin();
1107 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
1108 factor[n + i] = fac;
1111 factor[n + i] = 0.2;
1130 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
1131 if ((*it)->isTracked()) {
1135 for (
unsigned int j = 0; j < 6; j++) {
1136 L[n + i][j] = l->
L[i][j];
1137 error[n + i] = l->
error[i];
1144 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
1146 if ((*it)->isTracked()) {
1149 for (
unsigned int i = 0; i < cy->
nbFeature; i++) {
1150 for (
unsigned int j = 0; j < 6; j++) {
1151 L[n + i][j] = cy->
L[i][j];
1152 error[n + i] = cy->
error[i];
1158 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
1159 if ((*it)->isTracked()) {
1162 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
1163 for (
unsigned int j = 0; j < 6; j++) {
1164 L[n + i][j] = ci->
L[i][j];
1165 error[n + i] = ci->
error[i];
1222 const std::string &name)
1238 const std::string &name)
1257 bool displayFullModel)
1259 std::vector<std::vector<double> > models =
1262 for (
size_t i = 0; i < models.size(); i++) {
1270 double n20 = models[i][3];
1271 double n11 = models[i][4];
1272 double n02 = models[i][5];
1285 std::stringstream ss;
1292#ifdef VISP_HAVE_OGRE
1294 faces.displayOgre(cMo);
1311 bool displayFullModel)
1313 std::vector<std::vector<double> > models =
1316 for (
size_t i = 0; i < models.size(); i++) {
1324 double n20 = models[i][3];
1325 double n11 = models[i][4];
1326 double n02 = models[i][5];
1339 std::stringstream ss;
1346#ifdef VISP_HAVE_OGRE
1348 faces.displayOgre(cMo);
1355 bool displayFullModel)
1357 std::vector<std::vector<double> > models;
1359 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
1363 std::vector<std::vector<double> > currentModel =
1364 (*it)->getModelForDisplay(width, height, cMo, cam, displayFullModel);
1365 models.insert(models.end(), currentModel.begin(), currentModel.end());
1368 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[
scaleLevel].begin();
1370 std::vector<std::vector<double> > currentModel =
1371 (*it)->getModelForDisplay(width, height, cMo, cam, displayFullModel);
1372 models.insert(models.end(), currentModel.begin(), currentModel.end());
1375 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[
scaleLevel].begin();
1377 std::vector<double> paramsCircle = (*it)->getModelForDisplay(cMo, cam, displayFullModel);
1378 models.push_back(paramsCircle);
1385#ifdef VISP_HAVE_OGRE
1387 faces.displayOgre(cMo);
1411 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1413 if (kltpoly !=
nullptr) {
1423 if (kltPolyCylinder !=
nullptr) {
1424 delete kltPolyCylinder;
1426 kltPolyCylinder =
nullptr;
1434 if (ci !=
nullptr) {
1448 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
1450 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[i].begin(); it !=
lines[i].end(); ++it) {
1457 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[i].begin(); it !=
cylinders[i].end();
1465 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[i].begin(); it !=
circles[i].end(); ++it) {
1494#elif !defined(VISP_BUILD_SHARED_LIBS)
1497void dummy_vpMbEdgeKltTracker() { }
void resize(unsigned int nrows, unsigned int ncols, bool flagNullify=true, bool recopy_=true)
unsigned int getRows() const
Generic class defining intrinsic camera parameters.
Implementation of column vector and the associated operations.
void resize(unsigned int i, bool flagNullify=true)
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.
@ dimensionError
Bad dimension.
static vpHomogeneousMatrix direct(const vpColVector &v)
Implementation of an homogeneous matrix and operations on such kind of matrices.
vpHomogeneousMatrix inverse() 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.
static double rad(double deg)
static double sqr(double x)
static bool equal(double x, double y, double threshold=0.001)
static double deg(double rad)
Implementation of a matrix and operations on matrices.
double m_thresholdKLT
The threshold used in the robust estimation of KLT.
virtual void initCircle(const vpPoint &, const vpPoint &, const vpPoint &, double r, int idFace=0, const std::string &name="") VP_OVERRIDE
void reInitModel(const vpImage< unsigned char > &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix()) 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 loadConfigFile(const std::string &configFile, bool verbose=true) VP_OVERRIDE
virtual void init(const vpImage< unsigned char > &I) VP_OVERRIDE
virtual void setNearClippingDistance(const double &dist) VP_OVERRIDE
virtual void computeVVSInit() VP_OVERRIDE
void resetTracker() VP_OVERRIDE
virtual void setCameraParameters(const vpCameraParameters &cam) VP_OVERRIDE
vpColVector m_w_mbt
Robust weights for Edge.
bool postTracking(const vpImage< unsigned char > &I, vpColVector &w_mbt, vpColVector &w_klt, unsigned int lvl=0)
virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE
unsigned int trackFirstLoop(const vpImage< unsigned char > &I, vpColVector &factor, unsigned int lvl=0)
void postTrackingMbt(vpColVector &w, unsigned int level=0)
void trackSecondLoop(const vpImage< unsigned char > &I, vpMatrix &L, vpColVector &_error, const vpHomogeneousMatrix &cMo, unsigned int lvl=0)
virtual void computeCovarianceMatrixVVS(const bool isoJoIdentity, const vpColVector &w_true, const vpHomogeneousMatrix &cMoPrev, const vpMatrix &L_true, const vpMatrix &LVJ_true, const vpColVector &error)
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)
unsigned int initMbtTracking(unsigned int level=0)
virtual ~vpMbEdgeKltTracker()
virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE
virtual void track(const vpImage< unsigned char > &I) VP_OVERRIDE
vpColVector m_error_hybrid
(s - s*)
virtual void initCylinder(const vpPoint &, const vpPoint &, double r, int idFace, const std::string &name="") VP_OVERRIDE
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.
virtual void computeVVSInteractionMatrixAndResidu() VP_OVERRIDE
unsigned int m_maxIterKlt
The maximum iteration of the virtual visual servoing stage.
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 setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE
vpColVector m_w_hybrid
Robust weights.
void upScale(const unsigned int _scale)
std::vector< std::list< vpMbtDistanceLine * > > lines
vpMe me
The moving edges parameters.
void computeProjectionError(const vpImage< unsigned char > &_I)
void downScale(const unsigned int _scale)
void cleanPyramid(std::vector< const vpImage< unsigned char > * > &_pyramid)
std::vector< std::list< vpMbtDistanceCylinder * > > cylinders
Vector of the tracked cylinders.
void initPyramid(const vpImage< unsigned char > &_I, std::vector< const vpImage< unsigned char > * > &_pyramid)
unsigned int nbvisiblepolygone
Number of polygon (face) currently visible.
std::vector< std::list< vpMbtDistanceCircle * > > circles
Vector of the tracked circles.
virtual void initFaceFromLines(vpMbtPolygon &polygon) VP_OVERRIDE
void trackMovingEdge(const vpImage< unsigned char > &I)
std::vector< const vpImage< unsigned char > * > Ipyramid
virtual void initFaceFromCorners(vpMbtPolygon &polygon) VP_OVERRIDE
std::vector< bool > scales
Vector of scale level to use for the multi-scale tracking.
void updateMovingEdge(const vpImage< unsigned char > &I)
void reinitMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo)
void resetTracker() VP_OVERRIDE
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="") VP_OVERRIDE
void setMovingEdge(const vpMe &me)
virtual void setCameraParameters(const vpCameraParameters &cam) VP_OVERRIDE
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="") VP_OVERRIDE
void initMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo, const bool &useInitRange=true)
bool isAppearing(unsigned int i)
std::list< vpMbtDistanceKltCylinder * > kltCylinders
vpHomogeneousMatrix c0Mo
Initial pose.
vpHomogeneousMatrix ctTc0
std::list< vpMbtDistanceKltPoints * > kltPolygons
void resetTracker() VP_OVERRIDE
void setCameraParameters(const vpCameraParameters &cam) VP_OVERRIDE
std::list< vpMbtDistanceCircle * > circles_disp
Vector of the circles used here only to display the full model.
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
bool postTracking(const vpImage< unsigned char > &I, vpColVector &w)
virtual void reinit(const vpImage< unsigned char > &I)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo) VP_OVERRIDE
unsigned int maskBorder
Erosion of the mask.
std::vector< std::vector< double > > m_featuresToBeDisplayedKlt
Display features.
virtual void initFaceFromLines(vpMbtPolygon &polygon) 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.
vpMbHiddenFaces< vpMbtPolygon > faces
Set of faces describing the object.
virtual void setLod(bool useLod, const std::string &name="")
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
bool applyLodSettingInConfig
bool m_isoJoIdentity
Boolean to know if oJo is identity (for fast computation).
bool useScanLine
Use Scanline for global visibility tests.
double angleAppears
Angle used to detect a face appearance.
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.
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.
vpColVector error
The error vector.
unsigned int nbFeature
The number of moving edges.
vpMatrix L
The interaction matrix.
void computeInteractionMatrixError(const vpHomogeneousMatrix &cMo)
void setMeanWeight(double _wmean)
void displayMovingEdges(const vpImage< unsigned char > &I)
bool Reinit
Indicates if the circle has to be reinitialized.
void initInteractionMatrixError()
vpMbtMeEllipse * meEllipse
The moving edge containers.
Manage a cylinder used in the model-based tracker.
void setMeanWeight1(double wmean)
void computeInteractionMatrixError(const vpHomogeneousMatrix &cMo, const vpImage< unsigned char > &I)
vpMbtMeLine * meline2
The moving edge containers (second line of the cylinder).
vpMatrix L
The interaction matrix.
unsigned int nbFeaturel2
The number of moving edges on line 2.
bool Reinit
Indicates if the line has to be reinitialized.
void initInteractionMatrixError()
void setMeanWeight2(double wmean)
unsigned int nbFeaturel1
The number of moving edges on line 1.
vpColVector error
The error vector.
void displayMovingEdges(const vpImage< unsigned char > &I)
unsigned int nbFeature
The number of moving edges.
vpMbtMeLine * meline1
The moving edge containers (first line of the cylinder).
Implementation of a polygon of the model containing points of interest. It is used by the model-based...
void computeInteractionMatrixAndResidu(const vpHomogeneousMatrix &cMc0, vpColVector &_R, vpMatrix &_J)
unsigned int getCurrentNumberPoints() const
bool hasEnoughPoints() const
Implementation of a polygon of the model containing points of interest. It is used by the model-based...
bool hasEnoughPoints() const
void computeInteractionMatrixAndResidu(vpColVector &_R, vpMatrix &_J)
unsigned int getCurrentNumberPoints() const
vpMbtPolygon * polygon
Pointer to the polygon that define a face.
void computeHomography(const vpHomogeneousMatrix &_cTc0, vpHomography &cHc0)
Manage the line of a polygon used in the model-based tracker.
std::vector< unsigned int > nbFeature
The number of moving edges.
void displayMovingEdges(const vpImage< unsigned char > &I)
void computeInteractionMatrixError(const vpHomogeneousMatrix &cMo)
void initInteractionMatrixError()
std::list< int > Lindex_polygon
Index of the faces which contain the line.
unsigned int nbFeatureTotal
The number of moving edges.
bool Reinit
Indicates if the line has to be reinitialized.
vpColVector error
The error vector.
vpMbHiddenFaces< vpMbtPolygon > * hiddenface
Pointer to the list of faces.
bool closeToImageBorder(const vpImage< unsigned char > &I, const unsigned int threshold)
std::vector< vpMbtMeLine * > meline
The moving edge container.
vpMatrix L
The interaction matrix.
void setMeanWeight(double w_mean)
Implementation of a polygon of the model used by the model-based tracker.
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 setEdgeMe(const vpMe &ecm)
void setKltMaskBorder(const unsigned int &mb)
void getEdgeMe(vpMe &ecm) const
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
void setCameraParameters(const vpCameraParameters &cam)
double getFarClippingDistance() const
bool getFovClipping() const
double getLodMinPolygonAreaThreshold() const
void setVerbose(bool verbose)
Performs search in a given direction(normal) for a given distance(pixels) for a given 'site'....
@ M_ESTIMATOR
Point detected as an outlier during virtual visual-servoing.
@ NO_SUPPRESSION
Point successfully tracked.
vpMeSiteState getState() const
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
Contains an M-estimator and various influence function.
@ TUKEY
Tukey influence function.
void MEstimator(const vpRobustEstimatorType method, const vpColVector &residues, vpColVector &weights)
void setMinMedianAbsoluteDeviation(double mad_min)
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.
vpVelocityTwistMatrix & buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)