39 #include <visp3/core/vpColor.h>
40 #include <visp3/core/vpDisplay.h>
41 #include <visp3/me/vpMeTracker.h>
44 #include <visp3/core/vpDebug.h>
45 #include <visp3/core/vpTrackingException.h>
47 #define DEBUG_LEVEL1 0
48 #define DEBUG_LEVEL2 0
58 : m_meList(), m_me(nullptr), m_init_range(1), m_nGoodElement(0), m_mask(nullptr), m_maskCandidates(nullptr), m_selectDisplay(
vpMeSite::NONE)
64 :
vpTracker(meTracker), m_meList(), m_me(nullptr), m_init_range(1), m_nGoodElement(0), m_mask(nullptr), m_maskCandidates(nullptr), m_selectDisplay(
vpMeSite::NONE)
97 unsigned int number_signal = 0;
100 number_signal =
static_cast<unsigned int>(std::count_if(
m_meList.begin(),
m_meList.end(), isSuppressZero));
101 return number_signal;
109 return ((mask ==
nullptr) || (mask->
getValue(i, j)));
118 if (meMaskCandidates ==
nullptr) {
122 const unsigned int kernelSize = 3;
123 const unsigned int halfKernelSize = (kernelSize - 1) / 2;
124 const unsigned int nbRows = meMaskCandidates->
getRows();
125 const unsigned int nbCols = meMaskCandidates->
getCols();
127 if ((i >= nbRows) || (j >= nbCols)) {
131 if ((*meMaskCandidates)[i][j]) {
135 unsigned int iStart = 0, jStart = 0;
136 unsigned int iStop = nbRows - 1, jStop = nbCols - 1;
138 if (i >= halfKernelSize) {
139 iStart = i - halfKernelSize;
141 if (j >= halfKernelSize) {
142 jStart = j - halfKernelSize;
144 if ((i + halfKernelSize) < nbRows) {
145 iStop = i + halfKernelSize;
147 if ((j + halfKernelSize) < nbCols) {
148 jStop = j + halfKernelSize;
151 bool isACandidate =
false;
152 unsigned int iter_i = iStart, iter_j = jStart;
154 while ((!isACandidate) && (iter_i <= iStop)) {
156 while ((!isACandidate) && (iter_j <= jStop)) {
157 isACandidate = (*meMaskCandidates)[iter_i][iter_j];
169 int borderWith2SparedPixels = border + 2;
170 return (!((i > borderWith2SparedPixels) && (i < (nrows - borderWith2SparedPixels))
171 && (j > borderWith2SparedPixels) && (j < (ncols - borderWith2SparedPixels))
177 const int borderPlus2 = border + 2;
180 return (!((i > borderPlus2) && (i < (nrows - borderPlus2)) && (j > borderPlus2) && (j < (ncols - borderPlus2))));
186 vpDERROR_TRACE(2,
"Tracking error: Moving edges not initialized");
197 std::list<vpMeSite>::iterator end =
m_meList.end();
198 for (std::list<vpMeSite>::iterator it =
m_meList.begin(); it != end; ++it) {
220 vpDERROR_TRACE(2,
"Tracking error: Moving edges not initialized");
232 std::list<vpMeSite>::iterator it =
m_meList.begin();
233 std::list<vpMeSite>::iterator end =
m_meList.end();
260 std::list<vpMeSite>::const_iterator end =
m_meList.end();
261 for (std::list<vpMeSite>::const_iterator it =
m_meList.begin(); it != end; ++it) {
269 std::list<vpMeSite>::const_iterator end =
m_meList.end();
270 for (std::list<vpMeSite>::const_iterator it =
m_meList.begin(); it != end; ++it) {
278 std::list<vpMeSite>::iterator end =
m_meList.end();
279 for (std::list<vpMeSite>::iterator it =
m_meList.begin(); it != end; ++it) {
Implementation of column vector and the associated operations.
void resize(unsigned int i, bool flagNullify=true)
error that can be emitted by ViSP classes.
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Type getValue(unsigned int i, unsigned int j) const
unsigned int getCols() const
unsigned int getRows() const
static int round(double x)
Performs search in a given direction(normal) for a given distance(pixels) for a given 'site'....
@ OUTSIDE_ROI_MASK
Point is outside the region of interest mask, but retained in the ME list.
@ NO_SUPPRESSION
Point successfully tracked.
void display(const vpImage< unsigned char > &I)
void setWeight(const double &weight)
vpMeSiteState getState() const
void track(const vpImage< unsigned char > &I, const vpMe *me, const bool &test_contrast=true)
void setState(const vpMeSiteState &flag)
Contains abstract elements for a Distance to Feature type feature.
void initTracking(const vpImage< unsigned char > &I)
const vpImage< bool > * m_mask
Mask used to disable tracking on a part of image.
unsigned int numberOfSignal()
vpMeSite::vpMeSiteDisplayType m_selectDisplay
Moving-edges display type.
void track(const vpImage< unsigned char > &I)
unsigned int m_init_range
Initial range.
unsigned int totalNumberOfSignal()
virtual ~vpMeTracker() vp_override
vpMe * m_me
Moving edges initialisation parameters.
vpMeTracker & operator=(vpMeTracker &meTracker)
static bool inRoiMask(const vpImage< bool > *mask, unsigned int i, unsigned int j)
void display(const vpImage< unsigned char > &I)
int m_nGoodElement
Number of good moving-edges that are tracked.
bool outOfImage(int i, int j, int border, int nrows, int ncols)
std::list< vpMeSite > m_meList
static bool inMeMaskCandidates(const vpImage< bool > *meMaskCandidates, unsigned int i, unsigned int j)
void setRange(const unsigned int &range)
unsigned int getRange() const
Class that defines what is a feature generic tracker.
void init()
Default initialization.
Error that can be emitted by the vpTracker class and its derivatives.
@ notEnoughPointError
Not enough point to track.
@ initializationError
Tracker initialization error.