42 #include <visp3/core/vpDebug.h> 43 #include <visp3/core/vpTrackingException.h> 44 #include <visp3/core/vpVelocityTwistMatrix.h> 45 #include <visp3/mbt/vpMbEdgeKltTracker.h> 47 #if defined(VISP_HAVE_MODULE_KLT) && (defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION >= 0x020100)) 50 : thresholdKLT(2.), thresholdMBT(2.), m_maxIterKlt(30), w_mbt(), w_klt(), m_error_hybrid(), m_w_hybrid()
85 unsigned int i = (
unsigned int)
scales.size();
121 unsigned int i = (
unsigned int)
scales.size();
150 unsigned int nbrow = 0;
151 for (std::list<vpMbtDistanceLine *>::iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
160 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
170 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
251 #ifdef VISP_HAVE_XML2 270 std::cout <<
" *********** Parsing XML for Mb Edge Tracker ************ " << std::endl;
271 xmlp.
parse(configFile.c_str());
273 vpERROR_TRACE(
"Can't open XML file \"%s\"\n ", configFile.c_str());
307 xmlp.
getMe(meParser);
323 vpTRACE(
"You need the libXML2 to read the config file %s", configFile.c_str());
331 const unsigned int lvl)
337 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
344 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
352 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
401 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
402 if ((*it)->isTracked()) {
404 unsigned int indexLine = 0;
407 for (
size_t a = 0; a < l->
meline.size(); a++) {
408 std::list<vpMeSite>::iterator itListLine;
410 itListLine = l->
meline[a]->getMeList().begin();
412 for (
unsigned int i = 0; i < l->
nbFeature[a]; i++) {
413 wmean += w[n + indexLine];
415 if (w[n + indexLine] < 0.5) {
441 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
443 if ((*it)->isTracked()) {
446 std::list<vpMeSite>::iterator itListCyl1;
447 std::list<vpMeSite>::iterator itListCyl2;
449 itListCyl1 = cy->
meline1->getMeList().begin();
450 itListCyl2 = cy->
meline2->getMeList().begin();
454 for (
unsigned int i = 0; i < cy->
nbFeaturel1; i++) {
457 if (w[n + i] < 0.5) {
478 for (
unsigned int i = cy->
nbFeaturel1; i < cy->nbFeature; i++) {
481 if (w[n + i] < 0.5) {
507 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
508 if ((*it)->isTracked()) {
511 std::list<vpMeSite>::iterator itListCir;
514 itListCir = ci->
meEllipse->getMeList().begin();
518 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
521 if (w[n + i] < 0.5) {
555 const unsigned int lvl)
560 if (nbrow < 4 && nbInfos < 4) {
562 }
else if (nbrow < 4)
565 unsigned int totalNbRows = nbrow + 2 * nbInfos;
567 double residu_1 = -1;
568 unsigned int iter = 0;
578 L_mbt.
resize(nbrow, 6,
false,
false);
579 R_mbt.
resize(nbrow,
false);
583 L_klt.
resize(2 * nbInfos, 6,
false,
false);
584 R_klt.
resize(2 * nbInfos,
false);
588 vpRobust robust_mbt(0), robust_klt(0);
608 double residuMBT = 0;
609 double residuKLT = 0;
629 robust_klt.
resize(2 * nbInfos);
634 while (((
int)((residu - residu_1) * 1e8) != 0) && (iter <
m_maxIter)) {
639 unsigned int shift = 0;
680 unsigned int cpt = 0;
681 while (cpt < (nbrow + 2 * nbInfos)) {
682 if (cpt < (
unsigned)nbrow) {
690 bool reStartFromLastIncrement =
false;
693 if (reStartFromLastIncrement) {
697 if (!reStartFromLastIncrement) {
701 for (
unsigned int i = 0; i < R_mbt.
getRows(); i++)
702 residuMBT += fabs(R_mbt[i]);
713 for (
unsigned int i = 0; i < R_klt.
getRows(); i++)
714 residuKLT += fabs(R_klt[i]);
720 L.
insert(L_klt, nbrow, 0);
723 unsigned int cpt = 0;
724 while (cpt < (nbrow + 2 * nbInfos)) {
725 if (cpt < (
unsigned)nbrow) {
738 LVJ_true = (L * cVo *
oJo);
747 for (
unsigned int i = 0; i < weighted_error.
getRows(); i++) {
753 for (
unsigned int j = 0; j < 6; j += 1) {
754 L[i][j] *= m_w_hybrid[i];
759 residu = sqrt(num / den);
761 computeVVSPoseEstimation(
isoJoIdentity, iter, L, LTL, weighted_error,
m_error_hybrid, m_error_prev, LTR, mu, v,
784 "computeVVSInteractionMatrixAndR" 785 "esidu() should not be called!");
814 unsigned int nbrow = 0;
840 const unsigned int lvl)
858 factor.
resize(nbrow,
false);
862 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
863 if ((*it)->isTracked()) {
870 int index = *itindex;
881 unsigned int indexFeature = 0;
882 for (
size_t a = 0; a < l->
meline.size(); a++) {
883 std::list<vpMeSite>::const_iterator itListLine;
884 if (l->
meline[a] != NULL) {
885 itListLine = l->
meline[a]->getMeList().begin();
887 for (
unsigned int i = 0; i < l->
nbFeature[a]; i++) {
901 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
903 if ((*it)->isTracked()) {
908 std::list<vpMeSite>::const_iterator itCyl1;
909 std::list<vpMeSite>::const_iterator itCyl2;
911 itCyl1 = cy->
meline1->getMeList().begin();
912 itCyl2 = cy->
meline2->getMeList().begin();
915 for (
unsigned int i = 0; i < cy->
nbFeature; i++) {
918 if (i < cy->nbFeaturel1) {
933 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
934 if ((*it)->isTracked()) {
939 std::list<vpMeSite>::const_iterator itCir;
941 itCir = ci->
meEllipse->getMeList().begin();
944 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
967 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[lvl].begin(); it !=
lines[lvl].end(); ++it) {
968 if ((*it)->isTracked()) {
972 for (
unsigned int j = 0; j < 6; j++) {
973 L[n + i][j] = l->
L[i][j];
974 error[n + i] = l->
error[i];
981 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[lvl].begin(); it !=
cylinders[lvl].end();
983 if ((*it)->isTracked()) {
986 for (
unsigned int i = 0; i < cy->
nbFeature; i++) {
987 for (
unsigned int j = 0; j < 6; j++) {
988 L[n + i][j] = cy->
L[i][j];
989 error[n + i] = cy->
error[i];
995 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[lvl].begin(); it !=
circles[lvl].end(); ++it) {
996 if ((*it)->isTracked()) {
999 for (
unsigned int i = 0; i < ci->
nbFeature; i++) {
1000 for (
unsigned int j = 0; j < 6; j++) {
1001 L[n + i][j] = ci->
L[i][j];
1002 error[n + i] = ci->
error[i];
1058 const int idFace,
const std::string &name)
1074 const std::string &name)
1093 const bool displayFullModel)
1095 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
1099 (*it)->display(I, cMo_, camera, col, thickness, displayFullModel);
1102 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[
scaleLevel].begin();
1104 (*it)->display(I, cMo_, camera, col, thickness, displayFullModel);
1107 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[
scaleLevel].begin();
1109 (*it)->display(I, cMo_, camera, col, thickness, displayFullModel);
1116 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1130 #ifdef VISP_HAVE_OGRE 1149 const bool displayFullModel)
1151 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
1155 (*it)->display(I, cMo_, camera, col, thickness, displayFullModel);
1158 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[
scaleLevel].begin();
1160 (*it)->display(I, cMo_, camera, col, thickness, displayFullModel);
1163 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[
scaleLevel].begin();
1165 (*it)->display(I, cMo_, camera, col, thickness, displayFullModel);
1172 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1186 #ifdef VISP_HAVE_OGRE 1209 #if (VISP_HAVE_OPENCV_VERSION < 0x020408) 1211 cvReleaseImage(&
cur);
1217 for (std::list<vpMbtDistanceKltPoints *>::const_iterator it =
kltPolygons.begin(); it !=
kltPolygons.end(); ++it) {
1219 if (kltpoly != NULL) {
1229 if (kltPolyCylinder != NULL) {
1230 delete kltPolyCylinder;
1232 kltPolyCylinder = NULL;
1254 for (
unsigned int i = 0; i <
scales.size(); i += 1) {
1256 for (std::list<vpMbtDistanceLine *>::const_iterator it =
lines[i].begin(); it !=
lines[i].end(); ++it) {
1263 for (std::list<vpMbtDistanceCylinder *>::const_iterator it =
cylinders[i].begin(); it !=
cylinders[i].end();
1271 for (std::list<vpMbtDistanceCircle *>::const_iterator it =
circles[i].begin(); it !=
circles[i].end(); ++it) {
1300 #elif !defined(VISP_BUILD_SHARED_LIBS) 1303 void dummy_vpMbEdgeKltTracker(){};
1304 #endif // VISP_HAVE_OPENCV bool m_computeInteraction
void setWindowName(const Ogre::String &n)
void trackSecondLoop(const vpImage< unsigned char > &I, vpMatrix &L, vpColVector &_error, vpHomogeneousMatrix &cMo, const unsigned int lvl=0)
virtual void initCircle(const vpPoint &, const vpPoint &, const vpPoint &, const double r, const int idFace=0, const std::string &name="")
void setQuality(const double &q)
void postTrackingMbt(vpColVector &w, const unsigned int level=0)
Implementation of a matrix and operations on matrices.
void displayMovingEdges(const vpImage< unsigned char > &I)
void displayPrimitive(const vpImage< unsigned char > &_I)
void setMovingEdge(const vpMe &me)
bool getFovClipping() const
vpMeSiteState getState() const
Parse an Xml file to extract configuration parameters of a mbtConfig object.Data parser for the model...
unsigned int nbFeature
The number of moving edges.
unsigned int nbFeatureTotal
The number of moving edges.
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.
void setHarrisFreeParameter(double harris_k)
bool isAppearing(const unsigned int i)
double getAngleAppear() const
bool hasEnoughPoints() const
bool hasEnoughPoints() const
vpMbHiddenFaces< vpMbtPolygon > faces
Set of faces describing the object.
bool Reinit
Indicates if the line has to be reinitialized.
void setMeanWeight2(const double wmean)
Implementation of an homogeneous matrix and operations on such kind of matrices.
std::vector< std::list< vpMbtDistanceCylinder * > > cylinders
Vector of the tracked cylinders.
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.
unsigned int getWindowSize() const
Performs search in a given direction(normal) for a given distance(pixels) for a given 'site'...
void getMe(vpMe &_ecm) const
virtual void initFaceFromCorners(vpMbtPolygon &polygon)
virtual void loadConfigFile(const std::string &configFile)
unsigned int getBlockSize() const
void resize(const unsigned int nrows, const unsigned int ncols, const bool flagNullify=true, const bool recopy_=true)
virtual void loadModel(const std::string &modelFile, const bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
Class to define colors available for display functionnalities.
void setMaxFeatures(const int maxCount)
std::list< vpMbtDistanceKltCylinder * > kltCylinders
unsigned int m_maxIterKlt
The maximum iteration of the virtual visual servoing stage.
virtual void initCylinder(const vpPoint &, const vpPoint &, const double, const int, const std::string &name="")
vpHomogeneousMatrix cMo
The current pose.
bool postTracking(const vpImage< unsigned char > &I, vpColVector &w)
unsigned int getMaxFeatures() const
void displayMovingEdges(const vpImage< unsigned char > &I)
double thresholdKLT
The threshold used in the robust estimation of KLT.
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.
void getCameraParameters(vpCameraParameters &_cam) const
virtual void setClipping(const unsigned int &flags)
vpColVector m_w_hybrid
Robust weights.
bool useOgre
Use Ogre3d for visibility tests.
bool hasNearClippingDistance() const
virtual void setCameraParameters(const vpCameraParameters &camera)
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.
void updateMovingEdge(const vpImage< unsigned char > &I)
void initInteractionMatrixError()
vpColVector w_mbt
Robust weights for Edge.
virtual void reinit(const vpImage< unsigned char > &I)
virtual void setFarClippingDistance(const double &dist)
virtual ~vpMbEdgeKltTracker()
void downScale(const unsigned int _scale)
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.
vpCameraParameters cam
The camera parameters.
void computeClippedPolygons(const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam)
void setQuality(double qualityLevel)
virtual void init(const vpImage< unsigned char > &I)
vpHomogeneousMatrix ctTc0
unsigned int getMaskBorder() const
double getAngleDisappear() const
unsigned int nbFeaturel1
The number of moving edges on line 1.
Implementation of an homography and operations on homographies.
vpAROgre * getOgreContext()
void setPyramidLevels(const unsigned int &pL)
virtual void setMinPolygonAreaThresh(const double minPolygonAreaThresh, const std::string &name="")
virtual void computeVVSInit()
Manage a circle used in the model-based tracker.
void insert(const vpMatrix &A, const unsigned int r, const unsigned int c)
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.
Implementation of a polygon of the model used by the model-based tracker.
double getNearClippingDistance() const
void initMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &_cMo)
void computeInteractionMatrixAndResidu(const vpHomogeneousMatrix &cMc0, vpColVector &_R, vpMatrix &_J)
void displayPrimitive(const vpImage< unsigned char > &_I)
void setWindowSize(const unsigned int &w)
bool useScanLine
Use Scanline for visibility tests.
vpVelocityTwistMatrix buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
double getFarClippingDistance() const
static double sqr(double x)
double minLineLengthThresholdGeneral
Minimum line length threshold for LOD mode (general setting)
vpColVector w_klt
Robust weights for KLT.
void setAngleDisappear(const double &adisappear)
vpColVector error
The error vector.
virtual void initFaceFromCorners(vpMbtPolygon &polygon)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
virtual void track(const vpImage< unsigned char > &I)
unsigned int maskBorder
Erosion of the mask.
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, const unsigned int thickness=1, const bool displayFullModel=false)
Generic class defining intrinsic camera parameters.
void cleanPyramid(std::vector< const vpImage< unsigned char > *> &_pyramid)
void computeInteractionMatrixError(const vpHomogeneousMatrix &cMo)
Implementation of a polygon of the model containing points of interest. It is used by the model-based...
double m_initialMu
Initial Mu for Levenberg Marquardt optimization loop.
vpMbtMeLine * meline1
The moving edge containers (first line of the cylinder)
double m_lambda
Gain of the virtual visual servoing stage.
void setHarrisParam(const double &hp)
void setMinDistance(const double &mD)
void setCameraParameters(const vpCameraParameters &_cam)
double angleAppears
Angle used to detect a face appearance.
vpKltOpencv tracker
Points tracker.
virtual bool isVisible(const vpHomogeneousMatrix &cMo, const double alpha, const bool &modulo=false, const vpCameraParameters &cam=vpCameraParameters(), const vpImage< unsigned char > &I=vpImage< unsigned char >())
void setPyramidLevels(const int pyrMaxLevel)
void setState(const vpMeSiteState &flag)
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
static double rad(double deg)
virtual void setMinLineLengthThresh(const double minLineLengthThresh, const std::string &name="")
void setMeanWeight1(const double wmean)
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.
virtual void initFaceFromLines(vpMbtPolygon &polygon)
unsigned int getCurrentNumberPoints() const
void setMaxFeatures(const unsigned int &mF)
void computeHomography(const vpHomogeneousMatrix &_cTc0, vpHomography &cHc0)
virtual void initCylinder(const vpPoint &p1, const vpPoint &p2, const double radius, const int idFace=0, const std::string &name="")
bool closeToImageBorder(const vpImage< unsigned char > &I, const unsigned int threshold)
std::list< vpMbtDistanceCircle * > circles_disp
Vector of the circles used here only to display the full model.
void setWindowSize(const int winSize)
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
virtual void initCylinder(const vpPoint &, const vpPoint &, const double r, const int idFace, const std::string &name="")
double getMinDistance() const
void setCameraParameters(const vpCameraParameters &cam)
void preTracking(const vpImage< unsigned char > &I)
virtual unsigned int getNbPolygon() const
double getMinPolygonAreaThreshold() const
bool applyLodSettingInConfig
Implementation of column vector and the associated operations.
void setAngleAppear(const double &aappear)
void computeInteractionMatrixError(const vpHomogeneousMatrix &cMo)
vpColVector m_error_hybrid
(s - s*)
double getHarrisParam() const
virtual void initCircle(const vpPoint &p1, const vpPoint &p2, const vpPoint &p3, const double radius, const int idFace=0, const std::string &name="")
unsigned int initMbtTracking(const unsigned int level=0)
virtual void computeVVSPoseEstimation(const bool isoJoIdentity_, const 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)
bool hasFarClippingDistance() const
unsigned int trackFirstLoop(const vpImage< unsigned char > &I, vpColVector &factor, const unsigned int lvl=0)
vpMbHiddenFaces< vpMbtPolygon > * hiddenface
Pointer to the list of faces.
void setBlockSize(const int blockSize)
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)
void setMeanWeight(const double _wmean)
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.
bool postTracking(const vpImage< unsigned char > &I, vpColVector &w_mbt, vpColVector &w_klt, const unsigned int lvl=0)
void setMeanWeight(const double w_mean)
vpColVector error
The error vector.
std::vector< std::list< vpMbtDistanceLine * > > lines
unsigned int getPyramidLevels() const
void reInitModel(const vpImage< unsigned char > &I, const std::string &cad_name, const vpHomogeneousMatrix &cMo_, const bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
double getQuality() const
bool Reinit
Indicates if the line has to be reinitialized.
virtual void init(const vpImage< unsigned char > &I)
double getMinLineLengthThreshold() const
std::vector< vpMbtMeLine * > meline
The moving edge container.
void setBlockSize(const unsigned int &bs)
unsigned int clippingFlag
Flags specifying which clipping to used.
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 setThreshold(const double noise_threshold)
void resize(unsigned int n_data)
Resize containers for sort methods.
vpMbtMeLine * meline2
The moving edge containers (second line of the cylinder)
virtual void computeVVSInteractionMatrixAndResidu()
unsigned int getWidth() const
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)
std::vector< unsigned int > nbFeature
The number of moving edges.
void computeInteractionMatrixError(const vpHomogeneousMatrix &cMo, const vpImage< unsigned char > &I)
void initInteractionMatrixError()
virtual void computeVVSCheckLevenbergMarquardt(const 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)
std::list< vpMbtDistanceKltPoints * > kltPolygons
void setMovingEdge(const vpMe &_ecm)
bool isoJoIdentity
Boolean to know if oJo is identity (for fast computation)
void setMaskBorder(const unsigned int &mb)
void computeInteractionMatrixAndResidu(vpColVector &_R, vpMatrix &_J)
vpHomogeneousMatrix c0Mo
Initial pose.
double thresholdMBT
The threshold used in the robust estimation of MBT.
virtual void setNearClippingDistance(const double &dist)
virtual void setPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cdMo)
void resize(const unsigned int i, const bool flagNullify=true)
virtual void setLod(const bool useLod, const std::string &name="")
void parse(const std::string &filename)
void computeFov(const unsigned int &w, const unsigned int &h)