Visual Servoing Platform  version 3.5.1 under development (2023-09-22)

#include <visp3/me/vpMeNurbs.h>

+ Inheritance diagram for vpMeNurbs:

Public Member Functions

 vpMeNurbs ()
 
 vpMeNurbs (const vpMeNurbs &menurbs)
 
virtual ~vpMeNurbs ()
 
void setNbControlPoints (unsigned int nb_point)
 
void setEnableCannyDetection (const bool enable_canny)
 
void setCannyThreshold (float th1, float th2)
 
void initTracking (const vpImage< unsigned char > &I)
 
void initTracking (const vpImage< unsigned char > &I, const std::list< vpImagePoint > &ptList)
 
void track (const vpImage< unsigned char > &I)
 
virtual void sample (const vpImage< unsigned char > &I, bool doNotTrack=false)
 
void reSample (const vpImage< unsigned char > &I)
 
void updateDelta ()
 
void setExtremities ()
 
void seekExtremities (const vpImage< unsigned char > &I)
 
void seekExtremitiesCanny (const vpImage< unsigned char > &I)
 
void suppressPoints ()
 
void supressNearPoints ()
 
void localReSample (const vpImage< unsigned char > &I)
 
vpNurbs getNurbs () const
 
void display (const vpImage< unsigned char > &I, const vpColor &color, unsigned int thickness=1)
 
Public Member Functions Inherited from vpTracker
vpColVector get_p () const
 
vpColVector get_cP () const
 

Static Public Member Functions

static void display (const vpImage< unsigned char > &I, vpNurbs &n, const vpColor &color=vpColor::green, unsigned int thickness=1)
 
static void display (const vpImage< vpRGBa > &I, vpNurbs &n, const vpColor &color=vpColor::green, unsigned int thickness=1)
 

Public Attributes

vpNurbs nurbs
 
Public Attributes Inherited from vpMeTracker
std::list< vpMeSitelist
 
vpMeme
 
unsigned int init_range
 
int nGoodElement
 
const vpImage< bool > * m_mask
 
int query_range
 
bool display_point
 
Public Attributes Inherited from vpTracker
vpColVector p
 
vpColVector cP
 
bool cPAvailable
 

Protected Attributes

Protected Attributes Inherited from vpMeTracker
vpMeSite::vpMeSiteDisplayType selectDisplay
 

Public Member Functions Inherited from vpMeTracker

void display (const vpImage< unsigned char > &I)
 
void display (const vpImage< vpRGBa > &I)
 
void display (const vpImage< unsigned char > &I, vpColVector &w, unsigned int &index_w)
 
unsigned int getInitRange ()
 
vpMegetMe ()
 
std::list< vpMeSite > & getMeList ()
 
std::list< vpMeSitegetMeList () const
 
int getNbPoints () const
 
void init ()
 
unsigned int numberOfSignal ()
 
int outOfImage (int i, int j, int half, int row, int cols)
 
int outOfImage (const vpImagePoint &iP, int half, int rows, int cols)
 
void reset ()
 
void setDisplay (vpMeSite::vpMeSiteDisplayType select)
 
void setInitRange (const unsigned int &r)
 
virtual void setMask (const vpImage< bool > &mask)
 
void setMe (vpMe *p_me)
 
void setMeList (const std::list< vpMeSite > &l)
 
unsigned int totalNumberOfSignal ()
 
static bool inMask (const vpImage< bool > *mask, unsigned int i, unsigned int j)
 

Detailed Description

Class that tracks in an image a edge defined by a Nurbs.

The advantage of this class is that it enables to track an edge whose equation is not known in advance. At each iteration, the Nurbs corresponding to the edge is computed.

It is possible to have a direct access to the nurbs. It is indeed a public parameter.

The code below shows how to use this class.

