42 #include <visp3/core/vpDebug.h>
43 #include <visp3/core/vpTrackingException.h>
44 #include <visp3/core/vpVelocityTwistMatrix.h>
45 #include <visp3/mbt/vpMbEdgeKltTracker.h>
46 #include <visp3/mbt/vpMbtXmlGenericParser.h>
48 #if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100))
51 : m_thresholdKLT(2.), m_thresholdMBT(2.), m_maxIterKlt(30), m_w_mbt(), m_w_klt(), m_error_hybrid(), m_w_hybrid()
83 unsigned int i = (
unsigned int)
scales.size();
119 unsigned int i = (
unsigned int)
scales.size();
156 unsigned int i = (
unsigned int)
scales.size();
185 unsigned int nbrow = 0;
186 for (std::list<vpMbtDistanceLine *>::iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
195 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
205 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
301 std::cout <<
" *********** Parsing XML for Mb Edge KLT Tracker ************ " << std::endl;
303 xmlp.
parse(configFile.c_str());
305 vpERROR_TRACE(
"Can't open XML file \"%s\"\n ", configFile.c_str());
365 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
372 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
380 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
421 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
428 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
436 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
485 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
486 if ((*it)->isTracked()) {
488 unsigned int indexLine = 0;
491 for (
size_t a = 0; a < l->
meline.size(); a++) {
492 std::list<vpMeSite>::iterator itListLine;
494 itListLine = l->
meline[a]->getMeList().begin();
496 for (
unsigned int i = 0; i < l->
nbFeature[a]; i++) {
497 wmean += w[n + indexLine];
499 if (w[n + indexLine] < 0.5) {
525 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
527 if ((*it)->isTracked()) {
530 std::list<vpMeSite>::iterator itListCyl1;
531 std::list<vpMeSite>::iterator itListCyl2;
533 itListCyl1 = cy->
meline1->getMeList().begin();
534 itListCyl2 = cy->
meline2->getMeList().begin();
538 for (
unsigned int i = 0; i < cy->
nbFeaturel1; i++) {
541 if (w[n + i] < 0.5) {
562 for (
unsigned int i = cy->
nbFeaturel1; i < cy->nbFeature; i++) {
565 if (w[n + i] < 0.5) {
591 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
592 if ((*it)->isTracked()) {
595 std::list<vpMeSite>::iterator itListCir;
598 itListCir = ci->
meEllipse->getMeList().begin();
602 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
605 if (w[n + i] < 0.5) {
641 unsigned int lvl,
double *edge_residual,
double *klt_residual)
646 if (nbrow < 4 && nbInfos < 4) {
648 }
else if (nbrow < 4)
651 unsigned int totalNbRows = nbrow + 2 * nbInfos;
653 double residu_1 = -1;
654 unsigned int iter = 0;
664 L_mbt.
resize(nbrow, 6,
false,
false);
665 R_mbt.
resize(nbrow,
false);
669 L_klt.
resize(2 * nbInfos, 6,
false,
false);
670 R_klt.
resize(2 * nbInfos,
false);
694 if (edge_residual != NULL)
696 if (klt_residual != NULL)
724 while (((
int)((residu - residu_1) * 1e8) != 0) && (iter <
m_maxIter)) {
729 unsigned int shift = 0;
770 unsigned int cpt = 0;
771 while (cpt < (nbrow + 2 * nbInfos)) {
772 if (cpt < (
unsigned)nbrow) {
780 bool reStartFromLastIncrement =
false;
783 if (reStartFromLastIncrement) {
787 if (!reStartFromLastIncrement) {
790 if (edge_residual != NULL) {
792 for (
unsigned int i = 0; i < R_mbt.
getRows(); i++)
793 *edge_residual += fabs(R_mbt[i]);
794 *edge_residual /= R_mbt.
getRows();
800 L.insert(L_mbt, 0, 0);
804 if (klt_residual != NULL) {
806 for (
unsigned int i = 0; i < R_klt.
getRows(); i++)
807 *klt_residual += fabs(R_klt[i]);
808 *klt_residual /= R_klt.
getRows();
814 L.insert(L_klt, nbrow, 0);
818 while (cpt < (nbrow + 2 * nbInfos)) {
819 if (cpt < (
unsigned)nbrow) {
829 if (!isoJoIdentity) {
832 LVJ_true = (L * cVo *
oJo);
841 for (
unsigned int i = 0; i < weighted_error.
getRows(); i++) {
847 for (
unsigned int j = 0; j < 6; j += 1) {
853 residu = sqrt(num / den);
855 computeVVSPoseEstimation(isoJoIdentity, iter, L, LTL, weighted_error,
m_error_hybrid, m_error_prev, LTR, mu, v,
878 "computeVVSInteractionMatrixAndR"
879 "esidu() should not be called!");
908 unsigned int nbrow = 0;
964 unsigned int nbrow = 0;
1011 factor.
resize(nbrow,
false);
1015 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
1016 if ((*it)->isTracked()) {
1023 int index = *itindex;
1034 for (
size_t a = 0; a < l->
meline.size(); a++) {
1035 std::list<vpMeSite>::const_iterator itListLine;
1036 if (l->
meline[a] != NULL) {
1037 itListLine = l->
meline[a]->getMeList().begin();
1039 for (
unsigned int i = 0; i < l->
nbFeature[a]; i++) {
1040 factor[n + i] = fac;
1043 factor[n + i] = 0.2;
1052 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
1054 if ((*it)->isTracked()) {
1059 std::list<vpMeSite>::const_iterator itCyl1;
1060 std::list<vpMeSite>::const_iterator itCyl2;
1062 itCyl1 = cy->
meline1->getMeList().begin();
1063 itCyl2 = cy->
meline2->getMeList().begin();
1066 for (
unsigned int i = 0; i < cy->
nbFeature; i++) {
1067 factor[n + i] = fac;
1069 if (i < cy->nbFeaturel1) {
1077 factor[n + i] = 0.2;
1084 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
1085 if ((*it)->isTracked()) {
1090 std::list<vpMeSite>::const_iterator itCir;
1092 itCir = ci->
meEllipse->getMeList().begin();
1095 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
1096 factor[n + i] = fac;
1099 factor[n + i] = 0.2;
1118 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
1119 if ((*it)->isTracked()) {
1123 for (
unsigned int j = 0; j < 6; j++) {
1124 L[n + i][j] = l->
L[i][j];
1125 error[n + i] = l->
error[i];
1132 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
1134 if ((*it)->isTracked()) {
1137 for (
unsigned int i = 0; i < cy->
nbFeature; i++) {
1138 for (
unsigned int j = 0; j < 6; j++) {
1139 L[n + i][j] = cy->
L[i][j];
1140 error[n + i] = cy->
error[i];
1146 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
1147 if ((*it)->isTracked()) {
1150 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
1151 for (
unsigned int j = 0; j < 6; j++) {
1152 L[n + i][j] = ci->
L[i][j];
1153 error[n + i] = ci->
error[i];
1209 const std::string &name)
1225 const std::string &name)
1244 bool displayFullModel)
1246 std::vector<std::vector<double> > models =
1249 for (
size_t i = 0; i < models.size(); i++) {
1256 double n20 = models[i][3];
1257 double n11 = models[i][4];
1258 double n02 = models[i][5];
1271 std::stringstream ss;
1278 #ifdef VISP_HAVE_OGRE
1297 bool displayFullModel)
1299 std::vector<std::vector<double> > models =
1302 for (
size_t i = 0; i < models.size(); i++) {
1309 double n20 = models[i][3];
1310 double n11 = models[i][4];
1311 double n02 = models[i][5];
1324 std::stringstream ss;
1331 #ifdef VISP_HAVE_OGRE
1340 bool displayFullModel)
1342 std::vector<std::vector<double> > models;
1344 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
1348 std::vector<std::vector<double> > currentModel =
1349 (*it)->getModelForDisplay(width, height, cMo, cam, displayFullModel);
1350 models.insert(models.end(), currentModel.begin(), currentModel.end());
1353 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[
scaleLevel].begin();
1355 std::vector<std::vector<double> > currentModel =
1356 (*it)->getModelForDisplay(width, height, cMo, cam, displayFullModel);
1357 models.insert(models.end(), currentModel.begin(), currentModel.end());
1360 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[
scaleLevel].begin();
1362 std::vector<double> paramsCircle = (*it)->getModelForDisplay(cMo, cam, displayFullModel);
1363 models.push_back(paramsCircle);
1370 #ifdef VISP_HAVE_OGRE
1394 #if (VISP_HAVE_OPENCV_VERSION < 0x020408)
1396 cvReleaseImage(&
cur);
1402 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1404 if (kltpoly != NULL) {
1414 if (kltPolyCylinder != NULL) {
1415 delete kltPolyCylinder;
1417 kltPolyCylinder = NULL;
1439 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
1441 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[i].begin(); it !=
lines[i].end(); ++it) {
1448 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[i].begin(); it !=
cylinders[i].end();
1456 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[i].begin(); it !=
circles[i].end(); ++it) {
1485 #elif !defined(VISP_BUILD_SHARED_LIBS)
1488 void dummy_vpMbEdgeKltTracker(){};
void setWindowName(const Ogre::String &n)
void resize(unsigned int nrows, unsigned int ncols, bool flagNullify=true, bool recopy_=true)
unsigned int getRows() const
Generic class defining intrinsic camera parameters.
void computeFov(const unsigned int &w, const unsigned int &h)
Implementation of column vector and the associated operations.
void insert(unsigned int i, const vpColVector &v)
void resize(unsigned int i, bool flagNullify=true)
Class to define RGB colors available for display functionnalities.
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 emited 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 ...
unsigned int getWidth() const
unsigned int getHeight() const
void setBlockSize(int blockSize)
void setQuality(double qualityLevel)
void setHarrisFreeParameter(double harris_k)
void setMaxFeatures(int maxCount)
void setMinDistance(double minDistance)
void setWindowSize(int winSize)
void setPyramidLevels(int pyrMaxLevel)
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 initFaceFromCorners(vpMbtPolygon &polygon)
virtual void setClipping(const unsigned int &flags)
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=NULL, vpColVector *const m_w_prev=NULL)
virtual void setFarClippingDistance(const double &dist)
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false)
virtual void initCylinder(const vpPoint &, const vpPoint &, double r, int idFace, const std::string &name="")
virtual void loadConfigFile(const std::string &configFile, bool verbose=true)
virtual void initFaceFromLines(vpMbtPolygon &polygon)
virtual void computeVVSInit()
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)
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)
unsigned int initMbtTracking(unsigned int level=0)
virtual void computeVVSInteractionMatrixAndResidu()
virtual ~vpMbEdgeKltTracker()
virtual void init(const vpImage< unsigned char > &I)
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_hybrid
(s - s*)
virtual void setNearClippingDistance(const double &dist)
virtual void setCameraParameters(const vpCameraParameters &cam)
virtual void initCircle(const vpPoint &, const vpPoint &, const vpPoint &, double r, int idFace=0, const std::string &name="")
vpColVector m_w_klt
Robust weights for KLT.
virtual void track(const vpImage< unsigned char > &I)
double m_thresholdMBT
The threshold used in the robust estimation of MBT.
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
unsigned int m_maxIterKlt
The maximum iteration of the virtual visual servoing stage.
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false)
vpColVector m_w_hybrid
Robust weights.
void upScale(const unsigned int _scale)
virtual void setCameraParameters(const vpCameraParameters &cam)
virtual void initFaceFromLines(vpMbtPolygon &polygon)
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.
void initMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo)
void trackMovingEdge(const vpImage< unsigned char > &I)
std::vector< const vpImage< unsigned char > * > Ipyramid
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="")
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="")
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 setMovingEdge(const vpMe &me)
virtual void initFaceFromCorners(vpMbtPolygon &polygon)
vpAROgre * getOgreContext()
void computeClippedPolygons(const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam)
bool isAppearing(unsigned int i)
vpMbScanLine & getMbScanLineRenderer()
void computeScanLineRender(const vpCameraParameters &cam, const unsigned int &w, const unsigned int &h)
void displayOgre(const vpHomogeneousMatrix &cMo)
std::list< vpMbtDistanceKltCylinder * > kltCylinders
vpHomogeneousMatrix c0Mo
Initial pose.
vpHomogeneousMatrix ctTc0
std::list< vpMbtDistanceKltPoints * > kltPolygons
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
virtual void initCylinder(const vpPoint &, const vpPoint &, double, int, const std::string &name="")
cv::Mat cur
Temporary OpenCV image for fast conversion.
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()
void preTracking(const vpImage< unsigned char > &I)
bool postTracking(const vpImage< unsigned char > &I, vpColVector &w)
virtual void reinit(const vpImage< unsigned char > &I)
unsigned int maskBorder
Erosion of the mask.
virtual void initFaceFromCorners(vpMbtPolygon &polygon)
void setCameraParameters(const vpCameraParameters &cam)
std::vector< std::vector< double > > m_featuresToBeDisplayedKlt
Display features.
virtual void initFaceFromLines(vpMbtPolygon &polygon)
virtual void init(const vpImage< unsigned char > &I)
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.
virtual void computeVVSCheckLevenbergMarquardt(unsigned int iter, vpColVector &error, const vpColVector &m_error_prev, const vpHomogeneousMatrix &cMoPrev, double &mu, bool &reStartFromLastIncrement, vpColVector *const w=NULL, const vpColVector *const m_w_prev=NULL)
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.
vpCameraParameters m_cam
The camera parameters.
bool useOgre
Use Ogre3d for 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.
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 visibility tests.
double angleAppears
Angle used to detect a face appearance.
virtual void loadModel(const std::string &modelFile, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
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 removed during virtual visual-servoing because considered as an outlier.
@ NO_SUPPRESSION
Point used by the tracker.
vpMeSiteState getState() const
void setState(const vpMeSiteState &flag)
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 vpSubMatrix class provides a mask on a vpMatrix all properties of vpMat...
Error that can be emited by the vpTracker class and its derivates.
vpVelocityTwistMatrix buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)