ConePrimitiveShape.h
Go to the documentation of this file.
1 #ifndef CONEPRIMITIVESHAPE_HEADER
2 #define CONEPRIMITIVESHAPE_HEADER
3 #include "BitmapPrimitiveShape.h"
4 #include "Cone.h"
5 #include "LevMarFunc.h"
6 
7 #ifndef DLL_LINKAGE
8 #define DLL_LINKAGE
9 #endif
10 
12 {
13 public:
14  size_t Identifier() const;
15 
16  unsigned int
18  {
19  return Cone::RequiredSamples;
20  }
21 
22  ConePrimitiveShape(const Cone& cone);
23  PrimitiveShape* Clone() const;
24  float Distance(const Vec3f& p) const;
25  float SignedDistance(const Vec3f& p) const;
26  float NormalDeviation(const Vec3f& p, const Vec3f& n) const;
27  void
28  DistanceAndNormalDeviation(const Vec3f& p, const Vec3f& n, std::pair<float, float>* dn) const;
29  void Project(const Vec3f& p, Vec3f* pp) const;
30  void Normal(const Vec3f& p, Vec3f* n) const;
31  unsigned int ConfidenceTests(unsigned int numTests,
32  float epsilon,
33  float normalThresh,
34  float rms,
35  const PointCloud& pc,
36  const MiscLib::Vector<size_t>& indices) const;
37  void Description(std::string* s) const;
38  bool Fit(const PointCloud& pc,
39  float epsilon,
40  float normalThresh,
44  float epsilon,
45  float normalThresh,
48  std::pair<size_t, float>* score) const;
50  void Serialize(std::ostream* o, bool binary = true) const;
51  size_t SerializedSize() const;
52 
53  virtual void
54  Serialize(float* array) const
55  {
56  m_cone.Serialize(array);
57  }
58 
59  virtual size_t
61  {
62  return m_cone.SerializedFloatSize();
63  }
64 
65  void Transform(float scale, const Vec3f& translate);
66  void Transform(const GfxTL::MatrixXX<3, 3, float>& rot, const GfxTL::Vector3Df& trans);
67  void Visit(PrimitiveShapeVisitor* visitor) const;
69  const PointCloud& pc,
72  float distThresh,
74  bool Similar(float tolerance, const ConePrimitiveShape& shape) const;
75 
76  const Cone&
77  Internal() const
78  {
79  return m_cone;
80  }
81 
82  void Parameters(const Vec3f& p, std::pair<float, float>* param) const;
83  void Parameters(
86  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
89  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
90  bool InSpace(float u, float v, Vec3f* p, Vec3f* n) const;
91  void BitmapExtent(float epsilon,
93  MiscLib::Vector<std::pair<float, float>>* params,
94  size_t* uextent,
95  size_t* vextent);
96  void InBitmap(const std::pair<float, float>& param,
97  float epsilon,
99  size_t uextent,
100  size_t vextent,
101  std::pair<int, int>* inBmp) const;
103  float epsilon,
104  size_t uextent,
105  size_t vextent,
106  MiscLib::Vector<char>* bmp) 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  void SetExtent(const GfxTL::AABox<GfxTL::Vector2Df>& bbox);
124  bool InSpace(size_t u,
125  size_t v,
126  float epsilon,
127  const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
128  size_t uextent,
129  size_t vextent,
130  Vec3f* p,
131  Vec3f* n) const;
132 
133 private:
134  template <class IteratorT>
135  void ParametersImpl(IteratorT begin,
136  IteratorT end,
137  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
138 
139 private:
140  Cone m_cone;
141 };
142 
143 template <class IteratorT>
144 void
145 ConePrimitiveShape::ParametersImpl(IteratorT begin,
146  IteratorT end,
147  MiscLib::Vector<std::pair<float, float>>* bmpParams) const
148 {
149  bmpParams->resize(end - begin);
150  size_t j = 0;
151  for (IteratorT i = begin; i != end; ++i, ++j)
152  {
153  m_cone.Parameters(*i, &(*bmpParams)[j]);
154  }
155  if (m_cone.Angle() < float(M_PI / 4)) // angle of cone less than 45 degrees
156  {
157  for (size_t j = 0; j < bmpParams->size(); ++j)
158  {
159  float r = m_cone.RadiusAtLength((*bmpParams)[j].first);
160  // convert to arc length and centralize
161  (*bmpParams)[j].second = ((*bmpParams)[j].second - float(M_PI)) * r;
162  }
163  }
164  else
165  {
166  for (size_t j = 0; j < bmpParams->size(); ++j)
167  {
168  float l = (*bmpParams)[j].first;
169  (*bmpParams)[j].first = std::sin((*bmpParams)[j].second) * l;
170  (*bmpParams)[j].second = std::cos((*bmpParams)[j].second) * l;
171  }
172  }
173 }
174 
175 class DLL_LINKAGE ConeLevMarFunc : public LevMarFunc<float>
176 {
177 public:
178  ConeLevMarFunc(const Cone& c) : m_cone(c)
179  {
180  }
181 
182  float
183  operator()(const float* x) const
184  {
185  return m_cone.SignedDistance(*((const Vec3f*)x));
186  }
187 
188  void
189  operator()(const float* x, float* gradient) const
190  {
191  m_cone.Normal(*((const Vec3f*)x), (Vec3f*)gradient);
192  }
193 
194 private:
195  Cone m_cone;
196 };
197 
198 #endif
GfxTL::IndexedIterator
Definition: IndexedIterator.h:8
LevMarFunc< float >
GfxTL::VectorXD
Definition: MatrixXX.h:24
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
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
Cone::RequiredSamples
@ RequiredSamples
Definition: Cone.h:36
ConePrimitiveShape
Definition: ConePrimitiveShape.h:11
PrimitiveShape::SignedDistance
virtual float SignedDistance(const Vec3f &p) const =0
BitmapPrimitiveShape
Definition: BitmapPrimitiveShape.h:31
BitmapPrimitiveShape::InSpace
virtual bool InSpace(float u, float v, Vec3f *p, Vec3f *n) const =0
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
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
ConePrimitiveShape
class DLL_LINKAGE ConePrimitiveShape
Definition: PrimitiveShapeVisitor.h:11
LevMarFunc.h
MiscLib::Vector< Point >::const_iterator
const typedef Point * const_iterator
Definition: Vector.h:25
PrimitiveShape::Description
virtual void Description(std::string *s) const =0
ConePrimitiveShape::Internal
const Cone & Internal() const
Definition: ConePrimitiveShape.h:77
PrimitiveShape::DistanceAndNormalDeviation
virtual void DistanceAndNormalDeviation(const Vec3f &p, const Vec3f &n, std::pair< float, float > *dn) const =0
M_PI
#define M_PI
Definition: MathTools.h:17
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
ConeLevMarFunc::operator()
void operator()(const float *x, float *gradient) const
Definition: ConePrimitiveShape.h:189
Cone
Definition: Cone.h:24
PrimitiveShapeVisitor
Definition: PrimitiveShapeVisitor.h:14
Cone.h
ConeLevMarFunc::operator()
float operator()(const float *x) const
Definition: ConePrimitiveShape.h:183
Cone::Parameters
void Parameters(const Vec3f &p, std::pair< float, float > *param) const
Definition: Cone.cpp:492
Cone::Angle
float Angle() const
Definition: Cone.h:389
ConeLevMarFunc
Definition: ConePrimitiveShape.h:175
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
Cone::RadiusAtLength
float RadiusAtLength(float length) const
Definition: Cone.h:413
MiscLib::RefCountPtr< PrimitiveShape >
ConePrimitiveShape::Serialize
virtual void Serialize(float *array) const
Definition: ConePrimitiveShape.h:54
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
ConePrimitiveShape::SerializedFloatSize
virtual size_t SerializedFloatSize() const
Definition: ConePrimitiveShape.h:60
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
float
#define float
Definition: 16_Level.h:22
BitmapPrimitiveShape::Parameters
virtual void Parameters(const Vec3f &p, std::pair< float, float > *param) const =0
ConeLevMarFunc::ConeLevMarFunc
ConeLevMarFunc(const Cone &c)
Definition: ConePrimitiveShape.h:178
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
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
ConePrimitiveShape::RequiredSamples
unsigned int RequiredSamples() const
Definition: ConePrimitiveShape.h:17
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