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) {
281 #ifdef VISP_HAVE_PUGIXML 300 std::cout <<
" *********** Parsing XML for Mb Edge KLT Tracker ************ " << std::endl;
301 xmlp.
parse(configFile.c_str());
303 vpERROR_TRACE(
"Can't open XML file \"%s\"\n ", configFile.c_str());
353 std::cerr <<
"pugixml third-party is not properly built to read config file: " << configFile << std::endl;
367 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
374 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
382 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
423 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
430 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
438 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
487 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
488 if ((*it)->isTracked()) {
490 unsigned int indexLine = 0;
493 for (
size_t a = 0; a < l->
meline.size(); a++) {
494 std::list<vpMeSite>::iterator itListLine;
496 itListLine = l->
meline[a]->getMeList().begin();
498 for (
unsigned int i = 0; i < l->
nbFeature[a]; i++) {
499 wmean += w[n + indexLine];
501 if (w[n + indexLine] < 0.5) {
527 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
529 if ((*it)->isTracked()) {
532 std::list<vpMeSite>::iterator itListCyl1;
533 std::list<vpMeSite>::iterator itListCyl2;
535 itListCyl1 = cy->
meline1->getMeList().begin();
536 itListCyl2 = cy->
meline2->getMeList().begin();
540 for (
unsigned int i = 0; i < cy->
nbFeaturel1; i++) {
543 if (w[n + i] < 0.5) {
564 for (
unsigned int i = cy->
nbFeaturel1; i < cy->nbFeature; i++) {
567 if (w[n + i] < 0.5) {
593 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
594 if ((*it)->isTracked()) {
597 std::list<vpMeSite>::iterator itListCir;
600 itListCir = ci->
meEllipse->getMeList().begin();
604 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
607 if (w[n + i] < 0.5) {
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);
674 vpRobust robust_mbt(0), robust_klt(0);
694 double residuMBT = 0;
695 double residuKLT = 0;
715 robust_klt.
resize(2 * nbInfos);
720 while (((
int)((residu - residu_1) * 1e8) != 0) && (iter <
m_maxIter)) {
725 unsigned int shift = 0;
766 unsigned int cpt = 0;
767 while (cpt < (nbrow + 2 * nbInfos)) {
768 if (cpt < (
unsigned)nbrow) {
776 bool reStartFromLastIncrement =
false;
779 if (reStartFromLastIncrement) {
783 if (!reStartFromLastIncrement) {
787 for (
unsigned int i = 0; i < R_mbt.
getRows(); i++)
788 residuMBT += fabs(R_mbt[i]);
799 for (
unsigned int i = 0; i < R_klt.
getRows(); i++)
800 residuKLT += fabs(R_klt[i]);
806 L.
insert(L_klt, nbrow, 0);
810 while (cpt < (nbrow + 2 * nbInfos)) {
811 if (cpt < (
unsigned)nbrow) {
824 LVJ_true = (L * cVo *
oJo);
833 for (
unsigned int i = 0; i < weighted_error.
getRows(); i++) {
839 for (
unsigned int j = 0; j < 6; j += 1) {
840 L[i][j] *= m_w_hybrid[i];
845 residu = sqrt(num / den);
847 computeVVSPoseEstimation(
isoJoIdentity, iter, L, LTL, weighted_error,
m_error_hybrid, m_error_prev, LTR, mu, v,
870 "computeVVSInteractionMatrixAndR" 871 "esidu() should not be called!");
900 unsigned int nbrow = 0;
956 unsigned int nbrow = 0;
1004 factor.
resize(nbrow,
false);
1008 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
1009 if ((*it)->isTracked()) {
1016 int index = *itindex;
1027 unsigned int indexFeature = 0;
1028 for (
size_t a = 0; a < l->
meline.size(); a++) {
1029 std::list<vpMeSite>::const_iterator itListLine;
1030 if (l->
meline[a] != NULL) {
1031 itListLine = l->
meline[a]->getMeList().begin();
1033 for (
unsigned int i = 0; i < l->
nbFeature[a]; i++) {
1034 factor[n + i] = fac;
1037 factor[n + i] = 0.2;
1047 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
1049 if ((*it)->isTracked()) {
1054 std::list<vpMeSite>::const_iterator itCyl1;
1055 std::list<vpMeSite>::const_iterator itCyl2;
1057 itCyl1 = cy->
meline1->getMeList().begin();
1058 itCyl2 = cy->
meline2->getMeList().begin();
1061 for (
unsigned int i = 0; i < cy->
nbFeature; i++) {
1062 factor[n + i] = fac;
1064 if (i < cy->nbFeaturel1) {
1072 factor[n + i] = 0.2;
1079 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
1080 if ((*it)->isTracked()) {
1085 std::list<vpMeSite>::const_iterator itCir;
1087 itCir = ci->
meEllipse->getMeList().begin();
1090 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
1091 factor[n + i] = fac;
1094 factor[n + i] = 0.2;
1113 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
1114 if ((*it)->isTracked()) {
1118 for (
unsigned int j = 0; j < 6; j++) {
1119 L[n + i][j] = l->
L[i][j];
1120 error[n + i] = l->
error[i];
1127 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
1129 if ((*it)->isTracked()) {
1132 for (
unsigned int i = 0; i < cy->
nbFeature; i++) {
1133 for (
unsigned int j = 0; j < 6; j++) {
1134 L[n + i][j] = cy->
L[i][j];
1135 error[n + i] = cy->
error[i];
1141 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
1142 if ((*it)->isTracked()) {
1145 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
1146 for (
unsigned int j = 0; j < 6; j++) {
1147 L[n + i][j] = ci->
L[i][j];
1148 error[n + i] = ci->
error[i];
1204 int idFace,
const std::string &name)
1220 const std::string &name)
1239 bool displayFullModel)
1243 for (
size_t i = 0; i < models.size(); i++) {
1250 double mu20 = models[i][3];
1251 double mu11 = models[i][4];
1252 double mu02 = models[i][5];
1265 std::stringstream ss;
1272 #ifdef VISP_HAVE_OGRE 1291 bool displayFullModel)
1295 for (
size_t i = 0; i < models.size(); i++) {
1302 double mu20 = models[i][3];
1303 double mu11 = models[i][4];
1304 double mu02 = models[i][5];
1317 std::stringstream ss;
1324 #ifdef VISP_HAVE_OGRE 1333 bool displayFullModel)
1335 std::vector<std::vector<double> > models;
1337 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
1341 std::vector<std::vector<double> > currentModel =
1342 (*it)->getModelForDisplay(width, height, cMo, cam, displayFullModel);
1343 models.insert(models.end(), currentModel.begin(), currentModel.end());
1346 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[
scaleLevel].begin();
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<vpMbtDistanceCircle *>::const_iterator it =
circles[
scaleLevel].begin();
1355 std::vector<double> paramsCircle = (*it)->getModelForDisplay(cMo, cam, displayFullModel);
1356 models.push_back(paramsCircle);
1363 #ifdef VISP_HAVE_OGRE 1388 #if (VISP_HAVE_OPENCV_VERSION < 0x020408) 1390 cvReleaseImage(&
cur);
1396 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1398 if (kltpoly != NULL) {
1408 if (kltPolyCylinder != NULL) {
1409 delete kltPolyCylinder;
1411 kltPolyCylinder = NULL;
1433 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
1435 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[i].begin(); it !=
lines[i].end(); ++it) {
1442 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[i].begin(); it !=
cylinders[i].end();
1450 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[i].begin(); it !=
circles[i].end(); ++it) {
1479 #elif !defined(VISP_BUILD_SHARED_LIBS) 1482 void dummy_vpMbEdgeKltTracker(){};
1483 #endif // VISP_HAVE_OPENCV bool m_computeInteraction
void setWindowName(const Ogre::String &n)
Implementation of a matrix and operations on matrices.
double m_thresholdMBT
The threshold used in the robust estimation of MBT.
void displayMovingEdges(const vpImage< unsigned char > &I)
void setMovingEdge(const vpMe &me)
static void displayEllipse(const vpImage< unsigned char > &I, const vpImagePoint ¢er, const double &coef1, const double &coef2, const double &coef3, bool use_centered_moments, const vpColor &color, unsigned int thickness=1)
void setMaxFeatures(int maxCount)
vpCameraParameters m_cam
The camera parameters.
void postTrackingMbt(vpColVector &w, unsigned int level=0)
vpMeSiteState getState() const
Point removed during virtual visual-servoing because considered as an outlier.
void resize(unsigned int nrows, unsigned int ncols, bool flagNullify=true, bool recopy_=true)
unsigned int nbFeature
The number of moving edges.
virtual std::vector< std::vector< double > > getModelForDisplay(unsigned int width, unsigned int height, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, bool displayFullModel=false)
unsigned int nbFeatureTotal
The number of moving edges.
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)
void upScale(const unsigned int _scale)
virtual void initFaceFromCorners(vpMbtPolygon &polygon)
void MEstimator(const vpRobustEstimatorType method, const vpColVector &residues, vpColVector &weights)
Compute the weights according a residue vector and a PsiFunction.
bool hasFarClippingDistance() const
void setHarrisFreeParameter(double harris_k)
virtual void loadModel(const std::string &modelFile, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
void setKltQuality(const double &q)
static void convert(const vpImage< unsigned char > &src, vpImage< vpRGBa > &dest)
bool hasEnoughPoints() const
bool hasEnoughPoints() const
void parse(const std::string &filename)
vpMbHiddenFaces< vpMbtPolygon > faces
Set of faces describing the object.
bool Reinit
Indicates if the line has to be reinitialized.
void getCameraParameters(vpCameraParameters &cam) const
Implementation of an homogeneous matrix and operations on such kind of matrices.
void setKltPyramidLevels(const unsigned int &pL)
unsigned int initMbtTracking(unsigned int level=0)
std::vector< std::list< vpMbtDistanceCylinder * > > cylinders
Vector of the tracked cylinders.
vpColVector m_w_mbt
Robust weights for Edge.
virtual void loadConfigFile(const std::string &configFile)
std::list< int > Lindex_polygon
Index of the faces which contain the line.
vpMatrix L
The interaction matrix.
Performs search in a given direction(normal) for a given distance(pixels) for a given 'site'...
virtual void initFaceFromCorners(vpMbtPolygon &polygon)
virtual void loadConfigFile(const std::string &configFile)
std::vector< std::vector< double > > m_featuresToBeDisplayedKlt
Display features.
Class to define colors available for display functionnalities.
static bool equal(double x, double y, double s=0.001)
std::list< vpMbtDistanceKltCylinder * > kltCylinders
double getFarClippingDistance() const
unsigned int m_maxIterKlt
The maximum iteration of the virtual visual servoing stage.
bool postTracking(const vpImage< unsigned char > &I, vpColVector &w)
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false)
void displayMovingEdges(const vpImage< unsigned char > &I)
std::vector< const vpImage< unsigned char > * > Ipyramid
vpColVector error
The error vector.
void setMinDistance(double minDistance)
error that can be emited by ViSP classes.
vpMbtMeEllipse * meEllipse
The moving edge containers.
Manage a cylinder used in the model-based tracker.
vpMbScanLine & getMbScanLineRenderer()
unsigned int getRows() const
vpHomogeneousMatrix inverse() const
Manage the line of a polygon used in the model-based tracker.
unsigned int nbFeature
The number of moving edges.
virtual void setClipping(const unsigned int &flags)
vpColVector m_w_hybrid
Robust weights.
bool useOgre
Use Ogre3d for visibility tests.
unsigned int getKltBlockSize() const
void setKltMaskBorder(const unsigned int &mb)
double getNearClippingDistance() const
void setEdgeMe(const vpMe &ecm)
Definition of the vpSubMatrix vpSubMatrix class provides a mask on a vpMatrix all properties of vpMat...
bool computeCovariance
Flag used to specify if the covariance matrix has to be computed or not.
vpMe me
The moving edges parameters.
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, double radius, int idFace=0, const std::string &name="")
void updateMovingEdge(const vpImage< unsigned char > &I)
void initInteractionMatrixError()
virtual void reinit(const vpImage< unsigned char > &I)
virtual void setLod(bool useLod, const std::string &name="")
virtual void setFarClippingDistance(const double &dist)
virtual ~vpMbEdgeKltTracker()
void downScale(const unsigned int _scale)
virtual void initCylinder(const vpPoint &, const vpPoint &, double r, int idFace, const std::string &name="")
double getAngleAppear() const
Implementation of a polygon of the model containing points of interest. It is used by the model-based...
Class that defines what is a point.
vpMatrix L
The interaction matrix.
void reInitModel(const vpImage< unsigned char > &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
void computeClippedPolygons(const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam)
void setQuality(double qualityLevel)
virtual void init(const vpImage< unsigned char > &I)
vpHomogeneousMatrix ctTc0
virtual void initCylinder(const vpPoint &, const vpPoint &, double, int, const std::string &name="")
Parse an Xml file to extract configuration parameters of a mbtConfig object.Data parser for the model...
unsigned int nbFeaturel1
The number of moving edges on line 1.
void trackSecondLoop(const vpImage< unsigned char > &I, vpMatrix &L, vpColVector &_error, const vpHomogeneousMatrix &cMo, unsigned int lvl=0)
Implementation of an homography and operations on homographies.
vpAROgre * getOgreContext()
void setKltHarrisParam(const double &hp)
virtual void computeVVSInit()
Manage a circle used in the model-based tracker.
vpMatrix oJo
The Degrees of Freedom to estimate.
std::vector< bool > scales
Vector of scale level to use for the multi-scale tracking.
bool Reinit
Indicates if the circle has to be reinitialized.
Error that can be emited by the vpTracker class and its derivates.
Point used by the tracker.
void setMeanWeight(double w_mean)
Implementation of a polygon of the model used by the model-based tracker.
void setAngleDisappear(const double &adisappear)
bool isAppearing(unsigned int i)
void initMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo)
void computeInteractionMatrixAndResidu(const vpHomogeneousMatrix &cMc0, vpColVector &_R, vpMatrix &_J)
bool useScanLine
Use Scanline for visibility tests.
vpVelocityTwistMatrix buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
void setKltMinDistance(const double &mD)
static double sqr(double x)
void setPyramidLevels(int pyrMaxLevel)
double minLineLengthThresholdGeneral
Minimum line length threshold for LOD mode (general setting)
void setMeanWeight1(double wmean)
vpColVector error
The error vector.
virtual void initFaceFromCorners(vpMbtPolygon &polygon)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
double getAngleDisappear() const
virtual void track(const vpImage< unsigned char > &I)
unsigned int maskBorder
Erosion of the mask.
bool getFovClipping() const
Generic class defining intrinsic camera parameters.
unsigned int getKltWindowSize() const
void cleanPyramid(std::vector< const vpImage< unsigned char > *> &_pyramid)
void computeInteractionMatrixError(const vpHomogeneousMatrix &cMo)
double m_thresholdKLT
The threshold used in the robust estimation of KLT.
void setThreshold(double noise_threshold)
unsigned int getKltMaxFeatures() const
Implementation of a polygon of the model containing points of interest. It is used by the model-based...
void setMeanWeight(double _wmean)
double getKltMinDistance() const
double m_initialMu
Initial Mu for Levenberg Marquardt optimization loop.
vpMbtMeLine * meline1
The moving edge containers (first line of the cylinder)
void setWindowSize(int winSize)
double m_lambda
Gain of the virtual visual servoing stage.
void setMeanWeight2(double wmean)
double angleAppears
Angle used to detect a face appearance.
vpKltOpencv tracker
Points tracker.
void setState(const vpMeSiteState &flag)
void setKltWindowSize(const unsigned int &w)
void reinitMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo)
void displayMovingEdges(const vpImage< unsigned char > &I)
unsigned int m_maxIter
Maximum number of iterations of the virtual visual servoing stage.
unsigned int getCurrentNumberPoints() const
virtual void setMinPolygonAreaThresh(double minPolygonAreaThresh, const std::string &name="")
virtual bool isVisible(const vpHomogeneousMatrix &cMo, double alpha, const bool &modulo=false, const vpCameraParameters &cam=vpCameraParameters(), unsigned int width=0, unsigned int height=0)
void setAngleAppear(const double &aappear)
static double rad(double deg)
std::vector< std::list< vpMbtDistanceCircle * > > circles
Vector of the tracked circles.
virtual void setCameraParameters(const vpCameraParameters &cam)
void computeProjectionError(const vpImage< unsigned char > &_I)
void insert(unsigned int i, const vpColVector &v)
cv::Mat cur
Temporary OpenCV image for fast conversion.
bool postTracking(const vpImage< unsigned char > &I, vpColVector &w_mbt, vpColVector &w_klt, unsigned int lvl=0)
virtual void initFaceFromLines(vpMbtPolygon &polygon)
unsigned int getCurrentNumberPoints() const
void computeHomography(const vpHomogeneousMatrix &_cTc0, vpHomography &cHc0)
void resize(unsigned int i, bool flagNullify=true)
static void displayCross(const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int size, const vpColor &color, unsigned int thickness=1)
bool closeToImageBorder(const vpImage< unsigned char > &I, const unsigned int threshold)
void getEdgeMe(vpMe &ecm) const
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)
std::list< vpMbtDistanceCircle * > circles_disp
Vector of the circles used here only to display the full model.
double minPolygonAreaThresholdGeneral
Minimum polygon area threshold for LOD mode (general setting)
static double deg(double rad)
void initInteractionMatrixError()
bool displayFeatures
If true, the features are displayed.
unsigned int getHeight() const
void setCameraParameters(const vpCameraParameters &cam)
void preTracking(const vpImage< unsigned char > &I)
virtual unsigned int getNbPolygon() const
bool hasNearClippingDistance() const
bool applyLodSettingInConfig
Implementation of column vector and the associated operations.
void computeInteractionMatrixError(const vpHomogeneousMatrix &cMo)
vpColVector m_error_hybrid
(s - s*)
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, double radius, int idFace=0, const std::string &name="")
double getLodMinLineLengthThreshold() const
vpMbHiddenFaces< vpMbtPolygon > * hiddenface
Pointer to the list of faces.
static vpHomogeneousMatrix direct(const vpColVector &v)
virtual void computeCovarianceMatrixVVS(const bool isoJoIdentity_, const vpColVector &w_true, const vpHomogeneousMatrix &cMoPrev, const vpMatrix &L_true, const vpMatrix &LVJ_true, const vpColVector &error)
Contains an M-Estimator and various influence function.
unsigned int nbvisiblepolygone
Number of polygon (face) currently visible.
double angleDisappears
Angle used to detect a face disappearance.
virtual void initFaceFromLines(vpMbtPolygon &polygon)
vpMbtPolygon * polygon
Pointer to the polygon that define a face.
unsigned int getKltMaskBorder() const
vpColVector error
The error vector.
std::vector< std::list< vpMbtDistanceLine * > > lines
bool Reinit
Indicates if the line has to be reinitialized.
virtual void init(const vpImage< unsigned char > &I)
double getKltQuality() const
virtual void setCameraParameters(const vpCameraParameters &cam)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
unsigned int trackFirstLoop(const vpImage< unsigned char > &I, vpColVector &factor, unsigned int lvl=0)
vpColVector m_w_klt
Robust weights for KLT.
virtual void setMinLineLengthThresh(double minLineLengthThresh, const std::string &name="")
std::vector< vpMbtMeLine * > meline
The moving edge container.
unsigned int clippingFlag
Flags specifying which clipping to used.
void insert(const vpMatrix &A, unsigned int r, unsigned int c)
void initPyramid(const vpImage< unsigned char > &_I, std::vector< const vpImage< unsigned char > *> &_pyramid)
void trackMovingEdge(const vpImage< unsigned char > &I)
void displayOgre(const vpHomogeneousMatrix &cMo)
unsigned int nbFeaturel2
The number of moving edges on line 2.
virtual void initFaceFromLines(vpMbtPolygon &polygon)
void setKltBlockSize(const unsigned int &bs)
void setKltMaxFeatures(const unsigned int &mF)
void resize(unsigned int n_data)
Resize containers for sort methods.
void setCameraParameters(const vpCameraParameters &cam)
double getKltHarrisParam() const
vpMbtMeLine * meline2
The moving edge containers (second line of the cylinder)
virtual void computeVVSInteractionMatrixAndResidu()
virtual void initCircle(const vpPoint &, const vpPoint &, const vpPoint &, double r, int idFace=0, const std::string &name="")
vpImage< unsigned char > m_I
Grayscale image buffer, used when passing color images.
unsigned int getWidth() const
void setBlockSize(int blockSize)
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1, bool segment=true)
bool useLodGeneral
True if LOD mode is enabled.
vpMatrix L
The interaction matrix.
void computeScanLineRender(const vpCameraParameters &cam, const unsigned int &w, const unsigned int &h)
virtual std::vector< std::vector< double > > getFeaturesForDisplayKlt()
vpHomogeneousMatrix m_cMo
The current pose.
std::vector< unsigned int > nbFeature
The number of moving edges.
void computeInteractionMatrixError(const vpHomogeneousMatrix &cMo, const vpImage< unsigned char > &I)
void initInteractionMatrixError()
std::list< vpMbtDistanceKltPoints * > kltPolygons
bool isoJoIdentity
Boolean to know if oJo is identity (for fast computation)
void computeInteractionMatrixAndResidu(vpColVector &_R, vpMatrix &_J)
vpHomogeneousMatrix c0Mo
Initial pose.
double getLodMinPolygonAreaThreshold() const
virtual void setNearClippingDistance(const double &dist)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
unsigned int getKltPyramidLevels() const
void computeFov(const unsigned int &w, const unsigned int &h)