#include <visp3/core/vpImage.h>
#include <visp3/core/vpImagePoint.h>
#include <visp3/me/vpMeNurbs.h>
int main()
{
// Fill the image with a black rectangle
I = 0;
for (int i = 100; i < 180; i ++) {
for (int j = 0; j < 320; j ++) {
I[i][j] = 255;
}
}
// Set the moving-edges tracker parameters
me.setRange(25);
// Initialize the moving-edges tracker parameters
vpMeNurbs meNurbs;
meNurbs.setNbControlPoints(4);
meNurbs.setMe(&me);
// Initialize the location of the edge to track (here a horizontal line
std::list<vpImagePoint> ipList; //List of points belonginig to the edge
ipList.push_back(vpImagePoint(110,119));
ipList.push_back(vpImagePoint(140,119));
ipList.push_back(vpImagePoint(160,119));
ipList.push_back(vpImagePoint(170,119));
meNurbs.initTracking(I, ipList);
while ( 1 )
{
// ... Here the code to read or grab the next image.
// Track the line.
meNurbs.track(I);
}
return 0;
}
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition: vpImagePoint.h:82
Class that tracks in an image a edge defined by a Nurbs.
Definition: vpMeNurbs.h:129
void track(const vpImage< unsigned char > &I)
Definition: vpMeNurbs.cpp:854
void initTracking(const vpImage< unsigned char > &I)
Definition: vpMeNurbs.cpp:224
void setNbControlPoints(unsigned int nb_point)
Definition: vpMeNurbs.h:178
void setMe(vpMe *p_me)
Definition: vpMeTracker.h:259
vpMe * me
Moving edges initialisation parameters.
Definition: vpMeTracker.h:74
Definition: vpMe.h:122
void setSampleStep(const double &s)
Definition: vpMe.h:390
void setRange(const unsigned int &r)
Definition: vpMe.h:383
void setLikelihoodThresholdType(const vpLikelihoodThresholdType likelihood_threshold_type)
Definition: vpMe.h:445
void setPointsToTrack(const int &n)
Definition: vpMe.h:376
@ NORMALIZED_THRESHOLD
Easy-to-use normalized likelihood threshold corresponding to the minimal luminance contrast to consid...
Definition: vpMe.h:132
void setThreshold(const double &t)
Definition: vpMe.h:435
Note
It is possible to display the nurbs as an overlay. For that you must use the display function of the class vpMeNurbs.
In case of an edge which is not smooth, it can be interesting to use the canny detection to find the extremities. In this case, use the method setEnableCannyDetection to enable it.
Warning
: This function requires OpenCV.
Examples
trackMeNurbs.cpp.

Definition at line 128 of file vpMeNurbs.h.

Constructor & Destructor Documentation

◆ vpMeNurbs() [1/2]

vpMeNurbs::vpMeNurbs ( )

Basic constructor that calls the constructor of the class vpMeTracker.

Definition at line 204 of file vpMeNurbs.cpp.

◆ vpMeNurbs() [2/2]

vpMeNurbs::vpMeNurbs ( const vpMeNurbs menurbs)

Copy constructor.

Definition at line 209 of file vpMeNurbs.cpp.

◆ ~vpMeNurbs()

vpMeNurbs::~vpMeNurbs ( )
virtual

Destructor.

Definition at line 222 of file vpMeNurbs.cpp.

Member Function Documentation

◆ display() [1/6]

void vpMeTracker::display ( const vpImage< unsigned char > &  I)
inherited

Display the moving edge sites with a color corresponding to their state.

  • If green : The vpMeSite is a good point.
  • If blue : The point is removed because of the vpMeSite tracking phase (contrast problem).
  • If purple : The point is removed because of the vpMeSite tracking phase (threshold problem).
  • If red : The point is removed because of the robust method in the virtual visual servoing (M-Estimator problem).
  • If cyan : The point is removed because it's too close to another.
  • Yellow otherwise.
Parameters
I: The image.

Definition at line 229 of file vpMeTracker.cpp.

References vpMeSite::display(), and vpMeTracker::list.

Referenced by vpMeTracker::display(), vpMeEllipse::initTracking(), vpMeEllipse::track(), and vpMeLine::track().

◆ display() [2/6]

void vpMeNurbs::display ( const vpImage< unsigned char > &  I,
const vpColor color,
unsigned int  thickness = 1 
)

Display edge.

