DGtal 1.4.2
Loading...
Searching...
No Matches
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
54namespace 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
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).
Aim: This class specializes the Voronoi covariance measure for digital surfaces. It adds notably the ...
const Surfel2Normals & mapSurfel2Normals() const
void selfDisplay(std::ostream &out) const
VoronoiCovarianceMeasure< Space, Metric > VCM
the Voronoi Covariance Measure
Surfel2Normals mySurfel2Normals
Stores for each surfel its vcm normal and its trivial normal.
VCM myVCM
Stores the voronoi covariance measure of the point embedding of the surface.
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)
Point2EigenStructure myPt2EigenStructure
Stores for each point p its convolved VCM, i.e. VCM( chi_r( p ) )
bool getChiVCMEigenvalues(VectorN &values, Surfel s) const
const Point2EigenStructure & mapPoint2ChiVCM() const
BOOST_CONCEPT_ASSERT((concepts::CUnaryFunctor< KernelFunction, Point, Scalar >))
TDigitalSurfaceContainer DigitalSurfaceContainer
the chosen container
CountedConstPtrOrConstPtr< Surface > mySurface
(possibly secure) alias of the digital surface
DigitalSurfaceContainer::KSpace KSpace
the cellular space
BOOST_CONCEPT_ASSERT((concepts::CSeparableMetric< TSeparableMetric >))
Surfel2PointEmbedding mySurfelEmbedding
The chosen embedding for the surfels.
PointOutputIterator getPoints(PointOutputIterator outIt, Surfel s) const
Surface::ConstIterator ConstIterator
the iterator for traversing the surface
DigitalSurface< DigitalSurfaceContainer > Surface
the chosen digital surface
EigenDecomposition< KSpace::dimension, Scalar > LinearAlgebraTool
diagonalizer (nD).
std::map< Point, EigenStructure > Point2EigenStructure
the map Point -> EigenStructure
bool getChiVCMEigenStructure(VectorN &values, MatrixNN &vectors, Surfel s) const
VoronoiCovarianceMeasureOnDigitalSurface & operator=(const VoronoiCovarianceMeasureOnDigitalSurface &other)
std::map< Surfel, Normals > Surfel2Normals
the map Surfel -> Normals
VoronoiCovarianceMeasureOnDigitalSurface(const VoronoiCovarianceMeasureOnDigitalSurface &other)
Surfel2PointEmbedding surfelEmbedding() const
the chosen embedding Surfel -> Point(s)
Aim: This class precomputes the Voronoi Covariance Measure of a set of points. It can compute the cov...
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 ClosedIntegerHalfPlane< TSpace > &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.