DGtal  1.5.beta
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)
35 #define VoronoiCovarianceMeasureOnDigitalSurface_RECURSES
36 
37 #if !defined VoronoiCovarianceMeasureOnDigitalSurface_h
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;
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 {
114  };
116  struct Normals {
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 
182 
188  template <typename PointOutputIterator>
189  PointOutputIterator getPoints( PointOutputIterator outIt, Surfel s ) const;
190 
193 
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:
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)
Aim: This class encapsulates its parameter class so that to indicate to the user that the object/poin...
Definition: ConstAlias.h:187
Aim: Represents a set of n-1-cells in a nD space, together with adjacency relation between these cell...
DigitalSurfaceContainer::SurfelConstIterator ConstIterator
Aim: This class provides methods to compute the eigen decomposition of a matrix. Its objective is to ...
Aim: implements basic MxN Matrix services (M,N>=1).
Definition: SimpleMatrix.h:76
Aim: This class specializes the Voronoi covariance measure for digital surfaces. It adds notably the ...
void selfDisplay(std::ostream &out) const
Surfel2Normals mySurfel2Normals
Stores for each surfel its vcm normal and its trivial normal.
const Point2EigenStructure & mapPoint2ChiVCM() const
Surface::ConstIterator ConstIterator
the iterator for traversing the surface
VCM myVCM
Stores the voronoi covariance measure of the point embedding of the surface.
VoronoiCovarianceMeasureOnDigitalSurface & operator=(const VoronoiCovarianceMeasureOnDigitalSurface &other)
std::map< Surfel, Normals > Surfel2Normals
the map Surfel -> Normals
CountedConstPtrOrConstPtr< Surface > surface() const
the const-aliased digital surface.
BOOST_CONCEPT_ASSERT((concepts::CDigitalSurfaceContainer< TDigitalSurfaceContainer >))
VoronoiCovarianceMeasureOnDigitalSurface(ConstAlias< Surface > _surface, Surfel2PointEmbedding _surfelEmbedding, Scalar _R, Scalar _r, KernelFunction chi_r, Scalar t=2.5, Metric aMetric=Metric(), bool verbose=false)
DigitalSurface< DigitalSurfaceContainer > Surface
the chosen digital surface
Point2EigenStructure myPt2EigenStructure
Stores for each point p its convolved VCM, i.e. VCM( chi_r( p ) )
bool getChiVCMEigenvalues(VectorN &values, Surfel s) const
TDigitalSurfaceContainer DigitalSurfaceContainer
the chosen container
EigenDecomposition< KSpace::dimension, Scalar > LinearAlgebraTool
diagonalizer (nD).
BOOST_CONCEPT_ASSERT((concepts::CUnaryFunctor< KernelFunction, Point, Scalar >))
CountedConstPtrOrConstPtr< Surface > mySurface
(possibly secure) alias of the digital surface
const Surfel2Normals & mapSurfel2Normals() const
std::map< Point, EigenStructure > Point2EigenStructure
the map Point -> EigenStructure
BOOST_CONCEPT_ASSERT((concepts::CSeparableMetric< TSeparableMetric >))
Surfel2PointEmbedding mySurfelEmbedding
The chosen embedding for the surfels.
PointOutputIterator getPoints(PointOutputIterator outIt, Surfel s) const
VoronoiCovarianceMeasure< Space, Metric > VCM
the Voronoi Covariance Measure
bool getChiVCMEigenStructure(VectorN &values, MatrixNN &vectors, Surfel s) const
DigitalSurfaceContainer::KSpace KSpace
the cellular space
VoronoiCovarianceMeasureOnDigitalSurface(const VoronoiCovarianceMeasureOnDigitalSurface &other)
Surfel2PointEmbedding surfelEmbedding() const
the chosen embedding Surfel -> Point(s)
double Scalar
the type for "real" numbers.
DGtal is the top-level namespace which contains all DGtal functions and types.
std::ostream & operator<<(std::ostream &out, const ATu0v1< TKSpace, TLinearAlgebra > &object)
Surfel2PointEmbedding
Possible embeddings for surfel as point(s)
Represents a signed cell in a cellular grid space by its Khalimsky coordinates and a boolean value.
Structure to hold the normals for each surfel (the VCM one and the trivial one).
Aim: The digital surface container concept describes a minimal set of inner types and methods so as t...
Aim: defines the concept of separable metrics.
Aim: Defines a unary functor, which associates arguments to results.
Definition: CUnaryFunctor.h:90