Visual Servoing Platform
version 3.6.1 under development (2024-10-10)
|
#include <visp3/blob/vpDot2.h>
Public Member Functions | |
vpDot2 () | |
VP_EXPLICIT | vpDot2 (const vpImagePoint &ip) |
vpDot2 (const vpDot2 &twinDot) | |
void | display (const vpImage< unsigned char > &I, vpColor color=vpColor::red, unsigned int thickness=1) const |
vpColVector | get_nij () const |
double | getArea () const |
vpRect | getBBox () const |
vpImagePoint | getCog () const |
double | getDistance (const vpDot2 &distantDot) const |
void | getEdges (std::list< vpImagePoint > &edges_list) const |
std::list< vpImagePoint > | getEdges () const |
double | getEllipsoidBadPointsPercentage () const |
double | getEllipsoidShapePrecision () const |
void | getFreemanChain (std::list< unsigned int > &freeman_chain) const |
double | getGamma () const |
unsigned int | getGrayLevelMin () const |
unsigned int | getGrayLevelMax () const |
double | getGrayLevelPrecision () const |
double | getHeight () const |
double | getMaxSizeSearchDistPrecision () const |
double | getMeanGrayLevel () const |
vpPolygon | getPolygon () const |
double | getSizePrecision () const |
double | getWidth () const |
void | initTracking (const vpImage< unsigned char > &I, unsigned int size=0) |
void | initTracking (const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int size=0) |
void | initTracking (const vpImage< unsigned char > &I, const vpImagePoint &ip, unsigned int gray_lvl_min, unsigned int gray_lvl_max, unsigned int size=0) |
vpDot2 & | operator= (const vpDot2 &twinDot) |
void | print (std::ostream &os) |
void | searchDotsInArea (const vpImage< unsigned char > &I, int area_u, int area_v, unsigned int area_w, unsigned int area_h, std::list< vpDot2 > &niceDots) |
void | searchDotsInArea (const vpImage< unsigned char > &I, std::list< vpDot2 > &niceDots) |
void | setArea (const double &area) |
void | setCog (const vpImagePoint &ip) |
void | setComputeMoments (bool activate) |
void | setEllipsoidBadPointsPercentage (const double &percentage=0.0) |
void | setEllipsoidShapePrecision (const double &ellipsoidShapePrecision) |
void | setGraphics (bool activate) |
void | setGraphicsThickness (unsigned int thickness) |
void | setGrayLevelMin (const unsigned int &min) |
void | setGrayLevelMax (const unsigned int &max) |
void | setGrayLevelPrecision (const double &grayLevelPrecision) |
void | setHeight (const double &height) |
void | setMaxSizeSearchDistPrecision (const double &maxSizeSearchDistancePrecision) |
void | setSizePrecision (const double &sizePrecision) |
void | setWidth (const double &width) |
void | track (const vpImage< unsigned char > &I, bool canMakeTheWindowGrow=true) |
void | track (const vpImage< unsigned char > &I, vpImagePoint &cog, bool canMakeTheWindowGrow=true) |
Public Member Functions Inherited from vpTracker | |
vpColVector | get_p () const |
vpColVector | get_cP () const |
Static Public Member Functions | |
static vpMatrix | defineDots (vpDot2 dot[], const unsigned int &n, const std::string &dotFile, vpImage< unsigned char > &I, vpColor col=vpColor::blue, bool trackDot=true) |
static void | trackAndDisplay (vpDot2 dot[], const unsigned int &n, vpImage< unsigned char > &I, std::vector< vpImagePoint > &cogs, vpImagePoint *cogStar=nullptr) |
static void | display (const vpImage< unsigned char > &I, const vpImagePoint &cog, const std::list< vpImagePoint > &edges_list, vpColor color=vpColor::red, unsigned int thickness=1) |
static void | display (const vpImage< vpRGBa > &I, const vpImagePoint &cog, const std::list< vpImagePoint > &edges_list, vpColor color=vpColor::red, unsigned int thickness=1) |
Public Attributes | |
Public Attributes Inherited from vpTracker | |
vpColVector | p |
vpColVector | cP |
bool | cPAvailable |
Friends | |
VISP_EXPORT std::ostream & | operator<< (std::ostream &os, vpDot2 &d) |
This tracker is meant to track a blob (connex pixels with same gray level) on a vpImage.
The underground algorithm is based on a binarization of the image and then on a contour detection using the Freeman chain coding to determine the blob characteristics (location, moments, size...).
The binarization is done using gray level minimum and maximum values that define the admissible gray levels of the blob. You can specify these levels by setGrayLevelMin() and setGrayLevelMax(). These levels are also set automatically by setGrayLevelPrecision(). The algorithm allows to track white objects on a black background and vice versa.
When a blob is found, some tests are done to see if it is valid:
Note that track() and searchDotsInArea() are the most important features of this class.
The following sample code available in tutorial-blob-tracker-live-firewire.cpp shows how to grab images from a firewire camera, track a blob and display the tracking results.
A line by line explanation of the previous example is provided in Tutorial: Blob tracking.
This other example available in tutorial-blob-auto-tracker.cpp shows firstly how to detect in the first image all the blobs that match some characteristics in terms of size, area, gray level. Secondly, it shows how to track all the dots that are detected.
A line by line explanation of this last example is also provided in Tutorial: Blob tracking, section Blob tracking.
vpDot2::vpDot2 | ( | ) |
Default constructor. Just do basic default initialization.
Definition at line 110 of file vpDot2.cpp.
vpDot2::vpDot2 | ( | const vpImagePoint & | ip | ) |
Constructor initialize the coordinates of the gravity center of the dot to the image point ip. Rest is the same as the default constructor.
ip | : An image point with sub-pixel coordinates. |
Definition at line 131 of file vpDot2.cpp.
vpDot2::vpDot2 | ( | const vpDot2 & | twinDot | ) |
Copy constructor.
Definition at line 147 of file vpDot2.cpp.
|
static |
Define a number of dots from a file. If the file does not exist, define it by clicking an image, the dots are then saved into the file.
If the dots from the file cannot be tracked in the image, will ask to click them.
dot | : dot2 array |
n | : number of dots, array dimension |
dotFile | : path for the file |
I | : image |
col | : color to print the dots (default Blue) |
trackDot | : if true, tracks the dots in the image, if false simply loads the coordinates (default true) |
Definition at line 1714 of file vpDot2.cpp.
References vpIoTools::checkFilename(), vpDisplay::display(), vpDisplay::displayCross(), vpDisplay::flush(), vpImagePoint::get_u(), vpImagePoint::get_v(), vpDisplay::getClick(), getCog(), getDistance(), getHeight(), vpArray2D< Type >::getRows(), getWidth(), initTracking(), vpMatrix::loadMatrix(), vpMatrix::saveMatrix(), vpImagePoint::set_uv(), setCog(), setGraphics(), vpMath::sqr(), and track().
|
static |
Display the dot center of gravity and its list of edges.
I | : The image used as background. |
cog | : The center of gravity. |
edges_list | : The list of edges; |
color | : Color used to display the dot. |
thickness | : Thickness of the dot. |
Definition at line 1867 of file vpDot2.cpp.
References vpDisplay::displayCross(), and vpDisplay::displayPoint().
void vpDot2::display | ( | const vpImage< unsigned char > & | I, |
vpColor | color = vpColor::red , |
||
unsigned int | t = 1 |
||
) | const |
Display in overlay the dot edges and center of gravity.
I | : Image. |
color | : The color used for the display. |
t | : Thickness of the displayed cross located at the dot cog. |
Definition at line 225 of file vpDot2.cpp.
References vpDisplay::displayCross(), and vpDisplay::displayPoint().
|
static |
Display the dot center of gravity and its list of edges.
I | : The image used as background. |
cog | : The center of gravity. |
edges_list | : The list of edges; |
color | : Color used to display the dot. |
thickness | : Thickness of the dot. |
Definition at line 1896 of file vpDot2.cpp.
References vpDisplay::displayCross(), and vpDisplay::displayPoint().
|
inlineinherited |
Return object parameters expressed in the 3D camera frame.
Definition at line 95 of file vpTracker.h.
|
inline |
|
inlineinherited |
Return object parameters expressed in the 2D image plane computed by perspective projection.
Definition at line 93 of file vpTracker.h.
double vpDot2::getArea | ( | ) | const |
Return the area of the dot.
The area of the dot is also given by .
Definition at line 628 of file vpDot2.cpp.
Referenced by track().
|
inline |
Return the dot bounding box.
Definition at line 166 of file vpDot2.h.
References vpRect::setRect().
|
inline |
Return the location of the dot center of gravity.
Definition at line 181 of file vpDot2.h.
Referenced by defineDots(), getDistance(), searchDotsInArea(), track(), and trackAndDisplay().
double vpDot2::getDistance | ( | const vpDot2 & | distantDot | ) | const |
Return the distance between the two center of dots.
Definition at line 664 of file vpDot2.cpp.
References vpImagePoint::get_u(), vpImagePoint::get_v(), and getCog().
Referenced by defineDots().
|
inline |
|
inline |
|
inline |
Get the percentage of sampled points that are considered non conform in terms of the gray level on the inner and the outside ellipses.
double vpDot2::getEllipsoidShapePrecision | ( | ) | const |
Return the precision of the ellipsoid shape of the dot. It is a double precision float which value is in [0,1]. 1 means full precision, whereas values close to 0 show a very bad precision.
Definition at line 651 of file vpDot2.cpp.
BEGIN_VISP_NAMESPACE void vpDot2::getFreemanChain | ( | std::list< unsigned int > & | freeman_chain | ) | const |
Gets the list of Freeman chain code used to turn around the dot counterclockwise.
[out] | freeman_chain | : List of Freeman chain list [0, ..., 7]
|
Definition at line 139 of file vpDot2_freeman.cpp.
|
inline |
Return the color level of pixels inside the dot.
|
inline |
Return the color level of pixels inside the dot.
double vpDot2::getGrayLevelPrecision | ( | ) | const |
Return the precision of the gray level of the dot. It is a double precision float which value is in [0,1]. 1 means full precision, whereas values close to 0 show a very bad precision.
Definition at line 635 of file vpDot2.cpp.
double vpDot2::getHeight | ( | ) | const |
Return the height of the dot.
Definition at line 621 of file vpDot2.cpp.
Referenced by defineDots(), searchDotsInArea(), and track().
double vpDot2::getMaxSizeSearchDistPrecision | ( | ) | const |
Return the precision of the search maximum distance to get the starting point on a dot border. It is a double precision float which value is in [0.05,1]. 1 means full precision, whereas values close to 0 show a very bad precision.
Definition at line 659 of file vpDot2.cpp.
|
inline |
|
inline |
double vpDot2::getSizePrecision | ( | ) | const |
Return the precision of the size of the dot. It is a double precision float which value is in [0.05,1]. 1 means full precision, whereas values close to 0 show a very bad precision.
Definition at line 642 of file vpDot2.cpp.
double vpDot2::getWidth | ( | ) | const |
Return the width of the dot.
Definition at line 614 of file vpDot2.cpp.
Referenced by defineDots(), searchDotsInArea(), and track().
void vpDot2::initTracking | ( | const vpImage< unsigned char > & | I, |
const vpImagePoint & | ip, | ||
unsigned int | gray_lvl_min, | ||
unsigned int | gray_lvl_max, | ||
unsigned int | size = 0 |
||
) |
Initialize the tracking for a dot supposed to be located at (u,v) and update the dot characteristics (center of gravity, moments) by a call to track().
The sub pixel coordinates of the dot are updated. To get the center of gravity coordinates of the dot, use getCog(). To compute the moments use setComputeMoments(true) before a call to initTracking().
I | : Image to process. |
ip | : Location of the starting point from which the dot will be tracked in the image. |
gray_lvl_min | : Minimum gray level threshold used to segment the dot; value comprised between 0 and 255. |
gray_lvl_max | : Maximum gray level threshold used to segment the dot; value comprised between 0 and 255. gray_level_max should be greater than gray_level_min. |
size | : Size of the dot to track. |
If no valid dot was found in the window, return an exception.
vpTrackingException::featureLostError | : If the dot initialization failed. The initialization can fail if the following characteristics are not valid;
|
Definition at line 397 of file vpDot2.cpp.
References setHeight(), setWidth(), and track().
void vpDot2::initTracking | ( | const vpImage< unsigned char > & | I, |
const vpImagePoint & | ip, | ||
unsigned int | size = 0 |
||
) |
Initialize the tracking for a dot supposed to be located at (u,v) and update the dot characteristics (center of gravity, moments) by a call to track().
I | : Image to process. |
ip | : Location of the starting point from which the dot will be tracked in the image. |
size | : Size of the dot to track. |
To get center of gravity of the dot, see getCog(). To compute the moments see setComputeMoments().
If no valid dot was found in the window, return an exception.
vpTrackingException::featureLostError | : If the dot initialization failed. The initialization can fail if the following characteristics are not valid;
|
Definition at line 328 of file vpDot2.cpp.
References vpImagePoint::get_i(), vpImagePoint::get_j(), setHeight(), setWidth(), and track().
void vpDot2::initTracking | ( | const vpImage< unsigned char > & | I, |
unsigned int | size = 0 |
||
) |
Initialize the tracking with a mouse click on the image and update the dot characteristics (center of gravity, moments) by a call to track().
Wait a user click in a white area in the image. The clicked pixel will be the starting point from which the dot will be tracked.
To get center of gravity of the dot, see getCog(). To compute the moments see setComputeMoments(). To get the width or height of the dot, call getWidth() and getHeight(). The area of the dot is given by getArea().
I | : Image. |
size | : Size of the dot to track. |
If no valid dot was found in the window, return an exception.
vpTrackingException::featureLostError | : If the dot initialization failed. The initialization can fail if the following characteristics are not valid;
|
Definition at line 269 of file vpDot2.cpp.
References vpImagePoint::get_i(), vpImagePoint::get_j(), vpDisplay::getClick(), setHeight(), setWidth(), and track().
Referenced by defineDots().
= operator.
Definition at line 165 of file vpDot2.cpp.
void vpDot2::searchDotsInArea | ( | const vpImage< unsigned char > & | I, |
int | area_u, | ||
int | area_v, | ||
unsigned int | area_w, | ||
unsigned int | area_h, | ||
std::list< vpDot2 > & | niceDots | ||
) |
Look for a list of dot matching this dot parameters within a region of interest defined by a rectangle in the image. The rectangle upper-left coordinates are given by (area_u, area_v). The size of the rectangle is given by area_w and area_h.
I | : Image to process. |
area_u | : Coordinate (column) of the upper-left area corner. |
area_v | : Coordinate (row) of the upper-left area corner. |
area_w | : Width or the area in which a dot is searched. |
area_h | : Height or the area in which a dot is searched. |
niceDots | List of the dots that are found. |
Definition at line 224 of file vpDot2_search.cpp.
References vpColor::blue, vpDisplay::displayRectangle(), vpDisplay::flush(), vpImagePoint::get_u(), vpImagePoint::get_v(), vpRect::getBottom(), getCog(), getHeight(), vpRect::getLeft(), vpRect::getRight(), vpRect::getTop(), getWidth(), and setArea().
Referenced by searchDotsInArea(), and track().
void vpDot2::searchDotsInArea | ( | const vpImage< unsigned char > & | I, |
std::list< vpDot2 > & | niceDots | ||
) |
Look for a list of dot matching this dot parameters within the entire image.
I | : Image. |
niceDots | List of the dots that are found. |
Before calling this method, dot characteristics to found have to be set like:
To search dots in the whole image:
The number of dots found in the area is given by:
To parse all the dots:
Definition at line 957 of file vpDot2.cpp.
References vpImage< Type >::getHeight(), vpImage< Type >::getWidth(), and searchDotsInArea().
void vpDot2::setArea | ( | const double & | a | ) |
Set the area of the dot. This is meant to be used to search a dot in a region of interest.
a | : Area of a dot to search in a region of interest. |
Definition at line 707 of file vpDot2.cpp.
Referenced by searchDotsInArea(), and track().
|
inline |
Initialize the dot coordinates with ip.
Definition at line 261 of file vpDot2.h.
Referenced by defineDots(), and track().
|
inline |
Activates the dot's moments computation.
activate | true, if you want to compute the moments. If false, moments are not computed. |
Computed moment are vpDot::m00, vpDot::m10, vpDot::m01, vpDot::m11, vpDot::m20, vpDot::m02 and second order centered moments vpDot::mu11, vpDot::mu20, vpDot::mu02 computed with respect to the blob centroid.
The coordinates of the region's centroid (u, v) can be computed from the moments by and .
|
inline |
Set the percentage of sampled points that are considered non conform in terms of the gray level on the inner and the outside ellipses. Points located on the inner ellipse should have the same gray level than the blob, while points located on the outside ellipse should have a different gray level.
percentage | : Percentage of points sampled with bad gray level on the inner and outside ellipses that are admissible. 0 means that all the points should have a right level, while a value of 1 means that all the points can have a bad gray level. |
void vpDot2::setEllipsoidShapePrecision | ( | const double & | precision | ) |
Indicates if the dot should have an ellipsoid shape to be valid.
precision | : It is a double precision float which value is in [0,1]: |
The following example show how to track a blob with a height constraint on an ellipsoid shape. The tracking will fail if the shape is not ellipsoid.
This other example shows how to remove any constraint on the shape. Here the tracker will be able to track any shape, including square or rectangular shapes.
Definition at line 801 of file vpDot2.cpp.
|
inline |
Activates the display of the border of the dot during the tracking. The default thickness of the overlayed drawings can be modified using setGraphicsThickness().
activate | If true, the border of the dot will be painted. false to turn off border painting. |
Definition at line 318 of file vpDot2.h.
Referenced by defineDots().
|
inline |
Modify the default thickness that is set to 1 of the drawings in overlay when setGraphics() is enabled.
|
inline |
Set the color level of pixels surrounding the dot. This is meant to be used to search a dot in a region of interest.
max | : Intensity level of a dot to search in a region of interest. |
|
inline |
Set the color level of the dot to search a dot in a region of interest. This level will be used to know if a pixel in the image belongs to the dot or not. Only pixels with higher level can belong to the dot. If the level is lower than the minimum level for a dot, set the level to MIN_IN_LEVEL.
min | : Color level of a dot to search in a region of interest. |
void vpDot2::setGrayLevelPrecision | ( | const double & | precision | ) |
Set the precision of the gray level of the dot.
precision | : It is a double precision float which value is in [0.05,1]:
|
Definition at line 726 of file vpDot2.cpp.
void vpDot2::setHeight | ( | const double & | h | ) |
Set the height of the dot. This is meant to be used to search a dot in an area.
h | : Height of a dot to search in a region of interest. |
Definition at line 695 of file vpDot2.cpp.
Referenced by initTracking(), and track().
void vpDot2::setMaxSizeSearchDistPrecision | ( | const double & | precision | ) |
Set the precision of the search maximum distance to get the starting point on a dot border. A too low value mean a large search area.
precision | : It is a double precision float which value is in [0.05,1]:
|
Definition at line 830 of file vpDot2.cpp.
void vpDot2::setSizePrecision | ( | const double & | precision | ) |
Set the precision of the size of the dot. Used to test the validity of the dot
precision | : It is a double precision float which value is in [0,1]:
|
Definition at line 756 of file vpDot2.cpp.
void vpDot2::setWidth | ( | const double & | w | ) |
Set the width of the dot. This is meant to be used to search a dot in an area.
w | : Width of a dot to search in a region of interest. |
Definition at line 683 of file vpDot2.cpp.
Referenced by initTracking(), and track().
void vpDot2::track | ( | const vpImage< unsigned char > & | I, |
bool | canMakeTheWindowGrow = true |
||
) |
Try to locate the dot in the image:
I | : Image. |
canMakeTheWindowGrow | if true, the size of the searching area is increased if the blob is not found, otherwise it stays the same. Default value is true. |
vpTrackingException::featureLostError | : If the dot tracking failed. The tracking can fail if the following characteristics are not valid;
|
To get the center of gravity of the dot, call getCog(). To get the width or height of the dot, call getWidth() and getHeight(). The area of the dot is given by getArea().
To compute all the inertia moments associated to the dot see setComputeMoments().
To get the pixels coordinates on the dot boundary, see getList_u() and getList_v().
Definition at line 452 of file vpDot2.cpp.
References vpDisplay::displayCross(), vpTrackingException::featureLostError, vpImagePoint::get_u(), vpImagePoint::get_v(), getArea(), getCog(), getHeight(), getMeanGrayLevel(), getWidth(), vpColor::red, searchDotsInArea(), setArea(), setCog(), setHeight(), and setWidth().
Referenced by defineDots(), initTracking(), track(), and trackAndDisplay().
void vpDot2::track | ( | const vpImage< unsigned char > & | I, |
vpImagePoint & | ip, | ||
bool | canMakeTheWindowGrow = true |
||
) |
Track and get the new dot coordinates. See track() for a more complete description
[in] | I | : Image to process. |
[out] | ip | : Sub pixel coordinate of the tracked dot center of gravity. |
[in] | canMakeTheWindowGrow | : if true, the size of the searching area is increased if the blob is not found, otherwise it stays the same. Default value is true. |
The behavior of this method is similar to the following code:
Definition at line 599 of file vpDot2.cpp.
References track().
|
static |
Tracks a number of dots in an image and displays their trajectories
dot | : dot2 array |
n | : number of dots, array dimension |
I | : image |
cogs | : vector of vpImagePoint that will be updated with the new dots, will be displayed in green |
cogStar | (optional) : array of vpImagePoint indicating the desired position (default nullptr), will be displayed in red |
Definition at line 1823 of file vpDot2.cpp.
References vpColor::blue, vpDisplay::displayCircle(), vpDisplay::displayDotLine(), vpDisplay::flush(), getCog(), vpColor::green, vpColor::red, and track().
|
friend |
Writes the dot center of gravity coordinates in the frame (i,j) (For more details about the orientation of the frame see the vpImagePoint documentation) to the stream os, and returns a reference to the stream.
Definition at line 1914 of file vpDot2.cpp.
|
inherited |
Feature coordinates expressed in the camera frame cP.
Definition at line 73 of file vpTracker.h.
Referenced by vpFeaturePoint3D::buildFrom(), vpCircle::changeFrame(), vpCylinder::changeFrame(), vpLine::changeFrame(), vpPoint::changeFrame(), vpSphere::changeFrame(), vpFeatureBuilder::create(), vpPoint::get_W(), vpPoint::get_X(), vpPoint::get_Y(), vpPoint::get_Z(), vpCircle::init(), vpCylinder::init(), vpLine::init(), vpPoint::init(), vpSphere::init(), vpMbtPolygon::isVisible(), vpTracker::operator=(), vpForwardProjection::print(), vpPose::printPoint(), vpForwardProjection::project(), vpCircle::projection(), vpCylinder::projection(), vpLine::projection(), vpPoint::projection(), vpSphere::projection(), vpPoint::set_W(), vpPoint::set_X(), vpPoint::set_Y(), and vpPoint::set_Z().
|
inherited |
Flag used to indicate if the feature parameters cP expressed in the camera frame are available.
Definition at line 79 of file vpTracker.h.
Referenced by vpTracker::init(), and vpTracker::operator=().
|
inherited |
Feature coordinates expressed in the image plane p. They correspond to 2D normalized coordinates expressed in meters.
Definition at line 69 of file vpTracker.h.
Referenced by vpMbtDistanceCircle::computeInteractionMatrixError(), vpCircle::computeIntersectionPoint(), vpMeterPixelConversion::convertEllipse(), vpFeatureBuilder::create(), vpCircle::display(), vpCylinder::display(), vpLine::display(), vpPoint::display(), vpSphere::display(), vpProjectionDisplay::display(), vpProjectionDisplay::displayCamera(), vpFeatureDisplay::displayEllipse(), vpPose::displayModel(), vpImageDraw::drawFrame(), vpPoint::get_w(), vpPoint::get_x(), vpPoint::get_y(), vpMeTracker::init(), vpCircle::init(), vpCylinder::init(), vpLine::init(), vpPoint::init(), vpSphere::init(), vpTracker::operator=(), vpForwardProjection::print(), vpPose::printPoint(), vpForwardProjection::project(), vpCircle::projection(), vpCylinder::projection(), vpLine::projection(), vpPoint::projection(), vpSphere::projection(), vpPoint::set_w(), vpPoint::set_x(), and vpPoint::set_y().