40 #include <visp3/core/vpConfig.h> 50 #include <visp3/core/vpMeterPixelConversion.h> 51 #include <visp3/core/vpPixelMeterConversion.h> 52 #include <visp3/core/vpPlane.h> 53 #include <visp3/mbt/vpMbtDistanceCircle.h> 54 #include <visp3/vision/vpPose.h> 55 #include <visp3/visual_features/vpFeatureBuilder.h> 56 #include <visp3/visual_features/vpFeatureEllipse.h> 62 : name(), index(0), cam(), me(NULL), wmean(1), featureEllipse(), isTrackedCircle(true), meEllipse(NULL), circle(NULL),
63 radius(0.), p1(NULL), p2(NULL), p3(NULL), L(), error(), nbFeature(0), Reinit(false), hiddenface(NULL),
64 index_polygon(-1), isvisible(false)
158 std::cout <<
"Problem when projecting circle\n";
172 double mu20_p, mu11_p, mu02_p;
174 meEllipse->initTracking(I, ic, mu20_p, mu11_p, mu02_p, doNotTrack);
222 std::cout <<
"Problem when projecting circle\n";
228 double mu20_p, mu11_p, mu02_p;
230 meEllipse->updateParameters(I, ic, mu20_p, mu11_p, mu02_p);
274 const bool displayFullModel)
276 if ((
isvisible && isTrackedCircle) || displayFullModel) {
283 std::cout <<
"Cannot project the circle";
287 double mu20_p, mu11_p, mu02_p;
306 const bool displayFullModel)
308 if ((
isvisible && isTrackedCircle) || displayFullModel) {
315 std::cout <<
"Cannot project the circle";
319 double mu20_p, mu11_p, mu02_p;
373 std::cout <<
"Problem projection circle\n";
392 for (std::list<vpMeSite>::const_iterator it =
meEllipse->getMeList().begin(); it !=
meEllipse->getMeList().end();
395 H[0] = 2 * (mu11 * (y - yg) + mu02 * (xg - x));
396 H[1] = 2 * (mu20 * (yg - y) + mu11 * (x - xg));
398 H[3] = 2 * (yg * (x - xg) + y * xg + mu11 - x * y);
401 for (
unsigned int k = 0; k < 6; k++)
402 L[j][k] = H[0] * H1[0][k] + H[1] * H1[1][k] + H[2] * H1[2][k] + H[3] * H1[3][k] + H[4] * H1[4][k];
406 2 * mu11 * xg * yg +
vpMath::sqr(mu11) - mu20 * mu02;
unsigned int getRange() const
Implementation of a matrix and operations on matrices.
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)
unsigned int nbFeature
The number of moving edges.
static void convertEllipse(const vpCameraParameters &cam, const vpSphere &sphere, vpImagePoint ¢er, double &mu20_p, double &mu11_p, double &mu02_p)
vpPoint * p3
An other point on the plane containing the circle.
void changeFrame(const vpHomogeneousMatrix &cMo, vpColVector &cP)
perspective projection of the circle
#define vpDEBUG_ENABLE(level)
Implementation of an homogeneous matrix and operations on such kind of matrices.
Implementation of row vector and the associated operations.
vpMatrix L
The interaction matrix.
void resize(const unsigned int nrows, const unsigned int ncols, const bool flagNullify=true, const bool recopy_=true)
Class to define colors available for display functionnalities.
vpColVector error
The error vector.
double get_oY() const
Get the point Y coordinate in the object frame.
void buildFrom(const vpPoint &_p1, const vpPoint &_p2, const vpPoint &_p3, const double r)
vpMbtMeEllipse * meEllipse
The moving edge containers.
static void convertPoint(const vpCameraParameters &cam, const double &u, const double &v, double &x, double &y)
vpPoint * p2
A point on the plane containing the circle.
static void flush(const vpImage< unsigned char > &I)
Class that defines what is a point.
bool Reinit
Indicates if the circle has to be reinitialized.
bool isvisible
Indicates if the circle is visible or not.
static double sqr(double x)
bool initMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const bool doNotTrack, const vpImage< bool > *mask=NULL)
void trackMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo)
Generic class defining intrinsic camera parameters.
virtual ~vpMbtDistanceCircle()
void computeInteractionMatrixError(const vpHomogeneousMatrix &cMo)
double get_oZ() const
Get the point Z coordinate in the object frame.
void updateMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo)
vpCircle * circle
The circle to track.
void displayMovingEdges(const vpImage< unsigned char > &I)
void setMovingEdge(vpMe *Me)
double get_oX() const
Get the point X coordinate in the object frame.
void initInteractionMatrixError()
vpMatrix interaction(const unsigned int select=FEATURE_ALL)
compute the interaction matrix from a subset a the possible features
void reinitMovingEdge(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpImage< bool > *mask=NULL)
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
This class defines the container for a plane geometrical structure.
static void create(vpFeaturePoint &s, const vpCameraParameters &cam, const vpDot &d)
double radius
The radius of the circle.
Class that defines what is a circle.
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)
vpPoint * p1
The center of the circle.
void setWorldCoordinates(const vpColVector &oP)
void resize(const unsigned int i, const bool flagNullify=true)