Visual Servoing Platform  version 3.6.1 under development (2024-03-18)
vpMeSite.h
1 /*
2  * ViSP, open source Visual Servoing Platform software.
3  * Copyright (C) 2005 - 2023 by Inria. All rights reserved.
4  *
5  * This software is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ViSP with software that can not be combined with the GNU
13  * GPL, please contact Inria about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * See https://visp.inria.fr for more information.
17  *
18  * This software was developed at:
19  * Inria Rennes - Bretagne Atlantique
20  * Campus Universitaire de Beaulieu
21  * 35042 Rennes Cedex
22  * France
23  *
24  * If you have questions regarding the use of this file, please contact
25  * Inria at visp@inria.fr
26  *
27  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29  *
30  * Description:
31  * Moving edges.
32  */
33 
39 #ifndef _vpMeSite_h_
40 #define _vpMeSite_h_
41 
42 #include <visp3/core/vpDisplay.h>
43 #include <visp3/core/vpImage.h>
44 #include <visp3/core/vpMatrix.h>
45 #include <visp3/me/vpMe.h>
46 
64 class VISP_EXPORT vpMeSite
65 {
66 public:
70  typedef enum
71  {
72  NONE,
75  RANGE_RESULT
76  } vpMeSiteDisplayType;
77 
81  typedef enum
82  {
83  NO_SUPPRESSION = 0,
84  CONTRAST = 1,
85 #ifdef VISP_BUILD_DEPRECATED_FUNCTIONS
86  CONSTRAST = CONTRAST,
87 #endif
88  THRESHOLD = 2,
89  M_ESTIMATOR = 3,
90  TOO_NEAR = 4,
91  UNKNOW = 5,
92  OUTSIDE_ROI_MASK = 6
93  } vpMeSiteState;
94 
96  int m_i;
98  int m_j;
100  double m_ifloat;
102  double m_jfloat;
106  double m_alpha;
108  double m_convlt;
112  double m_weight;
115 
116 public:
120  vpMeSite();
121 
125  vpMeSite(const double &ip, const double &jp);
126 
130  vpMeSite(const vpMeSite &mesite);
131 
135  virtual ~vpMeSite() { };
136 
140  double convolution(const vpImage<unsigned char> &ima, const vpMe *me);
141 
146  void display(const vpImage<unsigned char> &I);
147 
152  void display(const vpImage<vpRGBa> &I);
153 
159  inline double getAlpha() const { return m_alpha; }
160 
164  inline double getWeight() const { return m_weight; }
165 
174  vpMeSite *getQueryList(const vpImage<unsigned char> &I, const int &range) const;
175 
180  inline int get_i() const { return m_i; }
181 
186  inline int get_j() const { return m_j; }
187 
192  inline double get_ifloat() const { return m_ifloat; }
193 
198  inline double get_jfloat() const { return m_jfloat; }
199 
203  void init();
204 
208  void init(const double &ip, const double &jp, const double &alphap);
209 
213  void init(const double &ip, const double &jp, const double &alphap, const double &convltp);
214 
218  void init(const double &ip, const double &jp, const double &alphap, const double &convltp, const int &sign);
219 
223  void init(const double &ip, const double &jp, const double &alphap, const double &convltp, const int &sign, const double &contrastThreshold);
224 
230  void track(const vpImage<unsigned char> &im, const vpMe *me, const bool &test_likelihood = true);
231 
237  void setAlpha(const double &a) { m_alpha = a; }
238 
242  void setDisplay(vpMeSiteDisplayType select) { m_selectDisplay = select; }
243 
251  void setState(const vpMeSiteState &flag)
252  {
253  m_state = flag;
254  }
255 
261  inline vpMeSiteState getState() const { return m_state; }
262 
268  void setWeight(const double &weight) { m_weight = weight; }
269 
281  void setContrastThreshold(const double &thresh, const vpMe &me)
282  {
283  double threshold;
284  if (me.getUseAutomaticThreshold()) {
285  threshold = std::max(thresh, me.getMinThreshold());
286  }
287  else {
288  threshold = me.getThreshold();
289  }
290 
291  m_contrastThreshold = threshold;
292  }
293 
299  inline double getContrastThreshold() const { return m_contrastThreshold; }
300 
304  vpMeSite &operator=(const vpMeSite &m);
305 
309  int operator!=(const vpMeSite &m);
310 
314  friend VISP_EXPORT std::ostream &operator<<(std::ostream &os, vpMeSite &vpMeS);
315 
316  // Static functions
328  static double distance(const vpMeSite &S1, const vpMeSite &S2)
329  {
330  return (sqrt(sqrDistance(S1, S2)));
331  }
332 
344  static double sqrDistance(const vpMeSite &S1, const vpMeSite &S2)
345  {
346  return (vpMath::sqr(S1.m_ifloat - S2.m_ifloat) + vpMath::sqr(S1.m_jfloat - S2.m_jfloat));
347  }
348 
364  static void display(const vpImage<unsigned char> &I, const double &i, const double &j,
365  const vpMeSiteState &state = NO_SUPPRESSION);
366 
382  static void display(const vpImage<vpRGBa> &I, const double &i, const double &j,
383  const vpMeSiteState &state = NO_SUPPRESSION);
384 
385 private:
386  vpMeSiteDisplayType m_selectDisplay;
387  vpMeSiteState m_state;
388 };
389 
390 #endif
static double sqr(double x)
Definition: vpMath.h:201
Performs search in a given direction(normal) for a given distance(pixels) for a given 'site'....
Definition: vpMeSite.h:65
int m_mask_sign
Mask sign.
Definition: vpMeSite.h:104
vpMeSiteState
Definition: vpMeSite.h:82
void setDisplay(vpMeSiteDisplayType select)
Definition: vpMeSite.h:242
double m_ifloat
Subpixel coordinates along i of a site.
Definition: vpMeSite.h:100
double m_normGradient
Convolution of Site in previous image.
Definition: vpMeSite.h:110
void setAlpha(const double &a)
Definition: vpMeSite.h:237
double getAlpha() const
Definition: vpMeSite.h:159
double getContrastThreshold() const
Definition: vpMeSite.h:299
double m_convlt
Convolution of Site in previous image.
Definition: vpMeSite.h:108
void setWeight(const double &weight)
Definition: vpMeSite.h:268
double m_alpha
Angle of tangent at site.
Definition: vpMeSite.h:106
vpMeSiteDisplayType
Definition: vpMeSite.h:71
@ NONE
Not displayed.
Definition: vpMeSite.h:72
@ RESULT
Definition: vpMeSite.h:74
@ RANGE
Definition: vpMeSite.h:73
static double distance(const vpMeSite &S1, const vpMeSite &S2)
Definition: vpMeSite.h:328
double m_contrastThreshold
Old likelihood ratio threshold (to be avoided) or easy-to-use normalized threshold: minimal contrast.
Definition: vpMeSite.h:114
double getWeight() const
Definition: vpMeSite.h:164
vpMeSiteState getState() const
Definition: vpMeSite.h:261
int m_j
Integer coordinates along j of a site.
Definition: vpMeSite.h:98
int get_j() const
Definition: vpMeSite.h:186
int m_i
Integer coordinate along i of a site.
Definition: vpMeSite.h:96
double get_ifloat() const
Definition: vpMeSite.h:192
double m_jfloat
Subpixel coordinates along j of a site.
Definition: vpMeSite.h:102
virtual ~vpMeSite()
Definition: vpMeSite.h:135
int get_i() const
Definition: vpMeSite.h:180
static double sqrDistance(const vpMeSite &S1, const vpMeSite &S2)
Definition: vpMeSite.h:344
double m_weight
Uncertainty of point given as a probability between 0 and 1.
Definition: vpMeSite.h:112
double get_jfloat() const
Definition: vpMeSite.h:198
void setContrastThreshold(const double &thresh, const vpMe &me)
Definition: vpMeSite.h:281
void setState(const vpMeSiteState &flag)
Definition: vpMeSite.h:251
Definition: vpMe.h:124
bool getUseAutomaticThreshold() const
Indicates if the contrast threshold of the vpMeSite is automatically computed.
Definition: vpMe.h:332
double getThreshold() const
Definition: vpMe.h:305
double getMinThreshold() const
Definition: vpMe.h:324