Visual Servoing Platform  version 3.6.1 under development (2025-01-11)
vpColorHistogramMask.h
1 /*
2  * ViSP, open source Visual Servoing Platform software.
3  * Copyright (C) 2005 - 2024 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 
35 #ifndef VP_COLOR_HISTOGRAM_MASK_H
36 #define VP_COLOR_HISTOGRAM_MASK_H
37 
38 #include <visp3/core/vpConfig.h>
39 #include <visp3/core/vpException.h>
40 #include <visp3/rbt/vpColorHistogram.h>
41 #include <visp3/rbt/vpObjectMask.h>
42 #include <visp3/core/vpImage.h>
43 
44 #ifdef VISP_HAVE_NLOHMANN_JSON
45 #include VISP_NLOHMANN_JSON(json_fwd.hpp)
46 #endif
47 
48 BEGIN_VISP_NAMESPACE
49 
51 
56 class VISP_EXPORT vpColorHistogramMask : public vpObjectMask
57 {
58 public:
60  virtual ~vpColorHistogramMask() = default;
61 
62  void updateMask(const vpRBFeatureTrackerInput &frame,
63  const vpRBFeatureTrackerInput &previousFrame,
64  vpImage<float> &mask) VP_OVERRIDE;
65 
70  void setBinNumber(unsigned int N)
71  {
72  m_histBackground.setBinNumber(N);
73  m_histBackgroundFrame.setBinNumber(N);
74  m_histObject.setBinNumber(N);
75  m_histObjectFrame.setBinNumber(N);
76  }
77 
78  float getDepthErrorTolerance() const { return m_depthErrorTolerance; }
79  void setDepthErrorTolerance(float errorMax)
80  {
81  if (errorMax < 0.f) {
82  throw vpException(vpException::badValue, "Depth error tolerance in histogram computation should be > 0");
83  }
84  m_depthErrorTolerance = errorMax;
85  }
86 
87  float getObjectUpdateRate() const { return m_objectUpdateRate; }
88  void setObjectUpdateRate(float updateRate)
89  {
90  if (updateRate < 0.f || updateRate > 1.f) {
91  throw vpException(vpException::badValue, "Histogram update rate should be between 0 and 1 (included)");
92  }
93  m_objectUpdateRate = updateRate;
94  }
95 
96  float getBackgroundUpdateRate() const { return m_backgroundUpdateRate; }
97  void setBackgroundUpdateRate(float updateRate)
98  {
99  if (updateRate < 0.f || updateRate > 1.f) {
100  throw vpException(vpException::badValue, "Histogram update rate should be between 0 and 1 (included)");
101  }
102  m_backgroundUpdateRate = updateRate;
103  }
104 
105  bool isComputedOnlyOnBoundingBox() const { return m_computeOnBBOnly; }
106  void setComputeOnlyOnBoundingBox(bool bbOnly)
107  {
108  m_computeOnBBOnly = bbOnly;
109  }
114 #if defined(VISP_HAVE_NLOHMANN_JSON)
115  void loadJsonConfiguration(const nlohmann::json &json) VP_OVERRIDE;
116 #endif
117 
118 private:
119  vpColorHistogram m_histObject, m_histBackground, m_histObjectFrame, m_histBackgroundFrame;
120  float m_depthErrorTolerance;
121  float m_objectUpdateRate, m_backgroundUpdateRate;
122 
123  vpImage<bool> m_mask;
124  vpImage<float> m_probaObject, m_probaBackground;
125 
126  bool m_computeOnBBOnly;
127 };
128 
129 END_VISP_NAMESPACE
130 
131 #endif
A color histogram based segmentation algorithm.
float getDepthErrorTolerance() const
float getObjectUpdateRate() const
virtual ~vpColorHistogramMask()=default
bool isComputedOnlyOnBoundingBox() const
void setComputeOnlyOnBoundingBox(bool bbOnly)
float getBackgroundUpdateRate() const
void setBinNumber(unsigned int N)
void setDepthErrorTolerance(float errorMax)
void setObjectUpdateRate(float updateRate)
void setBackgroundUpdateRate(float updateRate)
error that can be emitted by ViSP classes.
Definition: vpException.h:60
@ badValue
Used to indicate that a value is not in the allowed range.
Definition: vpException.h:73
virtual void loadJsonConfiguration(const nlohmann::json &j)=0
virtual void updateMask(const vpRBFeatureTrackerInput &frame, const vpRBFeatureTrackerInput &previousFrame, vpImage< float > &mask)=0
All the data related to a single tracking frame. This contains both the input data (from a real camer...