SpherePrimitiveShape.h
Go to the documentation of this file.
1 #ifndef SPHEREPRIMITIVESHAPE_HEADER
2 #define SPHEREPRIMITIVESHAPE_HEADER
3 #include <istream>
4 
5 #include "BitmapPrimitiveShape.h"
6 #include "LevMarFunc.h"
8 #include "Sphere.h"
9 #include <GfxTL/AABox.h>
10 #include <GfxTL/Covariance.h>
11 #include <GfxTL/IndexedIterator.h>
12 #include <GfxTL/Jacobi.h>
13 #include <GfxTL/MathHelper.h>
14 #include <GfxTL/Mean.h>
15 
16 #ifndef DLL_LINKAGE
17 #define DLL_LINKAGE
18 #endif
19 
21 {
22 public:
24 
25  SpherePrimitiveShape() : m_parametrization(m_sphere)
26  {
27  }
28 
31  size_t Identifier() const;
32 
33  unsigned int
35  {
37  }
38 
39  bool Init(bool binary, std::istream* i);
40  PrimitiveShape* Clone() const;
41  float Distance(const Vec3f& p) const;
42  float SignedDistance(const Vec3f& p) const;
43  float NormalDeviation(const Vec3f& p, const Vec3f& n) const;
44  void
45  DistanceAndNormalDeviation(const Vec3f& p, const Vec3f& n, std::pair<float, float>* dn) const;
46  void Project(const Vec3f& p, Vec3f* pp) const;
47  void Normal(const Vec3f& p, Vec3f* n) const;
48  unsigned int ConfidenceTests(unsigned int numTests,
49  float epsilon,
50  float normalThresh,
51  float rms,
52  const PointCloud& pc,
53  const MiscLib::Vector<size_t>& indices) const;
54  void Description(std::string* s) const;
55  bool Fit(const PointCloud& pc,
56  float epsilon,
57  float normalThresh,
61  float epsilon,
62  float normalThresh,
65  std::pair<size_t, float>* score) const;
67  void Serialize(std::ostream* o, bool binary = true) const;
68  void Deserialize(std::istream* i, bool binary);
69  size_t SerializedSize() const;
70 
71  virtual void
72  Serialize(float* array) const
73  {
74  m_sphere.Serialize(array);
75  }
76 
77  virtual size_t
79  {
80  return m_sphere.SerializedFloatSize();
81  }
82 
83  void Transform(float scale, const Vec3f& translate);
84  void Visit(PrimitiveShapeVisitor* visitor) const;
86  const PointCloud& pc,
89  float distThresh,
94  float epsilon);
95  void OptimizeParametrization(const PointCloud& pc, size_t begin, size_t end, float epsilon);
96  bool Similar(float tolerance, const SpherePrimitiveShape& shape) const;
97 
98  const Sphere&
99  Internal() const
100  {
101  return m_sphere;
102  }
103 
104  // implementation of bitmap primitive shape
105  void Parameters(const Vec3f& p, std::pair<float, float>* param) const;
106  void Parameters(
109  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
112  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
113  bool InSpace(float u, float v, Vec3f* p, Vec3f* n) const;
114  void BitmapExtent(float epsilon,
116  MiscLib::Vector<std::pair<float, float>>* params,
117  size_t* uextent,
118  size_t* vextent);
119  void InBitmap(const std::pair<float, float>& param,
120  float epsilon,
121  const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
122  size_t uextent,
123  size_t vextent,
124  std::pair<int, int>* inBmp) const;
126  float epsilon,
127  bool* uwrap,
128  bool* vwrap) const;
130  float epsilon,
131  size_t uextent,
132  size_t vextent,
133  MiscLib::Vector<int>* componentImg,
134  MiscLib::Vector<std::pair<int, size_t>>* labels) const;
135  bool InSpace(size_t u,
136  size_t v,
137  float epsilon,
138  const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
139  size_t uextent,
140  size_t vextent,
141  Vec3f* p,
142  Vec3f* n) const;
143 
144 private:
145  template <class IteratorT>
146  void ParametersImpl(IteratorT begin,
147  IteratorT end,
148  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
149 
150 private:
151  Sphere m_sphere;
152  ParametrizationType m_parametrization;
153 };
154 
155 template <class IteratorT>
156 void
157 SpherePrimitiveShape::ParametersImpl(IteratorT begin,
158  IteratorT end,
159  MiscLib::Vector<std::pair<float, float>>* bmpParams) const
160 {
161  bmpParams->resize(end - begin);
162  size_t j = 0;
163  for (IteratorT i = begin; i != end; ++i, ++j)
164  {
165  m_parametrization.Parameters(*i, &(*bmpParams)[j]);
166  }
167 }
168 
170 {
171 public:
172  SphereLevMarFunc(const Sphere& s) : m_sphere(s)
173  {
174  }
175 
176  float
177  operator()(const float* x) const
178  {
179  return m_sphere.SignedDistance(*((const Vec3f*)x));
180  }
181 
182  void
183  operator()(const float* x, float* gradient) const
184  {
185  m_sphere.Normal(*((const Vec3f*)x), (Vec3f*)gradient);
186  }
187 
188 private:
189  Sphere m_sphere;
190 };
191 
192 #endif
GfxTL::IndexedIterator
Definition: IndexedIterator.h:8
Sphere::RequiredSamples
@ RequiredSamples
Definition: Sphere.h:32
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
SphereLevMarFunc
Definition: SpherePrimitiveShape.h:169
Sphere.h
Mean.h
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
SpherePrimitiveShape::SpherePrimitiveShape
SpherePrimitiveShape()
Definition: SpherePrimitiveShape.h:25
PrimitiveShape::SignedDistance
virtual float SignedDistance(const Vec3f &p) const =0
SphereLevMarFunc::operator()
void operator()(const float *x, float *gradient) const
Definition: SpherePrimitiveShape.h:183
BitmapPrimitiveShape
Definition: BitmapPrimitiveShape.h:31
SphereLevMarFunc::SphereLevMarFunc
SphereLevMarFunc(const Sphere &s)
Definition: SpherePrimitiveShape.h:172
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
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
PrimitiveShape::Distance
virtual float Distance(const Vec3f &p) const =0
MiscLib::Vector< size_t >
PrimitiveShape::SerializedSize
virtual size_t SerializedSize() const =0
SpherePrimitiveShape::RequiredSamples
unsigned int RequiredSamples() const
Definition: SpherePrimitiveShape.h:34
LevMarFunc.h
MiscLib::Vector< Point >::const_iterator
const typedef Point * const_iterator
Definition: Vector.h:25
LowStretchSphereParametrization.h
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
LowStretchSphereParametrization
Definition: LowStretchSphereParametrization.h:13
SpherePrimitiveShape::Internal
const Sphere & Internal() const
Definition: SpherePrimitiveShape.h:99
SpherePrimitiveShape
class DLL_LINKAGE SpherePrimitiveShape
Definition: PrimitiveShapeVisitor.h:9
AABox.h
Covariance.h
BitmapPrimitiveShape::Init
bool Init(bool binary, std::istream *i)
Definition: BitmapPrimitiveShape.cpp:37
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 >
SpherePrimitiveShape::Serialize
virtual void Serialize(float *array) const
Definition: SpherePrimitiveShape.h:72
IndexedIterator.h
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
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
Jacobi.h
BitmapPrimitiveShape::Parameters
virtual void Parameters(const Vec3f &p, std::pair< float, float > *param) const =0
SpherePrimitiveShape::SerializedFloatSize
virtual size_t SerializedFloatSize() const
Definition: SpherePrimitiveShape.h:78
DLL_LINKAGE
#define DLL_LINKAGE
Definition: basic.h:12
PrimitiveShape::SignedDistanceFunc
virtual LevMarFunc< float > * SignedDistanceFunc() const =0
SphereLevMarFunc::operator()
float operator()(const float *x) const
Definition: SpherePrimitiveShape.h:177
SpherePrimitiveShape::ParametrizationType
LowStretchSphereParametrization ParametrizationType
Definition: SpherePrimitiveShape.h:23
Sphere
Definition: Sphere.h:27
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
SpherePrimitiveShape
Definition: SpherePrimitiveShape.h:20
MathHelper.h
LowStretchSphereParametrization::Parameters
void Parameters(const Vec3f &p, std::pair< float, float > *param) const
Definition: LowStretchSphereParametrization.h:57
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
BitmapPrimitiveShape::WrapBitmap
virtual void WrapBitmap(const GfxTL::AABox< GfxTL::Vector2Df > &bbox, float epsilon, bool *uwrap, bool *vwrap) const =0
PrimitiveShape::Clone
virtual PrimitiveShape * Clone() const =0
PrimitiveShape::Visit
virtual void Visit(PrimitiveShapeVisitor *visitor) const =0