Warning
To effectively display the edge a call to vpDisplay::flush() is needed.
Parameters
I: Image in which the edge appears.
color: Color of the displayed line.
thickness: Drawings thickness.
Examples
trackMeNurbs.cpp.

Definition at line 900 of file vpMeNurbs.cpp.

References nurbs.

◆ display() [3/6]

void vpMeTracker::display ( const vpImage< unsigned char > &  I,
vpColVector w,
unsigned int &  index_w 
)
inherited

Displays the status of moving edge sites

Parameters
I: The image.
w: vector
index_w: index

Definition at line 245 of file vpMeTracker.cpp.

References vpMeTracker::display(), vpMeSite::getState(), vpMeTracker::list, vpMeSite::NO_SUPPRESSION, and vpMeSite::weight.

◆ display() [4/6]

void vpMeNurbs::display ( const vpImage< unsigned char > &  I,
vpNurbs n,
const vpColor color = vpColor::green,
unsigned int  thickness = 1 
)
static

Display of a moving nurbs.

Parameters
I: The image used as background.
n: Nurbs to display
color: Color used to display the nurbs.
thickness: Drawings thickness.

Definition at line 1119 of file vpMeNurbs.cpp.

References vpNurbs::computeCurvePoint(), and vpDisplay::displayCross().

◆ display() [5/6]

void vpMeTracker::display ( const vpImage< vpRGBa > &  I)
inherited

Display the moving edge sites with a color corresponding to their state.

  • If green : The vpMeSite is a good point.
  • If blue : The point is removed because of the vpMeSite tracking phase (contrast problem).
  • If purple : The point is removed because of the vpMeSite tracking phase (threshold problem).
  • If red : The point is removed because of the robust method in the virtual visual servoing (M-Estimator problem).
  • If cyan : The point is removed because it's too close to another.
  • Yellow otherwise.
Parameters
I: The image.

Definition at line 237 of file vpMeTracker.cpp.

References vpMeSite::display(), and vpMeTracker::list.

◆ display() [6/6]

void vpMeNurbs::display ( const vpImage< vpRGBa > &  I,
vpNurbs n,
const vpColor color = vpColor::green,
unsigned int  thickness = 1 
)
static

Display of a moving nurbs.

Parameters
I: The image used as background.
n: Nurbs to display
color: Color used to display the nurbs.
thickness: Drawings thickness.

Definition at line 1130 of file vpMeNurbs.cpp.

References vpNurbs::computeCurvePoint(), and vpDisplay::displayCross().

◆ get_cP()

vpColVector vpTracker::get_cP ( ) const
inlineinherited

Return object parameters expressed in the 3D camera frame.

Definition at line 94 of file vpTracker.h.

◆ get_p()

vpColVector vpTracker::get_p ( ) const
inlineinherited

Return object parameters expressed in the 2D image plane computed by perspective projection.

Definition at line 92 of file vpTracker.h.

◆ getInitRange()

unsigned int vpMeTracker::getInitRange ( )
inlineinherited

Return the initial range.

Returns
Value of init_range.

Definition at line 161 of file vpMeTracker.h.

◆ getMe()

vpMe* vpMeTracker::getMe ( )
inlineinherited

Return the moving edges initialisation parameters.

Returns
Moving Edges.
Examples
trackMeCircle.cpp, and trackMeEllipse.cpp.

Definition at line 168 of file vpMeTracker.h.

◆ getMeList() [1/2]

std::list<vpMeSite>& vpMeTracker::getMeList ( )
inlineinherited

Return the list of moving edges

Returns
List of Moving Edges.

Definition at line 175 of file vpMeTracker.h.

◆ getMeList() [2/2]

std::list<vpMeSite> vpMeTracker::getMeList ( ) const
inlineinherited

Return the list of moving edges

Returns
List of Moving Edges.

Definition at line 182 of file vpMeTracker.h.

◆ getNbPoints()

int vpMeTracker::getNbPoints ( ) const
inlineinherited

Return the number of points that has not been suppressed.

Returns
Number of good points.

Definition at line 189 of file vpMeTracker.h.

◆ getNurbs()

vpNurbs vpMeNurbs::getNurbs ( ) const
inline

