PlanePrimitiveShape.h
Go to the documentation of this file.
1 #ifndef PLANEPRIMITIVESHAPE_HEADER
2 #define PLANEPRIMITIVESHAPE_HEADER
3 #include "BitmapPrimitiveShape.h"
4 #include "LevMarFunc.h"
5 #include "Plane.h"
6 #include <GfxTL/AABox.h>
8 #include <GfxTL/MatrixXX.h>
9 #include <GfxTL/VectorXD.h>
10 
11 #ifndef DLL_LINKAGE
12 #define DLL_LINKAGE
13 #endif
14 
16 {
17 public:
18  PlanePrimitiveShape(const Vec3f& a, const Vec3f& b, const Vec3f& c);
19  PlanePrimitiveShape(const Plane& plane);
20  size_t Identifier() const;
21 
22  unsigned int
24  {
26  }
27 
28  PrimitiveShape* Clone() const;
29  float Distance(const Vec3f& p) const;
30  float SignedDistance(const Vec3f& p) const;
31  float NormalDeviation(const Vec3f& p, const Vec3f& n) const;
32  void
33  DistanceAndNormalDeviation(const Vec3f& p, const Vec3f& n, std::pair<float, float>* dn) const;
34  void Project(const Vec3f& p, Vec3f* pp) const;
35  void Normal(const Vec3f& p, Vec3f* n) const;
36  unsigned int ConfidenceTests(unsigned int numTests,
37  float epsilon,
38  float normalThresh,
39  float rms,
40  const PointCloud& pc,
41  const MiscLib::Vector<size_t>& indices) const;
42  void Description(std::string* s) const;
43  bool Fit(const PointCloud& pc,
44  float epsilon,
45  float normalThresh,
49  float epsilon,
50  float normalThresh,
53  std::pair<size_t, float>* score) const;
55  void Serialize(std::ostream* o, bool binary = true) const;
56  size_t SerializedSize() const;
57 
58  virtual void
59  Serialize(float* array) const
60  {
61  m_plane.Serialize(array);
62  }
63 
64  virtual size_t
66  {
67  return m_plane.SerializedFloatSize();
68  }
69 
70  void Transform(float scale, const Vec3f& translate);
71  void Transform(const GfxTL::MatrixXX<3, 3, float>& rot, const GfxTL::Vector3Df& trans);
72  void Visit(PrimitiveShapeVisitor* visitor) const;
73  bool Similar(float tolerance, const PlanePrimitiveShape&) const;
74 
75  const Plane&
76  Internal() const
77  {
78  return m_plane;
79  }
80 
81  void Parameters(const Vec3f& p, std::pair<float, float>* param) const;
82  void Parameters(
85  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
88  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
89  bool InSpace(float u, float v, Vec3f* p, Vec3f* n) const;
90  void BitmapExtent(float epsilon,
92  MiscLib::Vector<std::pair<float, float>>* params,
93  size_t* uextent,
94  size_t* vextent);
95  void InBitmap(const std::pair<float, float>& param,
96  float epsilon,
98  size_t uextent,
99  size_t vextent,
100  std::pair<int, int>* inBmp) const;
102  float epsilon,
103  bool* uwrap,
104  bool* vwrap) const;
105  void SetExtent(const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
106  const MiscLib::Vector<int>& componentsImg,
107  size_t uextent,
108  size_t vextent,
109  float epsilon,
110  int label);
111  bool InSpace(size_t u,
112  size_t v,
113  float epsilon,
114  const GfxTL::AABox<GfxTL::Vector2Df>& bbox,
115  size_t uextent,
116  size_t vextent,
117  Vec3f* p,
118  Vec3f* n) const;
119 
120 private:
121  template <class IteratorT>
122  void ParametersImpl(IteratorT begin,
123  IteratorT end,
124  MiscLib::Vector<std::pair<float, float>>* bmpParams) const;
125 
126 private:
127  Plane m_plane;
129 };
130 
131 template <class IteratorT>
132 void
133 PlanePrimitiveShape::ParametersImpl(IteratorT begin,
134  IteratorT end,
135  MiscLib::Vector<std::pair<float, float>>* bmpParams) const
136 {
137  bmpParams->resize(end - begin);
138  size_t j = 0;
139  for (IteratorT i = begin; i != end; ++i, ++j)
140  {
141  Vec3f pp = *i - m_plane.getPosition();
142  (*bmpParams)[j].first = pp.dot(m_hcs[0].Data());
143  (*bmpParams)[j].second = pp.dot(m_hcs[1].Data());
144  }
145 }
146 
148 {
149 public:
150  PlaneLevMarFunc(const Plane& plane)
151  {
152  for (unsigned int i = 0; i < 3; ++i)
153  {
154  m_plane[i] = plane.getNormal()[i];
155  }
156  m_plane[3] = plane.SignedDistToOrigin();
157  }
158 
159  float
160  operator()(const float* x) const
161  {
162  return m_plane[0] * x[0] + m_plane[1] * x[1] + m_plane[2] * x[2] - m_plane[3];
163  }
164 
165  void
166  operator()(const float* x, float* gradient) const
167  {
168  for (unsigned int i = 0; i < 3; ++i)
169  {
170  gradient[i] = m_plane[i];
171  }
172  }
173 
174 private:
175  GfxTL::Vector4Df m_plane;
176 };
177 
178 #endif
GfxTL::IndexedIterator
Definition: IndexedIterator.h:8
PlaneLevMarFunc
Definition: PlanePrimitiveShape.h:147
Plane::SignedDistToOrigin
float SignedDistToOrigin() const
Definition: Plane.h:86
GfxTL::HyperplaneCoordinateSystem< float, 3 >
LevMarFunc< float >
GfxTL::VectorXD
Definition: MatrixXX.h:24
PrimitiveShape::Identifier
virtual size_t Identifier() const =0
PlanePrimitiveShape::SerializedFloatSize
virtual size_t SerializedFloatSize() const
Definition: PlanePrimitiveShape.h:65
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
Vec3f
Definition: basic.h:17
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
PrimitiveShape
PrimtiveShape is a shape primitive in conjunction with a parametrization.
Definition: PrimitiveShape.h:34
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
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
PlaneLevMarFunc::operator()
void operator()(const float *x, float *gradient) const
Definition: PlanePrimitiveShape.h:166
MiscLib::Vector< size_t >
VectorXD.h
PrimitiveShape::SerializedSize
virtual size_t SerializedSize() const =0
Plane.h
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
Plane::getPosition
const Vec3f & getPosition() const
Definition: Plane.h:78
armarx::ctrlutil::a
double a(double t, double a0, double j)
Definition: CtrlUtil.h:45
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
PlanePrimitiveShape
Definition: PlanePrimitiveShape.h:15
PrimitiveShapeVisitor
Definition: PrimitiveShapeVisitor.h:14
PlanePrimitiveShape::Internal
const Plane & Internal() const
Definition: PlanePrimitiveShape.h:76
AABox.h
HyperplaneCoordinateSystem.h
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
MatrixXX.h
PointCloud
Definition: PointCloud.h:85
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
Vec3f::dot
float dot(const Vec3f &v) const
Definition: basic.h:104
Plane::getNormal
const Vec3f & getNormal() const
Definition: Plane.h:72
BitmapPrimitiveShape::Parameters
virtual void Parameters(const Vec3f &p, std::pair< float, float > *param) const =0
PlanePrimitiveShape::RequiredSamples
unsigned int RequiredSamples() const
Definition: PlanePrimitiveShape.h:23
PlaneLevMarFunc::operator()
float operator()(const float *x) const
Definition: PlanePrimitiveShape.h:160
Plane
Definition: Plane.h:18
DLL_LINKAGE
#define DLL_LINKAGE
Definition: basic.h:12
PrimitiveShape::SignedDistanceFunc
virtual LevMarFunc< float > * SignedDistanceFunc() const =0
Plane::RequiredSamples
@ RequiredSamples
Definition: Plane.h:23
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
PlaneLevMarFunc::PlaneLevMarFunc
PlaneLevMarFunc(const Plane &plane)
Definition: PlanePrimitiveShape.h:150
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
PlanePrimitiveShape::Serialize
virtual void Serialize(float *array) const
Definition: PlanePrimitiveShape.h:59
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
GfxTL::AABox
Definition: AABox.h:19
PlanePrimitiveShape
class DLL_LINKAGE PlanePrimitiveShape
Definition: PrimitiveShapeVisitor.h:8
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