TorusPrimitiveShape.h
Go to the documentation of this file.
1 #ifndef TORUSPRIMITIVESHAPE_HEADER
2 #define TORUSPRIMITIVESHAPE_HEADER
3 #include "BitmapPrimitiveShape.h"
6 #include "Torus.h"
7 
8 #ifndef DLL_LINKAGE
9 #define DLL_LINKAGE
10 #endif
11 
13 {
14 public:
16 
17  TorusPrimitiveShape() : m_parametrization(m_torus)
18  {
19  }
20 
21  TorusPrimitiveShape(const Torus& torus);
23  size_t Identifier() const;
24 
25  unsigned int
27  {
29  }
30 
31  PrimitiveShape* Clone() const;
32  float Distance(const Vec3f& p) const;
33  float SignedDistance(const Vec3f& p) const;
34  float NormalDeviation(const Vec3f& p, const Vec3f& n) const;
35  void
36  DistanceAndNormalDeviation(const Vec3f& p, const Vec3f& n, std::pair<float, float>* dn) const;
37  void Project(const Vec3f& p, Vec3f* pp) const;
38  void Normal(const Vec3f& p, Vec3f* n) const;
39  unsigned int ConfidenceTests(unsigned int numTests,
40  float epsilon,
41  float normalThresh,
42  float rms,
43  const PointCloud& pc,
44  const MiscLib::Vector<size_t>& indices) const;
45  void Description(std::string* s) const;
46  // refitting
47  bool Fit(const PointCloud& pc,
48  float epsilon,
49  float normalThresh,
53  float epsilon,
54  float normalThresh,
57  std::pair<size_t, float>* score) const;
59  void Serialize(std::ostream* o, bool binary = true) const;
60  void Deserialize(std::istream* i, bool binary);
61  size_t SerializedSize() const;
62 
63  virtual void
64  Serialize(float* array) const
65  {
66  m_torus.Serialize(array);
67  }
68 
69  virtual size_t
71  {
72  return m_torus.SerializedFloatSize();
73  }
74 
75  void Transform(float scale, const Vec3f& translate);
76  void Visit(PrimitiveShapeVisitor* visitor) const;
78  const PointCloud& pc,
81  float distThresh,
83  void OptimizeParametrization(const PointCloud& pc, size_t begin, size_t end, float epsilon);
84  bool Similar(float tolerance, const TorusPrimitiveShape& shape) const;
85 
86  // implementation of BitmapPrimitiveShape
87  void Parameters(const Vec3f& p, std::pair<float, float>* param) const;
88  void Parameters(
91  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
94  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
95  bool InSpace(float u, float v, Vec3f* p, Vec3f* n) const;
96  void BitmapExtent(float epsilon,
98  MiscLib::Vector<std::pair<float, float>>* params,
99  size_t* uextent,
100  size_t* vextent);
101  void InBitmap(const std::pair<float, float>& param,
102  float epsilon,
103  const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
104  size_t uextent,
105  size_t vextent,
106  std::pair<int, int>* inBmp) const;
108  float epsilon,
109  bool* uwrap,
110  bool* vwrap) const;
112  float epsilon,
113  size_t uextent,
114  size_t vextent,
115  MiscLib::Vector<int>* componentImg,
116  MiscLib::Vector<std::pair<int, size_t>>* labels) const;
117  void SetExtent(const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
118  const MiscLib::Vector<int>& componentsImg,
119  size_t uextent,
120  size_t vextent,
121  float epsilon,
122  int label);
123  bool InSpace(size_t u,
124  size_t v,
125  float epsilon,
126  const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
127  size_t uextent,
128  size_t vextent,
129  Vec3f* p,
130  Vec3f* n) const;
131 
132  const Torus&
133  Internal() const
134  {
135  return m_torus;
136  }
137 
138 private:
139  template <class IteratorT>
140  void ParametersImpl(IteratorT begin,
141  IteratorT end,
142  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
143 
144 private:
145  Torus m_torus;
146  ParametrizationType m_parametrization;
147 };
148 
149 template <class IteratorT>
150 void
151 TorusPrimitiveShape::ParametersImpl(IteratorT begin,
152  IteratorT end,
153  MiscLib::Vector<std::pair<float, float>>* bmpParams) const
154 {
155  bmpParams->resize(end - begin);
156  size_t j = 0;
157  for (IteratorT i = begin; i != end; ++i, ++j)
158  {
159  m_parametrization.Parameters(*i, &(*bmpParams)[j]);
160  }
161 }
162 
164 {
165 public:
166  TorusLevMarFunc(const Torus& t) : m_torus(t)
167  {
168  }
169 
170  float
171  operator()(const float* x) const
172  {
173  return m_torus.SignedDistance(*((const Vec3f*)x));
174  }
175 
176  void
177  operator()(const float* x, float* gradient) const
178  {
179  m_torus.Normal(*((const Vec3f*)x), (Vec3f*)gradient);
180  }
181 
182 private:
183  Torus m_torus;
184 };
185 
186 #endif
GfxTL::IndexedIterator
Definition: IndexedIterator.h:8
TorusPrimitiveShape::Internal
const Torus & Internal() const
Definition: TorusPrimitiveShape.h:133
TorusPrimitiveShape::SerializedFloatSize
virtual size_t SerializedFloatSize() const
Definition: TorusPrimitiveShape.h:70
LevMarFunc< float >
PrimitiveShape::Identifier
virtual size_t Identifier() const =0
PrimitiveShape::Project
virtual void Project(const Vec3f &p, Vec3f *pp) const =0
PrimitiveShape::Fit
virtual bool Fit(const PointCloud &pc, float epsilon, float normalThresh, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end)=0
PrimitiveShape::SuggestSimplifications
virtual void SuggestSimplifications(const PointCloud &pc, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end, float distThresh, MiscLib::Vector< MiscLib::RefCountPtr< PrimitiveShape >> *suggestions) const
Definition: PrimitiveShape.h:109
Vec3f
Definition: basic.h:17
Torus.h
PrimitiveShape::SignedDistance
virtual float SignedDistance(const Vec3f &p) const =0
Torus
Definition: Torus.h:20
BitmapPrimitiveShape
Definition: BitmapPrimitiveShape.h:31
TorusPrimitiveShape
Definition: TorusPrimitiveShape.h:12
Torus::RequiredSamples
@ RequiredSamples
Definition: Torus.h:25
BitmapPrimitiveShape::InSpace
virtual bool InSpace(float u, float v, Vec3f *p, Vec3f *n) const =0
PrimitiveShape
PrimtiveShape is a shape primitive in conjunction with a parametrization.
Definition: PrimitiveShape.h:34
PrimitiveShape::Normal
virtual void Normal(const Vec3f &p, Vec3f *n) const =0
LowStretchTorusParametrization::Parameters
void Parameters(const Vec3f &p, std::pair< float, float > *param) const
Definition: LowStretchTorusParametrization.h:63
LowStretchTorusParametrization
Definition: LowStretchTorusParametrization.h:14
PrimitiveShape::NormalDeviation
virtual float NormalDeviation(const Vec3f &p, const Vec3f &n) const =0
PrimitiveShape::LSFit
virtual PrimitiveShape * LSFit(const PointCloud &pc, float epsilon, float normalThresh, MiscLib::Vector< size_t >::const_iterator begin, MiscLib::Vector< size_t >::const_iterator end, std::pair< size_t, float > *score) const =0
magic_enum::detail::n
constexpr auto n() noexcept
Definition: magic_enum.hpp:418
TorusLevMarFunc::operator()
float operator()(const float *x) const
Definition: TorusPrimitiveShape.h:171
PrimitiveShape::Distance
virtual float Distance(const Vec3f &p) const =0
MiscLib::Vector< size_t >
PrimitiveShape::SerializedSize
virtual size_t SerializedSize() const =0
TorusPrimitiveShape::RequiredSamples
unsigned int RequiredSamples() const
Definition: TorusPrimitiveShape.h:26
MiscLib::Vector< Point >::const_iterator
const typedef Point * const_iterator
Definition: Vector.h:25
PrimitiveShape::Description
virtual void Description(std::string *s) const =0
PrimitiveShape::DistanceAndNormalDeviation
virtual void DistanceAndNormalDeviation(const Vec3f &p, const Vec3f &n, std::pair< float, float > *dn) const =0
pcl::graph::indices
pcl::PointIndices::Ptr indices(const PCG &g)
Retrieve the indices of the points of the point cloud stored in a point cloud graph that actually bel...
Definition: point_cloud_graph.h:717
PrimitiveShapeVisitor
Definition: PrimitiveShapeVisitor.h:14
PrimitiveShape::OptimizeParametrization
virtual void OptimizeParametrization(const PointCloud &pc, size_t begin, size_t end, float epsilon)
Definition: PrimitiveShape.h:118
SimpleTorusParametrization.h
TorusLevMarFunc
Definition: TorusPrimitiveShape.h:163
BitmapPrimitiveShape.h
BasePrimitiveShape::ConfidenceTests
unsigned int ConfidenceTests(unsigned int numTests, float epsilon, float normalThresh, float rms, const PointCloud &pc, const MiscLib::Vector< size_t > &indices) const
Definition: BasePrimitiveShape.h:17
MiscLib::RefCountPtr< PrimitiveShape >
BitmapPrimitiveShape::WrapComponents
virtual void WrapComponents(const GfxTL::AABox< GfxTL::Vector2Df > &bbox, float epsilon, size_t uextent, size_t vextent, MiscLib::Vector< int > *componentImg, MiscLib::Vector< std::pair< int, size_t >> *labels) const
Definition: BitmapPrimitiveShape.cpp:26
PointCloud
Definition: PointCloud.h:85
TorusLevMarFunc::operator()
void operator()(const float *x, float *gradient) const
Definition: TorusPrimitiveShape.h:177
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
TorusLevMarFunc::TorusLevMarFunc
TorusLevMarFunc(const Torus &t)
Definition: TorusPrimitiveShape.h:166
BitmapPrimitiveShape::Parameters
virtual void Parameters(const Vec3f &p, std::pair< float, float > *param) const =0
TorusPrimitiveShape::Serialize
virtual void Serialize(float *array) const
Definition: TorusPrimitiveShape.h:64
TorusPrimitiveShape
class DLL_LINKAGE TorusPrimitiveShape
Definition: PrimitiveShapeVisitor.h:12
DLL_LINKAGE
#define DLL_LINKAGE
Definition: basic.h:12
PrimitiveShape::SignedDistanceFunc
virtual LevMarFunc< float > * SignedDistanceFunc() const =0
BitmapPrimitiveShape::InBitmap
virtual void InBitmap(const std::pair< float, float > &param, float epsilon, const GfxTL::AABox< GfxTL::Vector2Df > &bbox, size_t uextent, size_t vextent, std::pair< int, int > *inBmp) const =0
PrimitiveShape::Transform
virtual void Transform(float scale, const Vec3f &translate)=0
pc
Introduction Thank you for taking interest in our work and downloading this software This library implements the algorithm described in the paper R R R Klein Efficient RANSAC for Point Cloud Shape in Computer Graphics Blackwell June If you use this software you should cite the aforementioned paper in any resulting publication Please send comments or bug reports to Ruwen Roland BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY OR CONSEQUENTIAL WHETHER IN STRICT OR EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE Example usage This section shows how to use the library to detect the shapes in a point cloud PointCloud pc
Definition: ReadMe.txt:68
TorusPrimitiveShape::ParametrizationType
LowStretchTorusParametrization ParametrizationType
Definition: TorusPrimitiveShape.h:15
PrimitiveShape::Serialize
virtual void Serialize(std::ostream *o, bool binary=true) const =0
This is the one and only serialization function It stores all the parameters of the shape as well as ...
BitmapPrimitiveShape::BitmapExtent
virtual void BitmapExtent(float epsilon, GfxTL::AABox< GfxTL::Vector2Df > *bbox, MiscLib::Vector< std::pair< float, float >> *params, size_t *uextent, size_t *vextent)=0
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
GfxTL::AABox
Definition: AABox.h:19
LowStretchTorusParametrization.h
BitmapPrimitiveShape::WrapBitmap
virtual void WrapBitmap(const GfxTL::AABox< GfxTL::Vector2Df > &bbox, float epsilon, bool *uwrap, bool *vwrap) const =0
TorusPrimitiveShape::TorusPrimitiveShape
TorusPrimitiveShape()
Definition: TorusPrimitiveShape.h:17
PrimitiveShape::Clone
virtual PrimitiveShape * Clone() const =0
PrimitiveShape::Visit
virtual void Visit(PrimitiveShapeVisitor *visitor) const =0