Gets the nurbs;

Definition at line 307 of file vpMeNurbs.h.

◆ init()

void vpMeTracker::init ( void  )
inherited

Initialize the tracker.

Definition at line 50 of file vpMeTracker.cpp.

References vpTracker::init(), vpMeSite::NONE, vpTracker::p, vpColVector::resize(), and vpMeTracker::selectDisplay.

Referenced by vpMeTracker::vpMeTracker().

◆ initTracking() [1/2]

void vpMeNurbs::initTracking ( const vpImage< unsigned char > &  I)

Initialization of the tracking. Ask the user to click left on several points along the edge to track and click right at the end.

Parameters
I: Image in which the edge appears.
Examples
trackMeNurbs.cpp.

Definition at line 224 of file vpMeNurbs.cpp.

References vpMouseButton::button1, vpMouseButton::button3, vpDisplay::displayCross(), vpDisplay::flush(), vpDisplay::getClick(), vpColor::green, and vpException::notInitialized.

◆ initTracking() [2/2]

void vpMeNurbs::initTracking ( const vpImage< unsigned char > &  I,
const std::list< vpImagePoint > &  ptList 
)

Initialization of the tracking. The Nurbs is initialized thanks to the list of vpImagePoint.

Parameters
I: Image in which the edge appears.
ptList: List of point to initialize the Nurbs.

Definition at line 246 of file vpMeNurbs.cpp.

References vpNurbs::globalCurveInterp(), vpMeTracker::initTracking(), nurbs, sample(), and track().

◆ inMask()

bool vpMeTracker::inMask ( const vpImage< bool > *  mask,
unsigned int  i,
unsigned int  j 
)
staticinherited

Test whether the pixel is inside the mask. Mask values that are set to true are considered in the tracking.

Parameters
maskMask image or NULL if not wanted. Mask values that are set to true are considered in the tracking. To disable a pixel, set false.
i: Pixel coordinate along the rows.
j: Pixel coordinate along the columns.

Definition at line 123 of file vpMeTracker.cpp.

References vpImage< Type >::getValue().

Referenced by vpMbtFaceDepthDense::computeDesiredFeatures(), vpMbtFaceDepthNormal::computeDesiredFeatures(), vpMbtDistanceKltPoints::computeNbDetectedCurrent(), vpMbtDistanceKltPoints::init(), and vpMeTracker::track().

◆ localReSample()

◆ numberOfSignal()

unsigned int vpMeTracker::numberOfSignal ( )
inherited

Return number of moving-edges that are tracked.

Definition at line 112 of file vpMeTracker.cpp.

References vpMeTracker::list.

Referenced by vpMeLine::leastSquare(), vpMeEllipse::leastSquareRobust(), localReSample(), vpMeLine::reSample(), and reSample().

◆ outOfImage() [1/2]

int vpMeTracker::outOfImage ( const vpImagePoint iP,
int  half,
int  rows,
int  cols 
)
inherited

Check if a pixel i,j is out of the image.

Definition at line 138 of file vpMeTracker.cpp.

References vpImagePoint::get_i(), vpImagePoint::get_j(), and vpMath::round().

◆ outOfImage() [2/2]

int vpMeTracker::outOfImage ( int  i,
int  j,
int  half,
int  row,
int  cols 
)
inherited

Check if a pixel i,j is out of the image.

Definition at line 133 of file vpMeTracker.cpp.

Referenced by localReSample(), vpMeEllipse::plugHoles(), sample(), vpMeEllipse::sample(), vpMeLine::sample(), vpMeLine::seekExtremities(), and seekExtremities().

◆ reSample()

void vpMeNurbs::reSample ( const vpImage< unsigned char > &  I)

Resample the edge if the number of sample is less than 70% of the expected value.

Note
The expected value is computed thanks to the length of the nurbs and the parameter which indicates the number of pixel between two points (vpMe::sample_step).
Parameters
I: Image in which the edge appears.

Definition at line 713 of file vpMeNurbs.cpp.

References vpMe::getSampleStep(), vpMeTracker::initTracking(), vpMeTracker::me, vpMeTracker::numberOfSignal(), and sample().

