DGtal 1.4.0
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
Surfel2Normals mySurfel2Normals
Stores for each surfel its vcm normal and its trivial normal.
Surface::ConstIterator ConstIterator
the iterator for traversing the surface
VCM myVCM
Stores the voronoi covariance measure of the point embedding of the surface.
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).
const Point2EigenStructure & mapPoint2ChiVCM() const
BOOST_CONCEPT_ASSERT((concepts::CUnaryFunctor< KernelFunction, Point, Scalar >))
CountedConstPtrOrConstPtr< Surface > mySurface
(possibly secure) alias of the digital surface
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
VoronoiCovarianceMeasureOnDigitalSurface & operator=(const VoronoiCovarianceMeasureOnDigitalSurface &other)
DigitalSurfaceContainer::KSpace KSpace
the cellular space
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.