Visual Servoing Platform version 3.6.0
Loading...
Searching...
No Matches
vpDot.h
1/****************************************************************************
2 *
3 * ViSP, open source Visual Servoing Platform software.
4 * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
5 *
6 * This software is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 * See the file LICENSE.txt at the root directory of this source
11 * distribution for additional information about the GNU GPL.
12 *
13 * For using ViSP with software that can not be combined with the GNU
14 * GPL, please contact Inria about acquiring a ViSP Professional
15 * Edition License.
16 *
17 * See https://visp.inria.fr for more information.
18 *
19 * This software was developed at:
20 * Inria Rennes - Bretagne Atlantique
21 * Campus Universitaire de Beaulieu
22 * 35042 Rennes Cedex
23 * France
24 *
25 * If you have questions regarding the use of this file, please contact
26 * Inria at visp@inria.fr
27 *
28 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30 *
31 * Description:
32 * Track a white dot.
33 *
34*****************************************************************************/
35
41#ifndef vpDot_hh
42#define vpDot_hh
43
44#include <visp3/core/vpConfig.h>
45#include <visp3/core/vpDisplay.h>
46#include <visp3/core/vpImage.h>
47#include <visp3/core/vpImagePoint.h>
48#include <visp3/core/vpPolygon.h>
49#include <visp3/core/vpRect.h>
50#include <visp3/core/vpTracker.h>
51
52#include <fstream>
53#include <list>
54#include <math.h>
55#include <vector>
56
57#ifdef VISP_USE_MSVC
58#pragma comment(linker, "/STACK:256000000") // Increase max recursion depth
59#endif
60
111class VISP_EXPORT vpDot : public vpTracker
112{
113public:
117 typedef enum {
118 CONNEXITY_4,
120 CONNEXITY_8
122 } vpConnexityType;
123
124#ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
125public:
126#else
127private:
128#endif
129 static const unsigned int SPIRAL_SEARCH_SIZE;
131 double m00;
138 double m01;
145 double m10;
152 double m11;
159 double m20;
166 double m02;
173 double mu11;
178 double mu20;
183 double mu02;
189public:
190 vpDot();
191 explicit vpDot(const vpImagePoint &ip);
192 vpDot(const vpDot &d);
193 virtual ~vpDot();
194
195 void display(const vpImage<unsigned char> &I, vpColor color = vpColor::red, unsigned int thickness = 1) const;
196
206 inline vpColVector get_nij() const
207 {
208 vpColVector nij(3);
209 nij[0] = mu20 / m00;
210 nij[1] = mu11 / m00;
211 nij[2] = mu02 / m00;
212
213 return nij;
214 }
215
221 inline double getArea() const { return m00; }
222
230 inline vpRect getBBox() const
231 {
232 vpRect bbox;
233
234 bbox.setRect(this->u_min, this->v_min, this->u_max - this->u_min + 1, this->v_max - this->v_min + 1);
235
236 return (bbox);
237 };
243 inline vpImagePoint getCog() const { return cog; }
244
251 inline std::list<vpImagePoint> getEdges() const { return this->ip_edges_list; };
252
261 inline std::list<vpImagePoint> getConnexities() const { return this->ip_connexities_list; };
262
263 inline double getGamma() const { return this->gamma; };
271 double getGrayLevelPrecision() const { return grayLevelPrecision; }
272 double getMaxDotSize() const { return this->maxDotSizePercentage; }
276 double getMeanGrayLevel() const { return (this->mean_gray_level); };
277
281 vpPolygon getPolygon() const { return (vpPolygon(ip_edges_list)); };
282
290 inline unsigned int getWidth() const { return (this->u_max - this->u_min + 1); };
291
299 inline unsigned int getHeight() const { return (this->v_max - this->v_min + 1); };
300
301 void initTracking(const vpImage<unsigned char> &I);
302 void initTracking(const vpImage<unsigned char> &I, const vpImagePoint &ip);
303 void initTracking(const vpImage<unsigned char> &I, const vpImagePoint &ip, unsigned int gray_level_min,
304 unsigned int gray_level_max);
305
306 vpDot &operator=(const vpDot &d);
307 bool operator==(const vpDot &d) const;
308 bool operator!=(const vpDot &d) const;
309 friend VISP_EXPORT std::ostream &operator<<(std::ostream &os, vpDot &d);
310
311 void print(std::ostream &os) { os << *this << std::endl; }
312
316 inline void setCog(const vpImagePoint &ip) { this->cog = ip; }
317
333 void setComputeMoments(bool activate) { compute_moment = activate; }
334
338 void setConnexity(vpConnexityType type) { this->connexityType = type; };
339 void setMaxDotSize(double percentage);
340 void setGrayLevelMin(const unsigned int &level_min) { this->gray_level_min = level_min; };
341 void setGrayLevelMax(const unsigned int &level_max) { this->gray_level_max = level_max; };
342 void setGrayLevelPrecision(const double &grayLevelPrecision);
343
357 void setGraphics(bool activate) { graphics = activate; }
364 void setGraphicsThickness(unsigned int t) { this->thickness = t; };
365
366 void track(const vpImage<unsigned char> &I);
367 void track(const vpImage<unsigned char> &I, vpImagePoint &ip);
368
369private:
371 std::list<vpImagePoint> ip_connexities_list;
372
374 std::list<vpImagePoint> ip_edges_list;
375
380 vpConnexityType connexityType;
381
383 vpImagePoint cog;
384
385 // Bounding box
386 unsigned int u_min, u_max, v_min, v_max;
387
388 // Flag used to allow display
389 bool graphics;
390
391 unsigned int thickness; // Graphics thickness
392
393 double maxDotSizePercentage;
394 unsigned char gray_level_out;
395
396 double mean_gray_level; // Mean gray level of the dot
397 unsigned int gray_level_min; // left threshold for binarisation
398 unsigned int gray_level_max; // right threshold for binarisation
399 double grayLevelPrecision; // precision of the gray level of the dot.
400 // It is a double precision float witch value is in ]0,1].
401 // 1 means full precision, whereas values close to 0 show a very bad
402 // precision
403 double gamma;
405 bool compute_moment;
406 double nbMaxPoint;
407
408 void init();
409 void setGrayLevelOut();
410 bool connexe(const vpImage<unsigned char> &I, unsigned int u, unsigned int v, double &mean_value, double &u_cog,
411 double &v_cog, double &n);
412 bool connexe(const vpImage<unsigned char> &I, unsigned int u, unsigned int v, double &mean_value, double &u_cog,
413 double &v_cog, double &n, std::vector<bool> &checkTab);
414 void COG(const vpImage<unsigned char> &I, double &u, double &v);
415
416 // Static Functions
417public:
418 static void display(const vpImage<unsigned char> &I, const vpImagePoint &cog,
419 const std::list<vpImagePoint> &edges_list, vpColor color = vpColor::red,
420 unsigned int thickness = 1);
421 static void display(const vpImage<vpRGBa> &I, const vpImagePoint &cog, const std::list<vpImagePoint> &edges_list,
422 vpColor color = vpColor::red, unsigned int thickness = 1);
423};
424
425#endif
Implementation of column vector and the associated operations.
Class to define RGB colors available for display functionalities.
Definition vpColor.h:152
static const vpColor red
Definition vpColor.h:211
This tracker is meant to track a dot (connected pixels with same gray level) on a vpImage.
Definition vpDot.h:112
double mu02
Definition vpDot.h:183
std::list< vpImagePoint > getEdges() const
Definition vpDot.h:251
vpRect getBBox() const
Definition vpDot.h:230
double m10
Definition vpDot.h:145
std::list< vpImagePoint > getConnexities() const
Definition vpDot.h:261
unsigned int getWidth() const
Definition vpDot.h:290
double mu11
Definition vpDot.h:173
double m01
Definition vpDot.h:138
void setGraphics(bool activate)
Definition vpDot.h:357
void setCog(const vpImagePoint &ip)
Definition vpDot.h:316
void setGraphicsThickness(unsigned int t)
Definition vpDot.h:364
double getArea() const
Definition vpDot.h:221
double getMeanGrayLevel() const
Definition vpDot.h:276
double mu20
Definition vpDot.h:178
double m11
Definition vpDot.h:152
double m02
Definition vpDot.h:166
double getMaxDotSize() const
Definition vpDot.h:272
void print(std::ostream &os)
Definition vpDot.h:311
vpPolygon getPolygon() const
Definition vpDot.h:281
void setGrayLevelMax(const unsigned int &level_max)
Definition vpDot.h:341
void setConnexity(vpConnexityType type)
Definition vpDot.h:338
void setGrayLevelMin(const unsigned int &level_min)
Definition vpDot.h:340
void setComputeMoments(bool activate)
Definition vpDot.h:333
static const unsigned int SPIRAL_SEARCH_SIZE
Definition vpDot.h:129
double getGrayLevelPrecision() const
Definition vpDot.h:271
double m00
Definition vpDot.h:131
double m20
Definition vpDot.h:159
vpColVector get_nij() const
Definition vpDot.h:206
vpConnexityType
Definition vpDot.h:117
double getGamma() const
Definition vpDot.h:263
vpImagePoint getCog() const
Definition vpDot.h:243
unsigned int getHeight() const
Definition vpDot.h:299
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Definition of the vpImage class member functions.
Definition vpImage.h:135
Defines a generic 2D polygon.
Definition vpPolygon.h:97
Defines a rectangle in the plane.
Definition vpRect.h:76
void setRect(double l, double t, double w, double h)
Definition vpRect.h:330
Class that defines what is a feature generic tracker.
Definition vpTracker.h:60
vpTracker & operator=(const vpTracker &tracker)
Copy operator.
Definition vpTracker.cpp:50
void init()
Default initialization.
Definition vpTracker.cpp:44