Referenced by track().

◆ reset()

void vpMeTracker::reset ( )
inherited

Reset the tracker by removing all the moving edges.

Definition at line 88 of file vpMeTracker.cpp.

References vpMeTracker::list, and vpMeTracker::nGoodElement.

Referenced by vpMeTracker::~vpMeTracker().

◆ sample()

void vpMeNurbs::sample ( const vpImage< unsigned char > &  I,
bool  doNotTrack = false 
)
virtual

Construct a list of vpMeSite moving edges at a particular sampling step between the two extremities of the nurbs.

Parameters
I: Image in which the edge appears.
doNotTrack: Inherited parameter, not used.

Implements vpMeTracker.

Definition at line 256 of file vpMeNurbs.cpp.

References vpNurbs::computeCurveDersPoint(), vpImage< Type >::getHeight(), vpMe::getPointsToTrack(), vpMe::getSampleStep(), vpImage< Type >::getWidth(), vpMeSite::init(), vpMeTracker::list, vpMeTracker::me, nurbs, vpMeTracker::outOfImage(), vpMeTracker::selectDisplay, vpMeSite::setDisplay(), vpMath::sqr(), and vpImagePoint::sqrDistance().

Referenced by initTracking(), and reSample().

◆ seekExtremities()

void vpMeNurbs::seekExtremities ( const vpImage< unsigned char > &  I)

◆ seekExtremitiesCanny()

void vpMeNurbs::seekExtremitiesCanny ( const vpImage< unsigned char > &  I)

Seek the extremities of the edge thanks to a canny edge detection. The edge detection enable to find the points belonging to the edge. The any vpMeSite are initialized at this points.

This method is useful when the edge is not smooth.

Note
To use the canny detection, OpenCV has to be installed.
Parameters
I: Image in which the edge appears.

Definition at line 451 of file vpMeNurbs.cpp.

References vpImageFilter::canny(), vpNurbs::computeCurveDersPoint(), vpNurbs::computeCurvePoint(), vpImageTools::crop(), vpDisplay::displayPoint(), vpDisplay::displayRectangle(), vpImagePoint::get_i(), vpImagePoint::get_j(), vpImage< Type >::getHeight(), vpMe::getRange(), vpMe::getSampleStep(), vpImage< Type >::getWidth(), vpColor::green, vpMeSite::ifloat, vpMeSite::init(), vpMeSite::jfloat, vpMeTracker::list, vpMath::maximum(), vpMeTracker::me, nurbs, vpColor::orange, vpMeTracker::selectDisplay, vpMeSite::setDisplay(), vpMe::setRange(), vpMath::sqr(), vpMeSite::sqrDistance(), and vpMeSite::track().

Referenced by track().

◆ setCannyThreshold()

void vpMeNurbs::setCannyThreshold ( float  th1,
float  th2 
)
inline

Enables to set the two thresholds use by the canny detection.

Parameters
th1: The first threshold;
th2: The second threshold;

Definition at line 194 of file vpMeNurbs.h.

◆ setDisplay()

◆ setEnableCannyDetection()

void vpMeNurbs::setEnableCannyDetection ( const bool  enable_canny)
inline

Enables or disables the canny detection used during the extremities search.

Parameters
enable_canny: if true it enables the canny detection.

Definition at line 186 of file vpMeNurbs.h.

◆ setExtremities()

void vpMeNurbs::setExtremities ( )

Seek along the edge defined by the nurbs, the two extremities of the edge. This function is useful in case of translation of the edge.

◆ setInitRange()

void vpMeTracker::setInitRange ( const unsigned int &  r)
inlineinherited

Set the initial range.

Parameters
r: initial range.

Definition at line 245 of file vpMeTracker.h.

◆ setMask()

virtual void vpMeTracker::setMask ( const vpImage< bool > &  mask)
inlinevirtualinherited

Set the mask.

Parameters
mask: Mask.

Definition at line 252 of file vpMeTracker.h.

◆ setMe()

◆ setMeList()

void vpMeTracker::setMeList ( const std::list< vpMeSite > &  l)
inlineinherited

