DGtal  0.9.3beta
VoronoiCovarianceMeasureOnDigitalSurface.h
1 
17 #pragma once
18 
31 #if defined(VoronoiCovarianceMeasureOnDigitalSurface_RECURSES)
32 #error Recursive header files inclusion detected in VoronoiCovarianceMeasureOnDigitalSurface.h
33 #else // defined(VoronoiCovarianceMeasureOnDigitalSurface_RECURSES)
34 
35 #define VoronoiCovarianceMeasureOnDigitalSurface_RECURSES
36 
37 #if !defined VoronoiCovarianceMeasureOnDigitalSurface_h
38 
39 #define VoronoiCovarianceMeasureOnDigitalSurface_h
40 
42 // Inclusions
43 #include <iostream>
44 #include "DGtal/base/Common.h"
45 #include "DGtal/base/CountedConstPtrOrConstPtr.h"
46 #include "DGtal/kernel/Point2ScalarFunctors.h"
47 #include "DGtal/math/linalg/EigenDecomposition.h"
48 #include "DGtal/topology/CDigitalSurfaceContainer.h"
49 #include "DGtal/topology/DigitalSurface.h"
50 #include "DGtal/geometry/volumes/distance/CSeparableMetric.h"
51 #include "DGtal/geometry/volumes/estimation/VoronoiCovarianceMeasure.h"
53 
54 namespace DGtal
55 {
56 
59 
61  // template class VoronoiCovarianceMeasureOnDigitalSurface
84  template <typename TDigitalSurfaceContainer, typename TSeparableMetric,
85  typename TKernelFunction>
87  {
90  // ----------------------- public types ------------------------------
91  public:
92  typedef TDigitalSurfaceContainer DigitalSurfaceContainer;
93  typedef TSeparableMetric Metric;
94  typedef TKernelFunction KernelFunction;
96  typedef typename DigitalSurfaceContainer::KSpace KSpace;
97  typedef typename DigitalSurfaceContainer::Surfel Surfel;
98  typedef typename KSpace::SCell SCell;
99  typedef typename KSpace::Space Space;
100  typedef typename KSpace::Point Point;
102  typedef typename VCM::Scalar Scalar;
105  typedef typename VCM::VectorN VectorN;
106  typedef typename VCM::MatrixNN MatrixNN;
107 
109 
111  struct EigenStructure {
112  VectorN values;
113  MatrixNN vectors;
114  };
116  struct Normals {
117  VectorN vcmNormal;
118  VectorN trivialNormal;
119  };
120  typedef std::map<Point,EigenStructure> Point2EigenStructure;
121  typedef std::map<Surfel,Normals> Surfel2Normals;
122 
123  // ----------------------- Standard services ------------------------------
124  public:
125 
130 
161  Surfel2PointEmbedding _surfelEmbedding,
162  Scalar _R, Scalar _r,
163  KernelFunction chi_r,
164  Scalar t = 2.5, Metric aMetric = Metric(),
165  bool verbose = false );
166 
173  Scalar R() const;
176  Scalar r() const;
177 
181  Scalar radiusTrivial() const;
182 
188  template <typename PointOutputIterator>
189  PointOutputIterator getPoints( PointOutputIterator outIt, Surfel s ) const;
190 
192  const Surfel2Normals& mapSurfel2Normals() const;
193 
197  const Point2EigenStructure& mapPoint2ChiVCM() const;
198 
205  bool getChiVCMEigenvalues( VectorN& values, Surfel s ) const;
206 
214  bool getChiVCMEigenStructure( VectorN& values, MatrixNN& vectors, Surfel s ) const;
215 
216  // ----------------------- Interface --------------------------------------
217  public:
218 
219 
224  void selfDisplay ( std::ostream & out ) const;
225 
230  bool isValid() const;
231 
232  // ------------------------- Protected Datas ------------------------------
233  protected:
239  KernelFunction myChi;
241  VCM myVCM;
247  Point2EigenStructure myPt2EigenStructure;
249  Surfel2Normals mySurfel2Normals;
250 
251  // ------------------------- Private Datas --------------------------------
252  private:
253 
254  // ------------------------- Hidden services ------------------------------
255  protected:
256 
262 
263  private:
264 
271 
279 
280  // ------------------------- Internals ------------------------------------
281  private:
282 
283  }; // end of class VoronoiCovarianceMeasureOnDigitalSurface
284 
285 
292  template <typename TDigitalSurfaceContainer, typename TSeparableMetric, typename TKernelFunction>
293  std::ostream&
294  operator<< ( std::ostream & out,
296 
297 } // namespace DGtal
298 
299 
301 // Includes inline functions.
302 #include "DGtal/geometry/surfaces/estimation/VoronoiCovarianceMeasureOnDigitalSurface.ih"
303 
304 // //
306 
307 #endif // !defined VoronoiCovarianceMeasureOnDigitalSurface_h
308 
309 #undef VoronoiCovarianceMeasureOnDigitalSurface_RECURSES
310 #endif // else defined(VoronoiCovarianceMeasureOnDigitalSurface_RECURSES)
void selfDisplay(std::ostream &out) const
TDigitalSurfaceContainer DigitalSurfaceContainer
the chosen container
Surfel2PointEmbedding mySurfelEmbedding
The chosen embedding for the surfels.
std::map< Point, EigenStructure > Point2EigenStructure
the map Point -> EigenStructure
DigitalSurfaceContainer::SurfelConstIterator ConstIterator
Aim: This class encapsulates its parameter class so that to indicate to the user that the object/poin...
Definition: ConstAlias.h:186
BOOST_CONCEPT_ASSERT((concepts::CDigitalSurfaceContainer< TDigitalSurfaceContainer >))
VoronoiCovarianceMeasure< Space, Metric > VCM
the Voronoi Covariance Measure
Aim: Smart or simple const pointer on T. It can be a smart pointer based on reference counts or a sim...
Structure to hold the normals for each surfel (the VCM one and the trivial one).
Aim: This class provides methods to compute the eigen decomposition of a matrix. Its objective is to ...
Aim: Represents a set of n-1-cells in a nD space, together with adjacency relation between these cell...
const Point2EigenStructure & mapPoint2ChiVCM() const
VoronoiCovarianceMeasureOnDigitalSurface & operator=(const VoronoiCovarianceMeasureOnDigitalSurface &other)
PointOutputIterator getPoints(PointOutputIterator outIt, Surfel s) const
Aim: Implements basic operations that will be used in Point and Vector classes.
Definition: PointVector.h:141
Aim: Defines a unary functor, which associates arguments to results.
Definition: CUnaryFunctor.h:89
Aim: implements basic MxN Matrix services (M,N>=1).
Definition: SimpleMatrix.h:75
Aim: This class specializes the Voronoi covariance measure for digital surfaces. It adds notably the ...
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
Point2EigenStructure myPt2EigenStructure
Stores for each point p its convolved VCM, i.e. VCM( chi_r( p ) )
VCM myVCM
Stores the voronoi covariance measure of the point embedding of the surface.
CountedConstPtrOrConstPtr< Surface > surface() const
the const-aliased digital surface.
DigitalSurfaceContainer::KSpace KSpace
the cellular space
DGtal is the top-level namespace which contains all DGtal functions and types.
Aim: defines the concept of separable metrics.
Surfel2Normals mySurfel2Normals
Stores for each surfel its vcm normal and its trivial normal.
double Scalar
the type for "real" numbers.
Surface::ConstIterator ConstIterator
the iterator for traversing the surface
DigitalSurface< DigitalSurfaceContainer > Surface
the chosen digital surface
Surfel2PointEmbedding surfelEmbedding() const
the chosen embedding Surfel -> Point(s)
bool getChiVCMEigenStructure(VectorN &values, MatrixNN &vectors, Surfel s) const
const Surfel2Normals & mapSurfel2Normals() const
Aim: The digital surface container concept describes a minimal set of inner types and methods so as t...
bool getChiVCMEigenvalues(VectorN &values, Surfel s) const
CountedConstPtrOrConstPtr< Surface > mySurface
(possibly secure) alias of the digital surface
Surfel2PointEmbedding
Possible embeddings for surfel as point(s)
EigenDecomposition< KSpace::dimension, Scalar > LinearAlgebraTool
diagonalizer (nD).
std::map< Surfel, Normals > Surfel2Normals
the map Surfel -> Normals