CylinderPrimitiveShape.h
Go to the documentation of this file.
1 #ifndef CYLINDERPRIMITIVESHAPE_HEADER
2 #define CYLINDERPRIMITIVESHAPE_HEADER
3 #include "BitmapPrimitiveShape.h"
4 #include "Cylinder.h"
5 #include "LevMarFunc.h"
6 
7 #ifndef DLL_LINKAGE
8 #define DLL_LINKAGE
9 #endif
10 
12 {
13 public:
15  size_t Identifier() const;
16 
17  unsigned int
19  {
21  }
22 
23  CylinderPrimitiveShape(const Cylinder& cylinder);
24  PrimitiveShape* Clone() const;
25  bool Init(const Vec3f& pointA, const Vec3f& pointB, const Vec3f& normalA, const Vec3f& normalB);
26 
27  bool
28  Init(bool binary, std::istream* i)
29  {
30  return BitmapPrimitiveShape::Init(binary, i);
31  }
32 
33  float Distance(const Vec3f& p) const;
34  float SignedDistance(const Vec3f& p) const;
35  float NormalDeviation(const Vec3f& p, const Vec3f& n) const;
36  void
37  DistanceAndNormalDeviation(const Vec3f& p, const Vec3f& n, std::pair<float, float>* dn) const;
38  void Project(const Vec3f& p, Vec3f* pp) const;
39  void Normal(const Vec3f& p, Vec3f* n) const;
40  unsigned int ConfidenceTests(unsigned int numTests,
41  float epsilon,
42  float normalThresh,
43  float rms,
44  const PointCloud& pc,
45  const MiscLib::Vector<size_t>& indices) const;
46  void Description(std::string* s) const;
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  size_t SerializedSize() const;
61 
62  virtual void
63  Serialize(float* array) const
64  {
65  m_cylinder.Serialize(array);
66  }
67 
68  virtual size_t
70  {
71  return m_cylinder.SerializedFloatSize();
72  }
73 
74  void Transform(float scale, const Vec3f& translate);
75  void Transform(const GfxTL::MatrixXX<3, 3, float>& rot, const GfxTL::Vector3Df& trans);
76  void Visit(PrimitiveShapeVisitor* visitor) const;
78  const PointCloud& pc,
81  float distThresh,
83  bool Similar(float tolerance, const CylinderPrimitiveShape& shape) const;
84 
85  const Cylinder&
86  Internal() const
87  {
88  return m_cylinder;
89  }
90 
91  float Height() const;
92  float MinHeight() const;
93  float MaxHeight() const;
94 
95  void Parameters(const Vec3f& p, std::pair<float, float>* param) const;
96  void Parameters(
99  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
102  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
103  bool InSpace(float u, float v, Vec3f* p, Vec3f* n) const;
104  void BitmapExtent(float epsilon,
106  MiscLib::Vector<std::pair<float, float>>* params,
107  size_t* uextent,
108  size_t* vextent);
109  void InBitmap(const std::pair<float, float>& param,
110  float epsilon,
111  const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
112  size_t uextent,
113  size_t vextent,
114  std::pair<int, int>* inBmp) const;
116  float epsilon,
117  bool* uwrap,
118  bool* vwrap) const;
120  float epsilon,
121  size_t uextent,
122  size_t vextent,
123  MiscLib::Vector<char>* bmp) const;
124  void SetExtent(const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
125  const MiscLib::Vector<int>& componentsImg,
126  size_t uextent,
127  size_t vextent,
128  float epsilon,
129  int label);
130  bool InSpace(size_t u,
131  size_t v,
132  float epsilon,
133  const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
134  size_t uextent,
135  size_t vextent,
136  Vec3f* p,
137  Vec3f* n) const;
138 
139 private:
140  template <class IteratorT>
141  void ParametersImpl(IteratorT begin,
142  IteratorT end,
143  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
144 
145 private:
146  Cylinder m_cylinder;
147  bool m_clip;
148  float m_minPhi;
149  float m_maxPhi;
150 };
151 
152 template <class IteratorT>
153 void
154 CylinderPrimitiveShape::ParametersImpl(IteratorT begin,
155  IteratorT end,
156  MiscLib::Vector<std::pair<float, float>>* bmpParams) const
157 {
158  bmpParams->resize(end - begin);
159  size_t j = 0;
160  for (IteratorT i = begin; i != end; ++i, ++j)
161  {
162  m_cylinder.Parameters(*i, &(*bmpParams)[j]);
163  (*bmpParams)[j].second = (*bmpParams)[j].second * m_cylinder.Radius();
164  }
165 }
166 
168 {
169 public:
170  CylinderLevMarFunc(const Cylinder& cy) : m_cylinder(cy)
171  {
172  }
173 
174  float
175  operator()(const float* x) const
176  {
177  return m_cylinder.SignedDistance(*((const Vec3f*)x));
178  }
179 
180  void
181  operator()(const float* x, float* gradient) const
182  {
183  m_cylinder.Normal(*((const Vec3f*)x), (Vec3f*)gradient);
184  }
185 
186 private:
187  Cylinder m_cylinder;
188 };
189 
190 #endif
GfxTL::IndexedIterator
Definition: IndexedIterator.h:8
Cylinder::Radius
float Radius() const
Definition: Cylinder.cpp:318
LevMarFunc< float >
GfxTL::VectorXD
Definition: MatrixXX.h:24
PrimitiveShape::Identifier
virtual size_t Identifier() const =0
Cylinder.h
CylinderLevMarFunc
Definition: CylinderPrimitiveShape.h:167
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
BitmapPrimitiveShape::PreWrapBitmap
virtual void PreWrapBitmap(const GfxTL::AABox< GfxTL::Vector2Df > &bbox, float epsilon, size_t uextent, size_t vextent, MiscLib::Vector< char > *bmp) const
Definition: BitmapPrimitiveShape.cpp:16
Cylinder::RequiredSamples
@ RequiredSamples
Definition: Cylinder.h:32
PrimitiveShape::SignedDistance
virtual float SignedDistance(const Vec3f &p) const =0
BitmapPrimitiveShape
Definition: BitmapPrimitiveShape.h:31
CylinderPrimitiveShape::RequiredSamples
unsigned int RequiredSamples() const
Definition: CylinderPrimitiveShape.h:18
Cylinder::Parameters
void Parameters(const Vec3f &p, std::pair< float, float > *param) const
Definition: Cylinder.cpp:298
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
GfxTL::MatrixXX
Definition: MatrixXX.h:28
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
LevMarFunc.h
MiscLib::Vector< Point >::const_iterator
const typedef Point * const_iterator
Definition: Vector.h:25
CylinderPrimitiveShape
class DLL_LINKAGE CylinderPrimitiveShape
Definition: PrimitiveShapeVisitor.h:10
PrimitiveShape::Description
virtual void Description(std::string *s) const =0
CylinderPrimitiveShape::Init
bool Init(bool binary, std::istream *i)
Definition: CylinderPrimitiveShape.h:28
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
CylinderPrimitiveShape
Definition: CylinderPrimitiveShape.h:11
PrimitiveShapeVisitor
Definition: PrimitiveShapeVisitor.h:14
CylinderLevMarFunc::operator()
float operator()(const float *x) const
Definition: CylinderPrimitiveShape.h:175
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 >
CylinderPrimitiveShape::SerializedFloatSize
virtual size_t SerializedFloatSize() const
Definition: CylinderPrimitiveShape.h:69
PointCloud
Definition: PointCloud.h:85
CylinderPrimitiveShape::Serialize
virtual void Serialize(float *array) const
Definition: CylinderPrimitiveShape.h:63
CylinderPrimitiveShape::Internal
const Cylinder & Internal() const
Definition: CylinderPrimitiveShape.h:86
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
BitmapPrimitiveShape::Parameters
virtual void Parameters(const Vec3f &p, std::pair< float, float > *param) const =0
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
CylinderLevMarFunc::CylinderLevMarFunc
CylinderLevMarFunc(const Cylinder &cy)
Definition: CylinderPrimitiveShape.h:170
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
Cylinder
Definition: Cylinder.h:22
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
CylinderLevMarFunc::operator()
void operator()(const float *x, float *gradient) const
Definition: CylinderPrimitiveShape.h:181
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