Set the list of moving edges.

Parameters
l: list of Moving Edges.

Definition at line 266 of file vpMeTracker.h.

◆ setNbControlPoints()

void vpMeNurbs::setNbControlPoints ( unsigned int  nb_point)
inline

Sets the number of control points used to compute the Nurbs.

Parameters
nb_point: The number of control points used to compute the Nurbs.
Examples
trackMeNurbs.cpp.

Definition at line 178 of file vpMeNurbs.h.

◆ suppressPoints()

void vpMeNurbs::suppressPoints ( )

Suppression of the points which:

  • belong no more to the edge.
  • which are to closed to another point.

Definition at line 291 of file vpMeNurbs.cpp.

References vpMeSite::getState(), vpMeTracker::list, and vpMeSite::NO_SUPPRESSION.

Referenced by track().

◆ supressNearPoints()

void vpMeNurbs::supressNearPoints ( )

Suppress vpMeSites if they are too close to each other.

The goal is to keep the order of the vpMeSites in the list.

Definition at line 809 of file vpMeNurbs.cpp.

References vpMe::getSampleStep(), vpMeTracker::list, vpMeTracker::me, vpMeSite::setState(), vpMath::sqr(), vpMeSite::sqrDistance(), and vpMeSite::TOO_NEAR.

Referenced by track().

◆ totalNumberOfSignal()

unsigned int vpMeTracker::totalNumberOfSignal ( )
inherited

Return the total number of moving-edges.

Definition at line 121 of file vpMeTracker.cpp.

References vpMeTracker::list.

◆ track()

void vpMeNurbs::track ( const vpImage< unsigned char > &  I)

◆ updateDelta()

void vpMeNurbs::updateDelta ( )

Set the alpha value (normal to the edge at this point) of the different vpMeSite to a value computed thanks to the nurbs.

Definition at line 304 of file vpMeNurbs.cpp.

References vpMeSite::alpha, vpNurbs::computeCurveDersPoint(), vpNurbs::computeCurvePoint(), vpImagePoint::distance(), vpMeSite::i, vpMeSite::j, vpMeTracker::list, and nurbs.

Referenced by track().

Member Data Documentation

◆ cP

◆ cPAvailable

bool vpTracker::cPAvailable
inherited

Flag used to indicate if the feature parameters cP expressed in the camera frame are available.

Definition at line 78 of file vpTracker.h.

Referenced by vpTracker::init(), and vpTracker::operator=().

◆ display_point

bool vpMeTracker::display_point
inherited

Definition at line 288 of file vpMeTracker.h.

Referenced by vpMeTracker::operator=(), and vpMeTracker::vpMeTracker().

◆ init_range

unsigned int vpMeTracker::init_range
inherited

Initial range.

Definition at line 76 of file vpMeTracker.h.

Referenced by vpMeTracker::initTracking(), vpMeTracker::operator=(), and vpMeTracker::vpMeTracker().

◆ list

◆ m_mask

const vpImage<bool>* vpMeTracker::m_mask
inherited

Mask used to disable tracking on a part of image.

Definition at line 80 of file vpMeTracker.h.

Referenced by vpMeTracker::track().

◆ me

◆ nGoodElement

int vpMeTracker::nGoodElement
inherited

Number of good moving-edges that are tracked.

Definition at line 78 of file vpMeTracker.h.

Referenced by vpMeTracker::initTracking(), vpMeTracker::operator=(), vpMeTracker::reset(), vpMeTracker::track(), and vpMeTracker::vpMeTracker().

◆ nurbs

vpNurbs vpMeNurbs::nurbs

The Nurbs which represents the tracked edge.

Definition at line 136 of file vpMeNurbs.h.

Referenced by display(), initTracking(), localReSample(), sample(), seekExtremities(), seekExtremitiesCanny(), track(), and updateDelta().

◆ p

◆ query_range

int vpMeTracker::query_range
inherited

Definition at line 287 of file vpMeTracker.h.

Referenced by vpMeTracker::operator=(), and vpMeTracker::vpMeTracker().

◆ selectDisplay