DGtal 2.0.0
Loading...
Searching...
No Matches
DGtal::ShortcutsGeometry< TKSpace > Class Template Reference

Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes and surface in a few lines. The drawback is that you use specific types or objects, which could lead to faster code or more compact data structures. More...

#include <DGtal/helpers/ShortcutsGeometry.h>

Inheritance diagram for DGtal::ShortcutsGeometry< TKSpace >:
[legend]

Public Types

typedef Shortcuts< TKSpace > Base
 
typedef ShortcutsGeometry< TKSpace > Self
 
typedef TKSpace KSpace
 Digital cellular space.
 
typedef KSpace::Space Space
 Digital space.
 
typedef Space::Integer Integer
 Integer numbers.
 
typedef Space::Point Point
 Point with integer coordinates.
 
typedef Space::Vector Vector
 Vector with integer coordinates.
 
typedef Space::RealVector RealVector
 Vector with floating-point coordinates.
 
typedef Space::RealPoint RealPoint
 Point with floating-point coordinates.
 
typedef RealVector::Component Scalar
 Floating-point numbers.
 
typedef HyperRectDomain< SpaceDomain
 An (hyper-)rectangular domain.
 
typedef unsigned char GrayScale
 The type for 8-bits gray-scale elements.
 
typedef MPolynomial< Space::dimension, ScalarScalarPolynomial
 defines a multi-variate polynomial : RealPoint -> Scalar
 
typedef ImplicitPolynomial3Shape< SpaceImplicitShape3D
 
typedef GaussDigitizer< Space, ImplicitShape3DDigitizedImplicitShape3D
 defines the digitization of an implicit shape.
 
typedef ImageContainerBySTLVector< Domain, bool > BinaryImage
 defines a black and white image with (hyper-)rectangular domain.
 
typedef ImageContainerBySTLVector< Domain, GrayScaleGrayScaleImage
 defines a grey-level image with (hyper-)rectangular domain.
 
typedef ImageContainerBySTLVector< Domain, float > FloatImage
 defines a float image with (hyper-)rectangular domain.
 
typedef ImageContainerBySTLVector< Domain, double > DoubleImage
 defines a double image with (hyper-)rectangular domain.
 
typedef KSpace::SurfelSet SurfelSet
 defines a set of surfels
 
typedef LightImplicitDigitalSurface< KSpace, BinaryImageLightSurfaceContainer
 
typedef ::DGtal::DigitalSurface< LightSurfaceContainerLightDigitalSurface
 defines a connected digital surface over a binary image.
 
typedef SetOfSurfels< KSpace, SurfelSetExplicitSurfaceContainer
 defines a heavy container that represents any digital surface.
 
typedef ::DGtal::DigitalSurface< ExplicitSurfaceContainerDigitalSurface
 defines an arbitrary digital surface over a binary image.
 
typedef IndexedDigitalSurface< ExplicitSurfaceContainerIdxDigitalSurface
 defines a connected or not indexed digital surface.
 
typedef LightDigitalSurface::Surfel Surfel
 
typedef LightDigitalSurface::Cell Cell
 
typedef LightDigitalSurface::SCell SCell
 
typedef LightDigitalSurface::Vertex Vertex
 
typedef LightDigitalSurface::Arc Arc
 
typedef LightDigitalSurface::Face Face
 
typedef LightDigitalSurface::ArcRange ArcRange
 
typedef IdxDigitalSurface::Vertex IdxSurfel
 
typedef IdxDigitalSurface::Vertex IdxVertex
 
typedef IdxDigitalSurface::Arc IdxArc
 
typedef IdxDigitalSurface::ArcRange IdxArcRange
 
typedef std::set< IdxSurfelIdxSurfelSet
 
typedef std::vector< SurfelSurfelRange
 
typedef std::vector< CellCellRange
 
typedef std::vector< IdxSurfelIdxSurfelRange
 
typedef std::vector< ScalarScalars
 
typedef std::vector< RealVectorRealVectors
 
typedef std::vector< RealPointRealPoints
 
typedef ::DGtal::Statistic< ScalarScalarStatistic
 
typedef sgf::ShapePositionFunctor< ImplicitShape3DPositionFunctor
 
typedef sgf::ShapeNormalVectorFunctor< ImplicitShape3DNormalFunctor
 
typedef sgf::ShapeMeanCurvatureFunctor< ImplicitShape3DMeanCurvatureFunctor
 
typedef sgf::ShapeGaussianCurvatureFunctor< ImplicitShape3DGaussianCurvatureFunctor
 
typedef sgf::ShapeFirstPrincipalCurvatureFunctor< ImplicitShape3DFirstPrincipalCurvatureFunctor
 
typedef sgf::ShapeSecondPrincipalCurvatureFunctor< ImplicitShape3DSecondPrincipalCurvatureFunctor
 
typedef sgf::ShapeFirstPrincipalDirectionFunctor< ImplicitShape3DFirstPrincipalDirectionFunctor
 
typedef sgf::ShapeSecondPrincipalDirectionFunctor< ImplicitShape3DSecondPrincipalDirectionFunctor
 
typedef sgf::ShapePrincipalCurvaturesAndDirectionsFunctor< ImplicitShape3DPrincipalCurvaturesAndDirectionsFunctor
 
typedef functors::IIPrincipalCurvaturesAndDirectionsFunctor< Space >::Quantity CurvatureTensorQuantity
 
typedef std::vector< CurvatureTensorQuantityCurvatureTensorQuantities
 
typedef CorrectedNormalCurrentComputer< RealPoint, RealVectorCNCComputer
 
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, PositionFunctorTruePositionEstimator
 
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, NormalFunctorTrueNormalEstimator
 
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, MeanCurvatureFunctorTrueMeanCurvatureEstimator
 
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, GaussianCurvatureFunctorTrueGaussianCurvatureEstimator
 
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, FirstPrincipalCurvatureFunctorTrueFirstPrincipalCurvatureEstimator
 
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, SecondPrincipalCurvatureFunctorTrueSecondPrincipalCurvatureEstimator
 
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, FirstPrincipalDirectionFunctorTrueFirstPrincipalDirectionEstimator
 
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, SecondPrincipalDirectionFunctorTrueSecondPrincipalDirectionEstimator
 
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, PrincipalCurvaturesAndDirectionsFunctorTruePrincipalCurvaturesAndDirectionsEstimator
 
typedef ::DGtal::Mesh< RealPointMesh
 
typedef ::DGtal::TriangulatedSurface< RealPointTriangulatedSurface
 
typedef ::DGtal::PolygonalSurface< RealPointPolygonalSurface
 
typedef std::map< Surfel, IdxSurfelSurfel2Index
 
typedef std::map< Cell, IdxVertexCell2Index
 
typedef DigitalSetByAssociativeContainer< Domain, std::unordered_set< typename Domain::Point > > DigitalSet
 
typedef functors::NotPointPredicate< DigitalSetVoronoiPointPredicate
 
- Public Types inherited from DGtal::Shortcuts< TKSpace >
typedef TKSpace KSpace
 Digital cellular space.
 
typedef KSpace::Space Space
 Digital space.
 
typedef Space::Integer Integer
 Integer numbers.
 
typedef Space::Point Point
 Point with integer coordinates.
 
typedef Space::Vector Vector
 Vector with integer coordinates.
 
typedef Space::RealVector RealVector
 Vector with floating-point coordinates.
 
typedef Space::RealPoint RealPoint
 Point with floating-point coordinates.
 
typedef RealVector::Component Scalar
 Floating-point numbers.
 
typedef HyperRectDomain< SpaceDomain
 An (hyper-)rectangular domain.
 
typedef unsigned char GrayScale
 The type for 8-bits gray-scale elements.
 
typedef MPolynomial< Space::dimension, ScalarScalarPolynomial
 defines a multi-variate polynomial : RealPoint -> Scalar
 
typedef ImplicitPolynomial3Shape< SpaceImplicitShape3D
 
typedef GaussDigitizer< Space, ImplicitShape3DDigitizedImplicitShape3D
 defines the digitization of an implicit shape.
 
typedef ImageContainerBySTLVector< Domain, bool > BinaryImage
 defines a black and white image with (hyper-)rectangular domain.
 
typedef ImageContainerBySTLVector< Domain, GrayScaleGrayScaleImage
 defines a grey-level image with (hyper-)rectangular domain.
 
typedef ImageContainerBySTLVector< Domain, float > FloatImage
 defines a float image with (hyper-)rectangular domain.
 
typedef ImageContainerBySTLVector< Domain, double > DoubleImage
 defines a double image with (hyper-)rectangular domain.
 
typedef KSpace::SurfelSet SurfelSet
 defines a set of surfels
 
typedef LightImplicitDigitalSurface< KSpace, BinaryImageLightSurfaceContainer
 
typedef ::DGtal::DigitalSurface< LightSurfaceContainerLightDigitalSurface
 defines a connected digital surface over a binary image.
 
typedef SetOfSurfels< KSpace, SurfelSetExplicitSurfaceContainer
 defines a heavy container that represents any digital surface.
 
typedef ::DGtal::DigitalSurface< ExplicitSurfaceContainerDigitalSurface
 defines an arbitrary digital surface over a binary image.
 
typedef IndexedDigitalSurface< ExplicitSurfaceContainerIdxDigitalSurface
 defines a connected or not indexed digital surface.
 
typedef LightDigitalSurface::Surfel Surfel
 
typedef LightDigitalSurface::Cell Cell
 
typedef LightDigitalSurface::SCell SCell
 
typedef LightDigitalSurface::Vertex Vertex
 
typedef LightDigitalSurface::Arc Arc
 
typedef LightDigitalSurface::Face Face
 
typedef LightDigitalSurface::ArcRange ArcRange
 
typedef IdxDigitalSurface::Vertex IdxSurfel
 
typedef IdxDigitalSurface::Vertex IdxVertex
 
typedef IdxDigitalSurface::Arc IdxArc
 
typedef IdxDigitalSurface::ArcRange IdxArcRange
 
typedef std::set< IdxSurfelIdxSurfelSet
 
typedef std::vector< SCellSCellRange
 
typedef std::vector< CellCellRange
 
typedef CellRange PointelRange
 
typedef SCellRange SurfelRange
 
typedef std::vector< IdxSurfelIdxSurfelRange
 
typedef std::vector< ScalarScalars
 
typedef std::vector< RealVectorRealVectors
 
typedef std::vector< RealPointRealPoints
 
typedef IdxVertex Idx
 
typedef std::vector< IdxVertexIdxRange
 
typedef ::DGtal::Mesh< RealPointMesh
 
typedef ::DGtal::TriangulatedSurface< RealPointTriangulatedSurface
 
typedef ::DGtal::PolygonalSurface< RealPointPolygonalSurface
 
typedef ::DGtal::SurfaceMesh< RealPoint, RealPointSurfaceMesh
 
typedef std::map< Surfel, IdxSurfelSurfel2Index
 
typedef std::map< Cell, IdxVertexCell2Index
 
typedef ::DGtal::Color Color
 
typedef std::vector< ColorColors
 
typedef GradientColorMap< ScalarColorMap
 
typedef TickedColorMap< Scalar, ColorMapZeroTickedColorMap
 

Public Member Functions

Standard services
 ShortcutsGeometry ()=delete
 
 ~ShortcutsGeometry ()=delete
 
 ShortcutsGeometry (const ShortcutsGeometry &other)=delete
 
 ShortcutsGeometry (ShortcutsGeometry &&other)=delete
 
ShortcutsGeometryoperator= (const ShortcutsGeometry &other)=delete
 
ShortcutsGeometryoperator= (ShortcutsGeometry &&other)=delete
 
- Public Member Functions inherited from DGtal::Shortcuts< TKSpace >
 Shortcuts ()=delete
 
 ~Shortcuts ()=delete
 
 Shortcuts (const Shortcuts &other)=delete
 
 Shortcuts (Shortcuts &&other)=delete
 
Shortcutsoperator= (const Shortcuts &other)=delete
 
Shortcutsoperator= (Shortcuts &&other)=delete
 
void selfDisplay (std::ostream &out) const
 
bool isValid () const
 

Static Public Member Functions

static Parameters parametersKSpace ()
 
static KSpace getKSpace (const Point &low, const Point &up, Parameters params=parametersKSpace())
 
static KSpace getKSpace (CountedPtr< BinaryImage > bimage, Parameters params=parametersKSpace())
 
static KSpace getKSpace (CountedPtr< GrayScaleImage > gimage, Parameters params=parametersKSpace())
 
template<typename TDigitalSurfaceContainer >
static KSpace getKSpace (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface)
 
template<typename TDigitalSurfaceContainer >
static KSpace getKSpace (CountedPtr< ::DGtal::IndexedDigitalSurface< TDigitalSurfaceContainer > > surface)
 
static KSpace getKSpace (Parameters params=parametersKSpace()|parametersDigitizedImplicitShape3D())
 
static Parameters parametersDigitizedImplicitShape3D ()
 
Exact geometry services
static Parameters defaultParameters ()
 
static Parameters parametersShapeGeometry ()
 
static RealPoints getPositions (CountedPtr< ImplicitShape3D > shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersShapeGeometry())
 
static RealPoints getPositions (CountedPtr< ImplicitShape3D > shape, const RealPoints &points, const Parameters &params=parametersShapeGeometry())
 
static RealVectors getNormalVectors (CountedPtr< ImplicitShape3D > shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersShapeGeometry())
 
static Scalars getMeanCurvatures (CountedPtr< ImplicitShape3D > shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersShapeGeometry())
 
static Scalars getCNCMeanCurvatures (CountedPtr< typename Base::SurfaceMesh > mesh, const typename Base::SurfaceMesh::Faces faces, const Parameters &params=parametersShapeGeometry())
 
static Scalars getCNCMeanCurvatures (CountedPtr< typename Base::SurfaceMesh > mesh, const Parameters &params=parametersShapeGeometry())
 
template<typename T >
static Scalars getCNCMeanCurvatures (T &digitalObject, const Parameters &params=parametersShapeGeometry())
 
static Scalars getGaussianCurvatures (CountedPtr< ImplicitShape3D > shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersShapeGeometry())
 
static Scalars getCNCGaussianCurvatures (CountedPtr< typename Base::SurfaceMesh > mesh, const typename Base::SurfaceMesh::Faces &faces, const Parameters &params=parametersShapeGeometry())
 
static Scalars getCNCGaussianCurvatures (CountedPtr< typename Base::SurfaceMesh > mesh, const Parameters &params=parametersShapeGeometry())
 
template<typename T >
static Scalars getCNCGaussianCurvatures (T &digitalObject, const Parameters &params=parametersShapeGeometry())
 
static Scalars getFirstPrincipalCurvatures (CountedPtr< ImplicitShape3D > shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersShapeGeometry())
 
static Scalars getSecondPrincipalCurvatures (CountedPtr< ImplicitShape3D > shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersShapeGeometry())
 
static RealVectors getFirstPrincipalDirections (CountedPtr< ImplicitShape3D > shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersShapeGeometry())
 
static RealVectors getSecondPrincipalDirections (CountedPtr< ImplicitShape3D > shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersShapeGeometry())
 
static CurvatureTensorQuantities getPrincipalCurvaturesAndDirections (CountedPtr< ImplicitShape3D > shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersShapeGeometry())
 
static std::tuple< Scalars, Scalars, RealVectors, RealVectorsgetCNCPrincipalCurvaturesAndDirections (CountedPtr< typename Base::SurfaceMesh > mesh, const typename Base::SurfaceMesh::Faces &faces, const Parameters &params=parametersShapeGeometry())
 
static std::tuple< Scalars, Scalars, RealVectors, RealVectorsgetCNCPrincipalCurvaturesAndDirections (CountedPtr< typename Base::SurfaceMesh > mesh, const Parameters &params=parametersShapeGeometry())
 
template<typename T >
static std::tuple< Scalars, Scalars, RealVectors, RealVectorsgetCNCPrincipalCurvaturesAndDirections (T &digitalObject, const Parameters &params=parametersShapeGeometry())
 
Geometry estimation services
static Parameters parametersGeometryEstimation ()
 
static RealVectors getTrivialNormalVectors (const KSpace &K, const SurfelRange &surfels)
 
template<typename TAnyDigitalSurface >
static RealVectors getCTrivialNormalVectors (CountedPtr< TAnyDigitalSurface > surface, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation())
 
template<typename TAnyDigitalSurface >
static RealVectors getVCMNormalVectors (CountedPtr< TAnyDigitalSurface > surface, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation())
 
static RealVectors getIINormalVectors (CountedPtr< BinaryImage > bimage, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())
 
static RealVectors getIINormalVectors (CountedPtr< DigitizedImplicitShape3D > dshape, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace()|parametersDigitizedImplicitShape3D())
 
template<typename TPointPredicate >
static RealVectors getIINormalVectors (const TPointPredicate &shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())
 
static Scalars getIIMeanCurvatures (CountedPtr< BinaryImage > bimage, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())
 
static Scalars getIIMeanCurvatures (CountedPtr< DigitizedImplicitShape3D > dshape, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace()|parametersDigitizedImplicitShape3D())
 
template<typename TPointPredicate >
static Scalars getIIMeanCurvatures (const TPointPredicate &shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())
 
static Scalars getIIGaussianCurvatures (CountedPtr< BinaryImage > bimage, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())
 
static Scalars getIIGaussianCurvatures (CountedPtr< DigitizedImplicitShape3D > dshape, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace()|parametersDigitizedImplicitShape3D())
 
template<typename TPointPredicate >
static Scalars getIIGaussianCurvatures (const TPointPredicate &shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())
 
static CurvatureTensorQuantities getIIPrincipalCurvaturesAndDirections (CountedPtr< BinaryImage > bimage, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())
 
static CurvatureTensorQuantities getIIPrincipalCurvaturesAndDirections (CountedPtr< DigitizedImplicitShape3D > dshape, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace()|parametersDigitizedImplicitShape3D())
 
template<typename TPointPredicate >
static CurvatureTensorQuantities getIIPrincipalCurvaturesAndDirections (const TPointPredicate &shape, const KSpace &K, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())
 
AT approximation services
static Parameters parametersATApproximation ()
 
template<typename TAnyDigitalSurface , typename VectorFieldInput >
static VectorFieldInput getATVectorFieldApproximation (CountedPtr< TAnyDigitalSurface > surface, const SurfelRange &surfels, const VectorFieldInput &input, const Parameters &params=parametersATApproximation()|parametersGeometryEstimation())
 
template<typename TAnyDigitalSurface , typename VectorFieldInput , typename CellRangeConstIterator >
static VectorFieldInput getATVectorFieldApproximation (Scalars &features, CellRangeConstIterator itB, CellRangeConstIterator itE, CountedPtr< TAnyDigitalSurface > surface, const SurfelRange &surfels, const VectorFieldInput &input, const Parameters &params=parametersATApproximation()|parametersGeometryEstimation())
 
template<typename TAnyDigitalSurface >
static Scalars getATScalarFieldApproximation (CountedPtr< TAnyDigitalSurface > surface, const SurfelRange &surfels, const Scalars &input, const Parameters &params=parametersATApproximation()|parametersGeometryEstimation())
 
template<typename TAnyDigitalSurface , typename CellRangeConstIterator >
static Scalars getATScalarFieldApproximation (Scalars &features, CellRangeConstIterator itB, CellRangeConstIterator itE, CountedPtr< TAnyDigitalSurface > surface, const SurfelRange &surfels, const Scalars &input, const Parameters &params=parametersATApproximation()|parametersGeometryEstimation())
 
Error measure services
static void orientVectors (RealVectors &v, const RealVectors &ref_v)
 
static ScalarStatistic getStatistic (const Scalars &v)
 
static Scalars getVectorsAngleDeviation (const RealVectors &v1, const RealVectors &v2)
 
static Scalars getScalarsAbsoluteDifference (const Scalars &v1, const Scalars &v2)
 
static Scalar getScalarsNormL2 (const Scalars &v1, const Scalars &v2)
 
static Scalar getScalarsNormL1 (const Scalars &v1, const Scalars &v2)
 
static Scalar getScalarsNormLoo (const Scalars &v1, const Scalars &v2)
 
VoronoiMap services
static Parameters parametersVoronoiMap ()
 
template<uint32_t p, typename PointRange >
static VoronoiMap< Space, VoronoiPointPredicate, ExactPredicateLpSeparableMetric< Space, p > > getVoronoiMap (Domain domain, const PointRange &sites, const Parameters &params=parametersVoronoiMap())
 Computes the VoronoiMap of a domain, where sites are given through a range.
 
template<uint32_t p, typename PointRange >
static VoronoiMap< Space, VoronoiPointPredicate, ExactPredicateLpSeparableMetric< Space, p > > getVoronoiMap (CountedPtr< Domain > domain, const PointRange &sites, const Parameters &params=parametersVoronoiMap())
 Computes the VoronoiMap of a domain, where sites are given through a range.
 
template<uint32_t p, typename PointRange >
static DistanceTransformation< Space, VoronoiPointPredicate, ExactPredicateLpSeparableMetric< Space, p > > getDistanceTransformation (Domain domain, const PointRange &sites, const Parameters &params=parametersVoronoiMap())
 Computes the VoronoiMap of a domain, where sites are given through a range.
 
template<uint32_t p, typename PointRange >
static DistanceTransformation< Space, VoronoiPointPredicate, ExactPredicateLpSeparableMetric< Space, p > > getDistanceTransformation (CountedPtr< Domain > domain, const PointRange &sites, const Parameters &params=parametersVoronoiMap())
 Computes the VoronoiMap of a domain, where sites are given through a range.
 
template<uint32_t p, typename PointRangeSites , typename PointRange >
static std::vector< VectorgetDirectionToClosestSite (const PointRange &points, const PointRangeSites &sites, const Parameters &params=parametersVoronoiMap())
 Computes the direction of the closest site of a range of points.
 
template<uint32_t p, typename PointRangeSites , typename PointRange >
static std::vector< typename ExactPredicateLpSeparableMetric< Space, p >::ValuegetDistanceToClosestSite (const PointRange &points, const PointRangeSites &sites, const Parameters &params=parametersVoronoiMap())
 Computes the distance of the closest site of a range of points.
 
- Static Public Member Functions inherited from DGtal::Shortcuts< TKSpace >
static Parameters defaultParameters ()
 
static std::map< std::string, std::string > getPolynomialList ()
 
static Parameters parametersImplicitShape3D ()
 
static CountedPtr< ImplicitShape3DmakeImplicitShape3D (const Parameters &params=parametersImplicitShape3D())
 
static Parameters parametersKSpace ()
 
static KSpace getKSpace (const Point &low, const Point &up, Parameters params=parametersKSpace())
 
static KSpace getKSpace (CountedPtr< BinaryImage > bimage, Parameters params=parametersKSpace())
 
static KSpace getKSpace (CountedPtr< GrayScaleImage > gimage, Parameters params=parametersKSpace())
 
template<typename TDigitalSurfaceContainer >
static KSpace getKSpace (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface)
 
template<typename TDigitalSurfaceContainer >
static KSpace getKSpace (CountedPtr< ::DGtal::IndexedDigitalSurface< TDigitalSurfaceContainer > > surface)
 
template<typename TDigitalSurfaceContainer >
static const KSpacerefKSpace (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface)
 
template<typename TDigitalSurfaceContainer >
static const KSpacerefKSpace (CountedPtr< ::DGtal::IndexedDigitalSurface< TDigitalSurfaceContainer > > surface)
 
static CanonicCellEmbedder< KSpacegetCellEmbedder (const KSpace &K)
 
static CanonicSCellEmbedder< KSpacegetSCellEmbedder (const KSpace &K)
 
static Parameters parametersDigitizedImplicitShape3D ()
 
static KSpace getKSpace (Parameters params=parametersKSpace()|parametersDigitizedImplicitShape3D())
 
static CountedPtr< DigitizedImplicitShape3DmakeDigitizedImplicitShape3D (CountedPtr< ImplicitShape3D > shape, Parameters params=parametersDigitizedImplicitShape3D())
 
static Parameters parametersBinaryImage ()
 
static CountedPtr< BinaryImagemakeBinaryImage (Domain shapeDomain)
 
static CountedPtr< BinaryImagemakeBinaryImage (CountedPtr< DigitizedImplicitShape3D > shape_digitization, Parameters params=parametersBinaryImage())
 
static CountedPtr< BinaryImagemakeBinaryImage (CountedPtr< DigitizedImplicitShape3D > shape_digitization, Domain shapeDomain, Parameters params=parametersBinaryImage())
 
static CountedPtr< BinaryImagemakeBinaryImage (CountedPtr< BinaryImage > bimage, Parameters params=parametersBinaryImage())
 
static CountedPtr< BinaryImagemakeBinaryImage (std::string input, Parameters params=parametersBinaryImage())
 
template<typename T , typename __U = std::enable_if_t<std::is_arithmetic_v<T>>>
static CountedPtr< BinaryImagemakeBinaryImage (const std::vector< T > &values, const Domain &d)
 
template<typename T , template< class... > class C1, template< class... > class C2, template< class... > class C3>
static CountedPtr< BinaryImagemakeBinaryImage (const C1< C2< C3< T > > > &values, std::optional< Domain > override_domain=std::nullopt)
 
template<typename T , std::enable_if_t<!is_double_nested_container< T >::value, int > = 0>
static CountedPtr< BinaryImagemakeBinaryImage (const std::vector< T > &positions, std::optional< Domain > override_domain=std::nullopt)
 
static CountedPtr< BinaryImagemakeBinaryImage (CountedPtr< GrayScaleImage > gray_scale_image, Parameters params=parametersBinaryImage())
 
static bool saveBinaryImage (CountedPtr< BinaryImage > bimage, std::string output)
 
static Parameters parametersGrayScaleImage ()
 
static CountedPtr< GrayScaleImagemakeGrayScaleImage (Domain aDomain)
 
static CountedPtr< GrayScaleImagemakeGrayScaleImage (std::string input)
 
static CountedPtr< GrayScaleImagemakeGrayScaleImage (CountedPtr< BinaryImage > binary_image, std::function< GrayScale(bool) > const &bool2grayscale=[](bool v) { return v ?(unsigned char) 255 :(unsigned char) 0;})
 
static bool saveGrayScaleImage (CountedPtr< GrayScaleImage > gray_scale_image, std::string output)
 
static CountedPtr< GrayScaleImagemakeGrayScaleImage (CountedPtr< FloatImage > fimage, Parameters params=parametersGrayScaleImage())
 
static CountedPtr< GrayScaleImagemakeGrayScaleImage (CountedPtr< DoubleImage > fimage, Parameters params=parametersGrayScaleImage())
 
template<typename T , typename __U = std::enable_if_t<std::is_arithmetic_v<T>>>
static CountedPtr< GrayScaleImagemakeGrayScaleImage (const std::vector< T > &values, const Domain &d)
 
template<typename T , template< class... > class C1, template< class... > class C2, template< class... > class C3>
static CountedPtr< GrayScaleImagemakeGrayScaleImage (const C1< C2< C3< T > > > &values, std::optional< Domain > override_domain=std::nullopt)
 
template<typename T , typename U , std::enable_if_t<!is_double_nested_container< T >::value, int > = 0>
static CountedPtr< GrayScaleImagemakeGrayScaleImage (const std::vector< T > &positions, const std::vector< U > &values, std::optional< Domain > override_domain=std::nullopt)
 
static CountedPtr< FloatImagemakeFloatImage (Domain aDomain)
 
static CountedPtr< FloatImagemakeFloatImage (std::string input)
 
static CountedPtr< FloatImagemakeFloatImage (CountedPtr< ImplicitShape3D > shape, Parameters params=parametersDigitizedImplicitShape3D())
 
static CountedPtr< DoubleImagemakeDoubleImage (Domain aDomain)
 
static CountedPtr< DoubleImagemakeDoubleImage (std::string input)
 
static CountedPtr< DoubleImagemakeDoubleImage (CountedPtr< ImplicitShape3D > shape, Parameters params=parametersDigitizedImplicitShape3D())
 
static Parameters parametersDigitalSurface ()
 
template<typename TDigitalSurfaceContainer >
static CanonicCellEmbedder< KSpacegetCellEmbedder (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface)
 
template<typename TDigitalSurfaceContainer >
static CanonicSCellEmbedder< KSpacegetSCellEmbedder (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface)
 
template<typename TDigitalSurfaceContainer >
static CanonicCellEmbedder< KSpacegetCellEmbedder (CountedPtr< ::DGtal::IndexedDigitalSurface< TDigitalSurfaceContainer > > surface)
 
template<typename TDigitalSurfaceContainer >
static CanonicSCellEmbedder< KSpacegetSCellEmbedder (CountedPtr< ::DGtal::IndexedDigitalSurface< TDigitalSurfaceContainer > > surface)
 
static CountedPtr< LightDigitalSurfacemakeLightDigitalSurface (CountedPtr< BinaryImage > bimage, const KSpace &K, const Parameters &params=parametersDigitalSurface())
 
static std::vector< CountedPtr< LightDigitalSurface > > makeLightDigitalSurfaces (CountedPtr< BinaryImage > bimage, const KSpace &K, const Parameters &params=parametersDigitalSurface())
 
static std::vector< CountedPtr< LightDigitalSurface > > makeLightDigitalSurfaces (SurfelRange &surfel_reps, CountedPtr< BinaryImage > bimage, const KSpace &K, const Parameters &params=parametersDigitalSurface())
 
template<typename TPointPredicate >
static CountedPtr< DigitalSurfacemakeDigitalSurface (CountedPtr< TPointPredicate > bimage, const KSpace &K, const Parameters &params=parametersDigitalSurface())
 
static CountedPtr< DigitalSurfacemakeDigitalSurface (CountedPtr< IdxDigitalSurface > idx_surface, const Parameters &params=parametersDigitalSurface())
 
static CountedPtr< IdxDigitalSurfacemakeIdxDigitalSurface (CountedPtr< BinaryImage > bimage, const KSpace &K, const Parameters &params=parametersDigitalSurface())
 
template<typename TSurfelRange >
static CountedPtr< IdxDigitalSurfacemakeIdxDigitalSurface (const TSurfelRange &surfels, ConstAlias< KSpace > K, const Parameters &params=parametersDigitalSurface())
 
template<typename TDigitalSurfaceContainer >
static CountedPtr< IdxDigitalSurfacemakeIdxDigitalSurface (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface, const Parameters &params=parametersDigitalSurface())
 
static CountedPtr< IdxDigitalSurfacemakeIdxDigitalSurface (const std::vector< CountedPtr< LightDigitalSurface > > &surfaces, const Parameters &params=parametersDigitalSurface())
 
template<typename TDigitalSurfaceContainer >
static CellRange getCellRange (Cell2Index &c2i, CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface, const Dimension k)
 
template<typename TDigitalSurfaceContainer >
static PointelRange getCellRange (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface, const Dimension k)
 
template<typename TDigitalSurfaceContainer >
static PointelRange getPointelRange (Cell2Index &c2i, CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface)
 
template<typename TDigitalSurfaceContainer >
static PointelRange getPointelRange (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface)
 
static PointelRange getPointelRange (const KSpace &K, const SCell &surfel)
 
template<typename TDigitalSurfaceContainer >
static SurfelRange getSurfelRange (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface, const Parameters &params=parametersDigitalSurface())
 
template<typename TDigitalSurfaceContainer >
static SurfelRange getSurfelRange (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface, const Surfel &start_surfel, const Parameters &params=parametersDigitalSurface())
 
static IdxSurfelRange getIdxSurfelRange (CountedPtr< IdxDigitalSurface > surface, const Parameters &params=parametersDigitalSurface())
 
static IdxSurfelRange getIdxSurfelRange (CountedPtr< IdxDigitalSurface > surface, const IdxSurfel &start_surfel, const Parameters &params=parametersDigitalSurface())
 
template<typename TDigitalSurfaceContainer , typename TCellEmbedder >
static bool saveOFF (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > digsurf, const TCellEmbedder &embedder, std::string off_file, const Color &face_color=DGtal::Color::None)
 
template<typename TDigitalSurfaceContainer , typename TCellEmbedder >
static bool saveOBJ (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > digsurf, const TCellEmbedder &embedder, const RealVectors &normals, const Colors &diffuse_colors, std::string objfile, const Color &ambient_color=Color(32, 32, 32), const Color &diffuse_color=Color(200, 200, 255), const Color &specular_color=Color::White)
 
template<typename TDigitalSurfaceContainer >
static bool saveOBJ (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > digsurf, const RealVectors &normals, const Colors &diffuse_colors, std::string objfile, const Color &ambient_color=Color(32, 32, 32), const Color &diffuse_color=Color(200, 200, 255), const Color &specular_color=Color::White)
 
template<typename TDigitalSurfaceContainer >
static bool saveOFF (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > digsurf, std::string off_file, const Color &face_color=Color(32, 32, 32))
 
template<typename TDigitalSurfaceContainer >
static bool saveOBJ (CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > digsurf, std::string objfile, const Color &ambient_color=Color(32, 32, 32), const Color &diffuse_color=Color(200, 200, 255), const Color &specular_color=Color::White)
 
static bool saveVectorFieldOBJ (const RealPoints &positions, const RealVectors &vf, double thickness, const Colors &diffuse_colors, std::string objfile, const Color &ambient_color=Color(32, 32, 32), const Color &diffuse_color=Color(200, 200, 255), const Color &specular_color=Color::White)
 
static Parameters parametersMesh ()
 
static CountedPtr< TriangulatedSurfacemakeTriangulatedSurface (CountedPtr< Mesh > aMesh)
 
static CountedPtr< MeshmakeMesh (CountedPtr< TriangulatedSurface > triSurf, const Color &aColor=Color::White)
 
static CountedPtr< MeshmakeMesh (CountedPtr< PolygonalSurface > polySurf, const Color &aColor=Color::White)
 
template<typename TContainer >
static CountedPtr< TriangulatedSurfacemakeTriangulatedSurface (Surfel2Index &s2i, CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
 
template<typename TContainer >
static CountedPtr< TriangulatedSurfacemakeTriangulatedSurface (CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
 
static CountedPtr< TriangulatedSurfacemakeTriangulatedSurface (CountedPtr< PolygonalSurface > polySurf, const Parameters &params=parametersMesh())
 
static CountedPtr< PolygonalSurfacemakePolygonalSurface (CountedPtr< Mesh > aMesh)
 
static CountedPtr< PolygonalSurfacemakePolygonalSurface (CountedPtr< GrayScaleImage > gray_scale_image, const Parameters &params=parametersKSpace()|parametersBinaryImage()|parametersDigitalSurface())
 
static CountedPtr< TriangulatedSurfacemakeTriangulatedSurface (CountedPtr< GrayScaleImage > gray_scale_image, const Parameters &params=parametersKSpace()|parametersBinaryImage()|parametersDigitalSurface())
 
template<typename TContainer >
static CountedPtr< PolygonalSurfacemakeDualPolygonalSurface (Surfel2Index &s2i, CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
 
template<typename TContainer >
static CountedPtr< PolygonalSurfacemakeDualPolygonalSurface (CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
 
template<typename TContainer >
static CountedPtr< PolygonalSurfacemakeDualPolygonalSurface (CountedPtr< ::DGtal::IndexedDigitalSurface< TContainer > > aSurface)
 
template<typename TContainer >
static CountedPtr< PolygonalSurfacemakePrimalPolygonalSurface (Cell2Index &c2i, CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
 
template<typename TContainer >
static CountedPtr< PolygonalSurfacemakePrimalPolygonalSurface (CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
 
template<typename TContainer >
static CountedPtr< PolygonalSurfacemakePrimalPolygonalSurface (CountedPtr< ::DGtal::IndexedDigitalSurface< TContainer > > aSurface)
 
template<typename TContainer >
static CountedPtr< SurfaceMeshmakePrimalSurfaceMesh (Cell2Index &c2i, CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
 
template<typename TContainer >
static CountedPtr< SurfaceMeshmakePrimalSurfaceMesh (CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
 
template<typename TContainer >
static CountedPtr< SurfaceMeshmakePrimalSurfaceMesh (CountedPtr< ::DGtal::IndexedDigitalSurface< TContainer > > aSurface)
 
static CountedPtr< SurfaceMeshmakeSurfaceMesh (const std::string &path)
 
template<typename TPoint , typename TVector >
static bool saveOBJ (CountedPtr< ::DGtal::SurfaceMesh< TPoint, TVector > > surf, const std::string &objfile)
 
template<typename TPoint >
static bool saveOBJ (CountedPtr< ::DGtal::PolygonalSurface< TPoint > > polysurf, const std::string &objfile)
 
template<typename TPoint >
static bool saveOFF (CountedPtr< ::DGtal::PolygonalSurface< TPoint > > polysurf, std::string off_file, const Color &face_color=DGtal::Color::None)
 
template<typename TPoint >
static bool saveOBJ (CountedPtr< ::DGtal::TriangulatedSurface< TPoint > > trisurf, const std::string &objfile)
 
template<typename TPoint >
static bool saveOBJ (CountedPtr< ::DGtal::PolygonalSurface< TPoint > > polysurf, const RealVectors &normals, const Colors &diffuse_colors, std::string objfile, const Color &ambient_color=Color(32, 32, 32), const Color &diffuse_color=Color(200, 200, 255), const Color &specular_color=Color::White)
 
template<typename TPoint >
static bool saveOBJ (CountedPtr< ::DGtal::TriangulatedSurface< TPoint > > trisurf, const RealVectors &normals, const Colors &diffuse_colors, std::string objfile, const Color &ambient_color=Color(32, 32, 32), const Color &diffuse_color=Color(200, 200, 255), const Color &specular_color=Color::White)
 
template<typename TPoint , typename TVector >
static bool saveOBJ (CountedPtr< ::DGtal::SurfaceMesh< TPoint, TVector > > surf, const RealVectors &normals, const Colors &diffuse_colors, std::string objfile, const Color &ambient_color=Color(32, 32, 32), const Color &diffuse_color=Color(200, 200, 255), const Color &specular_color=Color::White)
 
template<typename TPoint >
static bool saveOFF (CountedPtr< ::DGtal::TriangulatedSurface< TPoint > > trisurf, std::string off_file, const Color &face_color=DGtal::Color::None)
 
static Parameters parametersUtilities ()
 
template<typename TValue >
static IdxRange getRangeMatch (const std::vector< TValue > &s1, const std::vector< TValue > &s2, bool perfect=false)
 
template<typename TValue >
static std::vector< TValue > getMatchedRange (const std::vector< TValue > &range, const IdxRange &match)
 
static ColorMap getColorMap (Scalar min, Scalar max, const Parameters &params=parametersUtilities())
 
static ZeroTickedColorMap getZeroTickedColorMap (Scalar min, Scalar max, const Parameters &params=parametersUtilities())
 
template<typename TCellEmbedder = CanonicCellEmbedder< KSpace >>
static bool outputSurfelsAsObj (std::ostream &output, const SurfelRange &surfels, const TCellEmbedder &embedder)
 
template<typename TAnyDigitalSurface >
static bool outputPrimalDigitalSurfaceAsObj (std::ostream &output, CountedPtr< TAnyDigitalSurface > surface)
 
template<typename TAnyDigitalSurface , typename TCellEmbedder = CanonicCellEmbedder< KSpace >>
static bool outputPrimalDigitalSurfaceAsObj (std::ostream &output, CountedPtr< TAnyDigitalSurface > surface, const TCellEmbedder &embedder)
 
static bool outputPrimalIdxDigitalSurfaceAsObj (std::ostream &output, CountedPtr< IdxDigitalSurface > surface)
 
template<typename TCellEmbedder = CanonicCellEmbedder< KSpace >>
static bool outputPrimalIdxDigitalSurfaceAsObj (std::ostream &output, CountedPtr< IdxDigitalSurface > surface, const TCellEmbedder &embedder)
 
template<typename TDigitalSurfaceContainer >
static bool outputDualDigitalSurfaceAsObj (std::ostream &output, CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface, const Parameters &params=parametersMesh())
 
template<typename TDigitalSurfaceContainer , typename TCellEmbedder = CanonicCellEmbedder< KSpace >>
static bool outputDualDigitalSurfaceAsObj (std::ostream &output, CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface, const TCellEmbedder &embedder, const Parameters &params=parametersMesh())
 
template<typename TSCellMap , typename TValueWriter >
static bool outputSCellMapAsCSV (std::ostream &output, const KSpace &K, const TSCellMap &anyMap, const TValueWriter &writer)
 
template<typename TCellMap , typename TValueWriter >
static bool outputCellMapAsCSV (std::ostream &output, const KSpace &K, const TCellMap &anyMap, const TValueWriter &writer)
 
static CellRange getPrimalCells (const KSpace &K, const SCell &s, const Dimension k)
 
static CellRange getPrimalVertices (const KSpace &K, const SCell &s)
 
static CellRange getPrimalVertices (const KSpace &K, const Surfel &s, bool ccw)
 

Private Member Functions

 BOOST_CONCEPT_ASSERT ((concepts::CCellularGridSpaceND< TKSpace >))
 

Detailed Description

template<typename TKSpace>
class DGtal::ShortcutsGeometry< TKSpace >

Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes and surface in a few lines. The drawback is that you use specific types or objects, which could lead to faster code or more compact data structures.

Description of template class 'ShortcutsGeometry'

Template Parameters
TKSpaceany cellular grid space, a model of concepts::CCellularGridSpaceND like KhalimskySpaceND.
Examples
geometry/meshes/curvature-comparator-ii-cnc-3d.cpp, geometry/meshes/digpoly-curvature-measures-cnc-3d.cpp, geometry/meshes/digpoly-curvature-measures-cnc-XY-3d.cpp, geometry/meshes/vol-curvature-measures-icnc-3d.cpp, and geometry/meshes/vol-curvature-measures-icnc-XY-3d.cpp.

Definition at line 78 of file ShortcutsGeometry.h.

Member Typedef Documentation

◆ Arc

template<typename TKSpace >
typedef LightDigitalSurface::Arc DGtal::ShortcutsGeometry< TKSpace >::Arc

Definition at line 146 of file ShortcutsGeometry.h.

◆ ArcRange

template<typename TKSpace >
typedef LightDigitalSurface::ArcRange DGtal::ShortcutsGeometry< TKSpace >::ArcRange

Definition at line 148 of file ShortcutsGeometry.h.

◆ Base

template<typename TKSpace >
typedef Shortcuts< TKSpace > DGtal::ShortcutsGeometry< TKSpace >::Base

Definition at line 82 of file ShortcutsGeometry.h.

◆ BinaryImage

template<typename TKSpace >
typedef ImageContainerBySTLVector<Domain, bool> DGtal::ShortcutsGeometry< TKSpace >::BinaryImage

defines a black and white image with (hyper-)rectangular domain.

Definition at line 122 of file ShortcutsGeometry.h.

◆ Cell

template<typename TKSpace >
typedef LightDigitalSurface::Cell DGtal::ShortcutsGeometry< TKSpace >::Cell

Definition at line 143 of file ShortcutsGeometry.h.

◆ Cell2Index

template<typename TKSpace >
typedef std::map<Cell, IdxVertex> DGtal::ShortcutsGeometry< TKSpace >::Cell2Index

Definition at line 201 of file ShortcutsGeometry.h.

◆ CellRange

template<typename TKSpace >
typedef std::vector< Cell > DGtal::ShortcutsGeometry< TKSpace >::CellRange

Definition at line 155 of file ShortcutsGeometry.h.

◆ CNCComputer

template<typename TKSpace >
typedef CorrectedNormalCurrentComputer<RealPoint, RealVector> DGtal::ShortcutsGeometry< TKSpace >::CNCComputer

Definition at line 176 of file ShortcutsGeometry.h.

◆ CurvatureTensorQuantities

template<typename TKSpace >
typedef std::vector< CurvatureTensorQuantity > DGtal::ShortcutsGeometry< TKSpace >::CurvatureTensorQuantities

Definition at line 174 of file ShortcutsGeometry.h.

◆ CurvatureTensorQuantity

template<typename TKSpace >
typedef functors::IIPrincipalCurvaturesAndDirectionsFunctor<Space>::Quantity DGtal::ShortcutsGeometry< TKSpace >::CurvatureTensorQuantity

Definition at line 173 of file ShortcutsGeometry.h.

◆ DigitalSet

template<typename TKSpace >
typedef DigitalSetByAssociativeContainer<Domain, std::unordered_set<typename Domain::Point> > DGtal::ShortcutsGeometry< TKSpace >::DigitalSet

Definition at line 203 of file ShortcutsGeometry.h.

◆ DigitalSurface

template<typename TKSpace >
typedef ::DGtal::DigitalSurface< ExplicitSurfaceContainer > DGtal::ShortcutsGeometry< TKSpace >::DigitalSurface

defines an arbitrary digital surface over a binary image.

Definition at line 139 of file ShortcutsGeometry.h.

◆ DigitizedImplicitShape3D

template<typename TKSpace >
typedef GaussDigitizer< Space, ImplicitShape3D > DGtal::ShortcutsGeometry< TKSpace >::DigitizedImplicitShape3D

defines the digitization of an implicit shape.

Definition at line 120 of file ShortcutsGeometry.h.

◆ Domain

template<typename TKSpace >
typedef HyperRectDomain<Space> DGtal::ShortcutsGeometry< TKSpace >::Domain

An (hyper-)rectangular domain.

Definition at line 108 of file ShortcutsGeometry.h.

◆ DoubleImage

template<typename TKSpace >
typedef ImageContainerBySTLVector<Domain, double> DGtal::ShortcutsGeometry< TKSpace >::DoubleImage

defines a double image with (hyper-)rectangular domain.

Definition at line 128 of file ShortcutsGeometry.h.

◆ ExplicitSurfaceContainer

template<typename TKSpace >
typedef SetOfSurfels< KSpace, SurfelSet > DGtal::ShortcutsGeometry< TKSpace >::ExplicitSurfaceContainer

defines a heavy container that represents any digital surface.

Definition at line 137 of file ShortcutsGeometry.h.

◆ Face

template<typename TKSpace >
typedef LightDigitalSurface::Face DGtal::ShortcutsGeometry< TKSpace >::Face

Definition at line 147 of file ShortcutsGeometry.h.

◆ FirstPrincipalCurvatureFunctor

template<typename TKSpace >
typedef sgf::ShapeFirstPrincipalCurvatureFunctor<ImplicitShape3D> DGtal::ShortcutsGeometry< TKSpace >::FirstPrincipalCurvatureFunctor

Definition at line 167 of file ShortcutsGeometry.h.

◆ FirstPrincipalDirectionFunctor

template<typename TKSpace >
typedef sgf::ShapeFirstPrincipalDirectionFunctor<ImplicitShape3D> DGtal::ShortcutsGeometry< TKSpace >::FirstPrincipalDirectionFunctor

Definition at line 169 of file ShortcutsGeometry.h.

◆ FloatImage

template<typename TKSpace >
typedef ImageContainerBySTLVector<Domain, float> DGtal::ShortcutsGeometry< TKSpace >::FloatImage

defines a float image with (hyper-)rectangular domain.

Definition at line 126 of file ShortcutsGeometry.h.

◆ GaussianCurvatureFunctor

template<typename TKSpace >
typedef sgf::ShapeGaussianCurvatureFunctor<ImplicitShape3D> DGtal::ShortcutsGeometry< TKSpace >::GaussianCurvatureFunctor

Definition at line 166 of file ShortcutsGeometry.h.

◆ GrayScale

template<typename TKSpace >
typedef unsigned char DGtal::ShortcutsGeometry< TKSpace >::GrayScale

The type for 8-bits gray-scale elements.

Definition at line 110 of file ShortcutsGeometry.h.

◆ GrayScaleImage

template<typename TKSpace >
typedef ImageContainerBySTLVector<Domain, GrayScale> DGtal::ShortcutsGeometry< TKSpace >::GrayScaleImage

defines a grey-level image with (hyper-)rectangular domain.

Definition at line 124 of file ShortcutsGeometry.h.

◆ IdxArc

template<typename TKSpace >
typedef IdxDigitalSurface::Arc DGtal::ShortcutsGeometry< TKSpace >::IdxArc

Definition at line 151 of file ShortcutsGeometry.h.

◆ IdxArcRange

template<typename TKSpace >
typedef IdxDigitalSurface::ArcRange DGtal::ShortcutsGeometry< TKSpace >::IdxArcRange

Definition at line 152 of file ShortcutsGeometry.h.

◆ IdxDigitalSurface

template<typename TKSpace >
typedef IndexedDigitalSurface< ExplicitSurfaceContainer > DGtal::ShortcutsGeometry< TKSpace >::IdxDigitalSurface

defines a connected or not indexed digital surface.

Definition at line 141 of file ShortcutsGeometry.h.

◆ IdxSurfel

template<typename TKSpace >
typedef IdxDigitalSurface::Vertex DGtal::ShortcutsGeometry< TKSpace >::IdxSurfel

Definition at line 149 of file ShortcutsGeometry.h.

◆ IdxSurfelRange

template<typename TKSpace >
typedef std::vector< IdxSurfel > DGtal::ShortcutsGeometry< TKSpace >::IdxSurfelRange

Definition at line 156 of file ShortcutsGeometry.h.

◆ IdxSurfelSet

template<typename TKSpace >
typedef std::set< IdxSurfel > DGtal::ShortcutsGeometry< TKSpace >::IdxSurfelSet

Definition at line 153 of file ShortcutsGeometry.h.

◆ IdxVertex

template<typename TKSpace >
typedef IdxDigitalSurface::Vertex DGtal::ShortcutsGeometry< TKSpace >::IdxVertex

Definition at line 150 of file ShortcutsGeometry.h.

◆ ImplicitShape3D

template<typename TKSpace >
typedef ImplicitPolynomial3Shape<Space> DGtal::ShortcutsGeometry< TKSpace >::ImplicitShape3D

defines an implicit shape of the space, which is the zero-level set of a ScalarPolynomial.

Definition at line 118 of file ShortcutsGeometry.h.

◆ Integer

template<typename TKSpace >
typedef Space::Integer DGtal::ShortcutsGeometry< TKSpace >::Integer

Integer numbers.

Definition at line 96 of file ShortcutsGeometry.h.

◆ KSpace

template<typename TKSpace >
typedef TKSpace DGtal::ShortcutsGeometry< TKSpace >::KSpace

Digital cellular space.

Definition at line 92 of file ShortcutsGeometry.h.

◆ LightDigitalSurface

template<typename TKSpace >
typedef ::DGtal::DigitalSurface< LightSurfaceContainer > DGtal::ShortcutsGeometry< TKSpace >::LightDigitalSurface

defines a connected digital surface over a binary image.

Definition at line 135 of file ShortcutsGeometry.h.

◆ LightSurfaceContainer

template<typename TKSpace >
typedef LightImplicitDigitalSurface< KSpace, BinaryImage > DGtal::ShortcutsGeometry< TKSpace >::LightSurfaceContainer

defines a light container that represents a connected digital surface over a binary image.

Definition at line 133 of file ShortcutsGeometry.h.

◆ MeanCurvatureFunctor

template<typename TKSpace >
typedef sgf::ShapeMeanCurvatureFunctor<ImplicitShape3D> DGtal::ShortcutsGeometry< TKSpace >::MeanCurvatureFunctor

Definition at line 165 of file ShortcutsGeometry.h.

◆ Mesh

template<typename TKSpace >
typedef ::DGtal::Mesh<RealPoint> DGtal::ShortcutsGeometry< TKSpace >::Mesh

Definition at line 197 of file ShortcutsGeometry.h.

◆ NormalFunctor

template<typename TKSpace >
typedef sgf::ShapeNormalVectorFunctor<ImplicitShape3D> DGtal::ShortcutsGeometry< TKSpace >::NormalFunctor

Definition at line 164 of file ShortcutsGeometry.h.

◆ Point

template<typename TKSpace >
typedef Space::Point DGtal::ShortcutsGeometry< TKSpace >::Point

Point with integer coordinates.

Definition at line 98 of file ShortcutsGeometry.h.

◆ PolygonalSurface

template<typename TKSpace >
typedef ::DGtal::PolygonalSurface<RealPoint> DGtal::ShortcutsGeometry< TKSpace >::PolygonalSurface

Definition at line 199 of file ShortcutsGeometry.h.

◆ PositionFunctor

template<typename TKSpace >
typedef sgf::ShapePositionFunctor<ImplicitShape3D> DGtal::ShortcutsGeometry< TKSpace >::PositionFunctor

Definition at line 163 of file ShortcutsGeometry.h.

◆ PrincipalCurvaturesAndDirectionsFunctor

template<typename TKSpace >
typedef sgf::ShapePrincipalCurvaturesAndDirectionsFunctor<ImplicitShape3D> DGtal::ShortcutsGeometry< TKSpace >::PrincipalCurvaturesAndDirectionsFunctor

Definition at line 171 of file ShortcutsGeometry.h.

◆ RealPoint

template<typename TKSpace >
typedef Space::RealPoint DGtal::ShortcutsGeometry< TKSpace >::RealPoint

Point with floating-point coordinates.

Definition at line 104 of file ShortcutsGeometry.h.

◆ RealPoints

template<typename TKSpace >
typedef std::vector< RealPoint > DGtal::ShortcutsGeometry< TKSpace >::RealPoints

Definition at line 159 of file ShortcutsGeometry.h.

◆ RealVector

template<typename TKSpace >
typedef Space::RealVector DGtal::ShortcutsGeometry< TKSpace >::RealVector

Vector with floating-point coordinates.

Definition at line 102 of file ShortcutsGeometry.h.

◆ RealVectors

template<typename TKSpace >
typedef std::vector< RealVector > DGtal::ShortcutsGeometry< TKSpace >::RealVectors

Definition at line 158 of file ShortcutsGeometry.h.

◆ Scalar

template<typename TKSpace >
typedef RealVector::Component DGtal::ShortcutsGeometry< TKSpace >::Scalar

Floating-point numbers.

Definition at line 106 of file ShortcutsGeometry.h.

◆ ScalarPolynomial

template<typename TKSpace >
typedef MPolynomial< Space::dimension, Scalar > DGtal::ShortcutsGeometry< TKSpace >::ScalarPolynomial

defines a multi-variate polynomial : RealPoint -> Scalar

Definition at line 115 of file ShortcutsGeometry.h.

◆ Scalars

template<typename TKSpace >
typedef std::vector< Scalar > DGtal::ShortcutsGeometry< TKSpace >::Scalars

Definition at line 157 of file ShortcutsGeometry.h.

◆ ScalarStatistic

template<typename TKSpace >
typedef ::DGtal::Statistic<Scalar> DGtal::ShortcutsGeometry< TKSpace >::ScalarStatistic

Definition at line 161 of file ShortcutsGeometry.h.

◆ SCell

template<typename TKSpace >
typedef LightDigitalSurface::SCell DGtal::ShortcutsGeometry< TKSpace >::SCell

Definition at line 144 of file ShortcutsGeometry.h.

◆ SecondPrincipalCurvatureFunctor

template<typename TKSpace >
typedef sgf::ShapeSecondPrincipalCurvatureFunctor<ImplicitShape3D> DGtal::ShortcutsGeometry< TKSpace >::SecondPrincipalCurvatureFunctor

Definition at line 168 of file ShortcutsGeometry.h.

◆ SecondPrincipalDirectionFunctor

template<typename TKSpace >
typedef sgf::ShapeSecondPrincipalDirectionFunctor<ImplicitShape3D> DGtal::ShortcutsGeometry< TKSpace >::SecondPrincipalDirectionFunctor

Definition at line 170 of file ShortcutsGeometry.h.

◆ Self

template<typename TKSpace >
typedef ShortcutsGeometry< TKSpace > DGtal::ShortcutsGeometry< TKSpace >::Self

Definition at line 83 of file ShortcutsGeometry.h.

◆ Space

template<typename TKSpace >
typedef KSpace::Space DGtal::ShortcutsGeometry< TKSpace >::Space

Digital space.

Definition at line 94 of file ShortcutsGeometry.h.

◆ Surfel

template<typename TKSpace >
typedef LightDigitalSurface::Surfel DGtal::ShortcutsGeometry< TKSpace >::Surfel

Definition at line 142 of file ShortcutsGeometry.h.

◆ Surfel2Index

template<typename TKSpace >
typedef std::map<Surfel, IdxSurfel> DGtal::ShortcutsGeometry< TKSpace >::Surfel2Index

Definition at line 200 of file ShortcutsGeometry.h.

◆ SurfelRange

template<typename TKSpace >
typedef std::vector< Surfel > DGtal::ShortcutsGeometry< TKSpace >::SurfelRange

Definition at line 154 of file ShortcutsGeometry.h.

◆ SurfelSet

template<typename TKSpace >
typedef KSpace::SurfelSet DGtal::ShortcutsGeometry< TKSpace >::SurfelSet

defines a set of surfels

Definition at line 130 of file ShortcutsGeometry.h.

◆ TriangulatedSurface

template<typename TKSpace >
typedef ::DGtal::TriangulatedSurface<RealPoint> DGtal::ShortcutsGeometry< TKSpace >::TriangulatedSurface

Definition at line 198 of file ShortcutsGeometry.h.

◆ TrueFirstPrincipalCurvatureEstimator

template<typename TKSpace >
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, FirstPrincipalCurvatureFunctor > DGtal::ShortcutsGeometry< TKSpace >::TrueFirstPrincipalCurvatureEstimator

Definition at line 187 of file ShortcutsGeometry.h.

◆ TrueFirstPrincipalDirectionEstimator

template<typename TKSpace >
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, FirstPrincipalDirectionFunctor > DGtal::ShortcutsGeometry< TKSpace >::TrueFirstPrincipalDirectionEstimator

Definition at line 191 of file ShortcutsGeometry.h.

◆ TrueGaussianCurvatureEstimator

template<typename TKSpace >
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, GaussianCurvatureFunctor > DGtal::ShortcutsGeometry< TKSpace >::TrueGaussianCurvatureEstimator

Definition at line 185 of file ShortcutsGeometry.h.

◆ TrueMeanCurvatureEstimator

template<typename TKSpace >
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, MeanCurvatureFunctor > DGtal::ShortcutsGeometry< TKSpace >::TrueMeanCurvatureEstimator

Definition at line 183 of file ShortcutsGeometry.h.

◆ TrueNormalEstimator

template<typename TKSpace >
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, NormalFunctor > DGtal::ShortcutsGeometry< TKSpace >::TrueNormalEstimator

Definition at line 181 of file ShortcutsGeometry.h.

◆ TruePositionEstimator

template<typename TKSpace >
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, PositionFunctor > DGtal::ShortcutsGeometry< TKSpace >::TruePositionEstimator

Definition at line 179 of file ShortcutsGeometry.h.

◆ TruePrincipalCurvaturesAndDirectionsEstimator

template<typename TKSpace >
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, PrincipalCurvaturesAndDirectionsFunctor > DGtal::ShortcutsGeometry< TKSpace >::TruePrincipalCurvaturesAndDirectionsEstimator

Definition at line 195 of file ShortcutsGeometry.h.

◆ TrueSecondPrincipalCurvatureEstimator

template<typename TKSpace >
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, SecondPrincipalCurvatureFunctor > DGtal::ShortcutsGeometry< TKSpace >::TrueSecondPrincipalCurvatureEstimator

Definition at line 189 of file ShortcutsGeometry.h.

◆ TrueSecondPrincipalDirectionEstimator

template<typename TKSpace >
typedef TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, SecondPrincipalDirectionFunctor > DGtal::ShortcutsGeometry< TKSpace >::TrueSecondPrincipalDirectionEstimator

Definition at line 193 of file ShortcutsGeometry.h.

◆ Vector

template<typename TKSpace >
typedef Space::Vector DGtal::ShortcutsGeometry< TKSpace >::Vector

Vector with integer coordinates.

Definition at line 100 of file ShortcutsGeometry.h.

◆ Vertex

template<typename TKSpace >
typedef LightDigitalSurface::Vertex DGtal::ShortcutsGeometry< TKSpace >::Vertex

Definition at line 145 of file ShortcutsGeometry.h.

◆ VoronoiPointPredicate

template<typename TKSpace >
typedef functors::NotPointPredicate<DigitalSet> DGtal::ShortcutsGeometry< TKSpace >::VoronoiPointPredicate

Definition at line 204 of file ShortcutsGeometry.h.

Constructor & Destructor Documentation

◆ ShortcutsGeometry() [1/3]

template<typename TKSpace >
DGtal::ShortcutsGeometry< TKSpace >::ShortcutsGeometry ( )
delete

Default constructor.

◆ ~ShortcutsGeometry()

template<typename TKSpace >
DGtal::ShortcutsGeometry< TKSpace >::~ShortcutsGeometry ( )
delete

Destructor.

◆ ShortcutsGeometry() [2/3]

template<typename TKSpace >
DGtal::ShortcutsGeometry< TKSpace >::ShortcutsGeometry ( const ShortcutsGeometry< TKSpace > &  other)
delete

Copy constructor.

Parameters
otherthe object to clone.

◆ ShortcutsGeometry() [3/3]

template<typename TKSpace >
DGtal::ShortcutsGeometry< TKSpace >::ShortcutsGeometry ( ShortcutsGeometry< TKSpace > &&  other)
delete

Move constructor.

Parameters
otherthe object to move.

Member Function Documentation

◆ BOOST_CONCEPT_ASSERT()

template<typename TKSpace >
DGtal::ShortcutsGeometry< TKSpace >::BOOST_CONCEPT_ASSERT ( (concepts::CCellularGridSpaceND< TKSpace >)  )
private

◆ defaultParameters()

◆ getATScalarFieldApproximation() [1/2]

template<typename TKSpace >
template<typename TAnyDigitalSurface >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getATScalarFieldApproximation ( CountedPtr< TAnyDigitalSurface >  surface,
const SurfelRange surfels,
const Scalars input,
const Parameters params = parametersATApproximation() | parametersGeometryEstimation() 
)
inlinestatic

Given any digital surface, a surfel range surfels, and an input scalar field input, returns a piece-smooth approximation of input using Ambrosio-Tortorelli functional.

See also
Piecewise-smooth approximation using a discrete calculus model of Ambrosio-Tortorelli functional
Template Parameters
TAnyDigitalSurfaceeither kind of DigitalSurface, like ShortcutsGeometry::LightDigitalSurface or ShortcutsGeometry::DigitalSurface.
Parameters
[in]surfacethe digital surface
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • at-alpha [ 0.1 ]: parameter alpha in AT (data fit)
  • at-lambda [ 0.025 ]: parameter lambda in AT (1/length of discontinuities)
  • at-epsilon [ 0.5 ]: (last value of) parameter epsilon in AT (width of discontinuities)
  • at-epsilon-start[ 2.0 ]: first value for parameter epsilon in Gamma-convergence optimization (sequence of AT optimization with decreasing epsilon)
  • at-epsilon-ratio[ 2.0 ]: ratio between two consecutive epsilon value in Gamma-convergence optimization (sequence of AT optimization with decreasing epsilon)
  • at-max-iter [ 10 ]: maximum number of alternate minization in AT optimization
  • at-diff-v-max [ 0.0001]: stopping criterion that measures the loo-norm of the evolution of v between two iterations
[in]inputthe input scalar field (a vector of scalar values)
Returns
the piecewise-smooth approximation of input.

Definition at line 1860 of file ShortcutsGeometry.h.

1865 {
1866 (void)surface; //param not used FIXME: JOL
1867
1868 int verbose = params[ "verbose" ].as<int>();
1869 Scalar alpha_at = params[ "at-alpha" ].as<Scalar>();
1870 Scalar lambda_at = params[ "at-lambda" ].as<Scalar>();
1871 Scalar epsilon1 = params[ "at-epsilon-start" ].as<Scalar>();
1872 Scalar epsilon2 = params[ "at-epsilon" ].as<Scalar>();
1873 Scalar epsilonr = params[ "at-epsilon-ratio" ].as<Scalar>();
1874 int max_iter = params[ "at-max-iter" ].as<int>();
1875 Scalar diff_v_max= params[ "at-diff-v-max" ].as<Scalar>();
1876 typedef DiscreteExteriorCalculusFactory<EigenLinearAlgebraBackend> CalculusFactory;
1877 const auto calculus = CalculusFactory::createFromNSCells<2>( surfels.cbegin(), surfels.cend() );
1878 ATSolver2D< KSpace > at_solver( calculus, verbose );
1879 at_solver.initInputScalarFieldU2( input, surfels.cbegin(), surfels.cend() );
1880 at_solver.setUp( alpha_at, lambda_at );
1881 at_solver.solveGammaConvergence( epsilon1, epsilon2, epsilonr, false, diff_v_max, max_iter );
1882 auto output = input;
1883 at_solver.getOutputScalarFieldU2( output, surfels.cbegin(), surfels.cend() );
1884 return output;
1885 }
PolyCalculus * calculus
CountedPtr< SH3::DigitalSurface > surface

References calculus, DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::getOutputScalarFieldU2(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::initInputScalarFieldU2(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::setUp(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::solveGammaConvergence(), and surface.

◆ getATScalarFieldApproximation() [2/2]

template<typename TKSpace >
template<typename TAnyDigitalSurface , typename CellRangeConstIterator >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getATScalarFieldApproximation ( Scalars features,
CellRangeConstIterator  itB,
CellRangeConstIterator  itE,
CountedPtr< TAnyDigitalSurface >  surface,
const SurfelRange surfels,
const Scalars input,
const Parameters params = parametersATApproximation() | parametersGeometryEstimation() 
)
inlinestatic

Given any digital surface, a surfel range surfels, and an input scalar field input, returns a piece-smooth approximation of input using Ambrosio-Tortorelli functional. Given a range of pointels, linels or 2-cells [itB,itE), it also outputs the feature vector features, corresponding to 0-form v in AT (the average of v for linels/surfels).

See also
Piecewise-smooth approximation using a discrete calculus model of Ambrosio-Tortorelli functional
Template Parameters
TAnyDigitalSurfaceeither kind of DigitalSurface, like ShortcutsGeometry::LightDigitalSurface or ShortcutsGeometry::DigitalSurface.
CellRangeConstIteratorthe type of iterator for traversing a range of cells
Parameters
[out]featuresthe vector of scalar feature values (a scalar field where 1 means continuity and 0 discontinuity in the reconstruction), evaluated in the range[itB,itE).
[in]itBthe start of the range of cells.
[in]itEpast the end of the range of cells.
[in]surfacethe digital surface
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • at-alpha [ 0.1 ]: parameter alpha in AT (data fit)
  • at-lambda [ 0.025 ]: parameter lambda in AT (1/length of discontinuities)
  • at-epsilon [ 0.5 ]: (last value of) parameter epsilon in AT (width of discontinuities)
  • at-epsilon-start[ 2.0 ]: first value for parameter epsilon in Gamma-convergence optimization (sequence of AT optimization with decreasing epsilon)
  • at-epsilon-ratio[ 2.0 ]: ratio between two consecutive epsilon value in Gamma-convergence optimization (sequence of AT optimization with decreasing epsilon)
  • at-max-iter [ 10 ]: maximum number of alternate minization in AT optimization
  • at-diff-v-max [ 0.0001]: stopping criterion that measures the loo-norm of the evolution of v between two iterations
  • at-v-policy ["Maximum"]: the policy when outputing feature vector v onto cells: "Average"|"Minimum"|"Maximum"
[in]inputthe input scalar field (a vector of scalar values)
Returns
the piecewise-smooth approximation of input.

Definition at line 1925 of file ShortcutsGeometry.h.

1933 {
1934 (void)surface; //param not used FIXME: JOL
1935
1936 int verbose = params[ "verbose" ].as<int>();
1937 Scalar alpha_at = params[ "at-alpha" ].as<Scalar>();
1938 Scalar lambda_at = params[ "at-lambda" ].as<Scalar>();
1939 Scalar epsilon1 = params[ "at-epsilon-start" ].as<Scalar>();
1940 Scalar epsilon2 = params[ "at-epsilon" ].as<Scalar>();
1941 Scalar epsilonr = params[ "at-epsilon-ratio" ].as<Scalar>();
1942 int max_iter = params[ "at-max-iter" ].as<int>();
1943 Scalar diff_v_max= params[ "at-diff-v-max" ].as<Scalar>();
1944 std::string policy = params[ "at-v-policy" ].as<std::string>();
1945 typedef DiscreteExteriorCalculusFactory<EigenLinearAlgebraBackend> CalculusFactory;
1946 const auto calculus = CalculusFactory::createFromNSCells<2>( surfels.cbegin(), surfels.cend() );
1947 ATSolver2D< KSpace > at_solver( calculus, verbose );
1948 at_solver.initInputScalarFieldU2( input, surfels.cbegin(), surfels.cend() );
1949 at_solver.setUp( alpha_at, lambda_at );
1950 at_solver.solveGammaConvergence( epsilon1, epsilon2, epsilonr, false, diff_v_max, max_iter );
1951 auto output = input;
1952 at_solver.getOutputScalarFieldU2( output, surfels.cbegin(), surfels.cend() );
1953 auto p = ( policy == "Average" ) ? at_solver.Average
1954 : ( policy == "Minimum" ) ? at_solver.Minimum
1955 : at_solver.Maximum;
1956 at_solver.getOutputScalarFieldV0( features, itB, itE, p );
1957 return output;
1958 }

References DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::Average, calculus, DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::getOutputScalarFieldU2(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::getOutputScalarFieldV0(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::initInputScalarFieldU2(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::Maximum, DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::Minimum, DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::setUp(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::solveGammaConvergence(), and surface.

◆ getATVectorFieldApproximation() [1/2]

template<typename TKSpace >
template<typename TAnyDigitalSurface , typename VectorFieldInput >
static VectorFieldInput DGtal::ShortcutsGeometry< TKSpace >::getATVectorFieldApproximation ( CountedPtr< TAnyDigitalSurface >  surface,
const SurfelRange surfels,
const VectorFieldInput &  input,
const Parameters params = parametersATApproximation() | parametersGeometryEstimation() 
)
inlinestatic

Given any digital surface, a surfel range surfels, and an input vector field input, returns a piece-smooth approximation of input using Ambrosio-Tortorelli functional.

See also
Piecewise-smooth approximation using a discrete calculus model of Ambrosio-Tortorelli functional
Template Parameters
TAnyDigitalSurfaceeither kind of DigitalSurface, like ShortcutsGeometry::LightDigitalSurface or ShortcutsGeometry::DigitalSurface.
VectorFieldInputthe type of vector field for input values (RandomAccess container)
Parameters
[in]surfacethe digital surface
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • at-alpha [ 0.1 ]: parameter alpha in AT (data fit)
  • at-lambda [ 0.025 ]: parameter lambda in AT (1/length of discontinuities)
  • at-epsilon [ 0.5 ]: (last value of) parameter epsilon in AT (width of discontinuities)
  • at-epsilon-start[ 2.0 ]: first value for parameter epsilon in Gamma-convergence optimization (sequence of AT optimization with decreasing epsilon)
  • at-epsilon-ratio[ 2.0 ]: ratio between two consecutive epsilon value in Gamma-convergence optimization (sequence of AT optimization with decreasing epsilon)
  • at-max-iter [ 10 ]: maximum number of alternate minization in AT optimization
  • at-diff-v-max [ 0.0001]: stopping criterion that measures the loo-norm of the evolution of v between two iterations
[in]inputthe input vector field (a vector of vector values)
Returns
the piecewise-smooth approximation of input.

Definition at line 1737 of file ShortcutsGeometry.h.

1742 {
1743 (void)surface; //param not used. FIXME: JOL
1744
1745 int verbose = params[ "verbose" ].as<int>();
1746 Scalar alpha_at = params[ "at-alpha" ].as<Scalar>();
1747 Scalar lambda_at = params[ "at-lambda" ].as<Scalar>();
1748 Scalar epsilon1 = params[ "at-epsilon-start" ].as<Scalar>();
1749 Scalar epsilon2 = params[ "at-epsilon" ].as<Scalar>();
1750 Scalar epsilonr = params[ "at-epsilon-ratio" ].as<Scalar>();
1751 int max_iter = params[ "at-max-iter" ].as<int>();
1752 Scalar diff_v_max= params[ "at-diff-v-max" ].as<Scalar>();
1753 typedef DiscreteExteriorCalculusFactory<EigenLinearAlgebraBackend> CalculusFactory;
1754 const auto calculus = CalculusFactory::createFromNSCells<2>( surfels.cbegin(), surfels.cend() );
1755 ATSolver2D< KSpace > at_solver( calculus, verbose );
1756 at_solver.initInputVectorFieldU2( input, surfels.cbegin(), surfels.cend() );
1757 at_solver.setUp( alpha_at, lambda_at );
1758 at_solver.solveGammaConvergence( epsilon1, epsilon2, epsilonr, false, diff_v_max, max_iter );
1759 auto output = input;
1760 at_solver.getOutputVectorFieldU2( output, surfels.cbegin(), surfels.cend() );
1761 return output;
1762 }

References calculus, DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::getOutputVectorFieldU2(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::initInputVectorFieldU2(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::setUp(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::solveGammaConvergence(), and surface.

◆ getATVectorFieldApproximation() [2/2]

template<typename TKSpace >
template<typename TAnyDigitalSurface , typename VectorFieldInput , typename CellRangeConstIterator >
static VectorFieldInput DGtal::ShortcutsGeometry< TKSpace >::getATVectorFieldApproximation ( Scalars features,
CellRangeConstIterator  itB,
CellRangeConstIterator  itE,
CountedPtr< TAnyDigitalSurface >  surface,
const SurfelRange surfels,
const VectorFieldInput &  input,
const Parameters params = parametersATApproximation() | parametersGeometryEstimation() 
)
inlinestatic

Given any digital surface, a surfel range surfels, and an input vector field input, returns a piece-smooth approximation of input using Ambrosio-Tortorelli functional. Given a range of pointels, linels or 2-cells [itB,itE), it also outputs the feature vector features, corresponding to 0-form v in AT (the average of v for linels/surfels).

See also
Piecewise-smooth approximation using a discrete calculus model of Ambrosio-Tortorelli functional
Template Parameters
TAnyDigitalSurfaceeither kind of DigitalSurface, like ShortcutsGeometry::LightDigitalSurface or ShortcutsGeometry::DigitalSurface.
VectorFieldInputthe type of vector field for input values (RandomAccess container)
CellRangeConstIteratorthe type of iterator for traversing a range of cells
Parameters
[out]featuresthe vector of scalar feature values (a scalar field where 1 means continuity and 0 discontinuity in the reconstruction), evaluated in the range[itB,itE).
[in]itBthe start of the range of cells.
[in]itEpast the end of the range of cells.
[in]surfacethe digital surface
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • at-alpha [ 0.1 ]: parameter alpha in AT (data fit)
  • at-lambda [ 0.025 ]: parameter lambda in AT (1/length of discontinuities)
  • at-epsilon [ 0.5 ]: (last value of) parameter epsilon in AT (width of discontinuities)
  • at-epsilon-start[ 2.0 ]: first value for parameter epsilon in Gamma-convergence optimization (sequence of AT optimization with decreasing epsilon)
  • at-epsilon-ratio[ 2.0 ]: ratio between two consecutive epsilon value in Gamma-convergence optimization (sequence of AT optimization with decreasing epsilon)
  • at-max-iter [ 10 ]: maximum number of alternate minization in AT optimization
  • at-diff-v-max [ 0.0001]: stopping criterion that measures the loo-norm of the evolution of v between two iterations
  • at-v-policy ["Maximum"]: the policy when outputing feature vector v onto cells: "Average"|"Minimum"|"Maximum"
[in]inputthe input vector field (a vector of vector values)
Returns
the piecewise-smooth approximation of input.

Definition at line 1799 of file ShortcutsGeometry.h.

1807 {
1808 (void)surface; //param not used FIXME: JOL
1809
1810 int verbose = params[ "verbose" ].as<int>();
1811 Scalar alpha_at = params[ "at-alpha" ].as<Scalar>();
1812 Scalar lambda_at = params[ "at-lambda" ].as<Scalar>();
1813 Scalar epsilon1 = params[ "at-epsilon-start" ].as<Scalar>();
1814 Scalar epsilon2 = params[ "at-epsilon" ].as<Scalar>();
1815 Scalar epsilonr = params[ "at-epsilon-ratio" ].as<Scalar>();
1816 int max_iter = params[ "at-max-iter" ].as<int>();
1817 Scalar diff_v_max= params[ "at-diff-v-max" ].as<Scalar>();
1818 std::string policy = params[ "at-v-policy" ].as<std::string>();
1819 typedef DiscreteExteriorCalculusFactory<EigenLinearAlgebraBackend> CalculusFactory;
1820 const auto calculus = CalculusFactory::createFromNSCells<2>( surfels.cbegin(), surfels.cend() );
1821 ATSolver2D< KSpace > at_solver( calculus, verbose );
1822 at_solver.initInputVectorFieldU2( input, surfels.cbegin(), surfels.cend() );
1823 at_solver.setUp( alpha_at, lambda_at );
1824 at_solver.solveGammaConvergence( epsilon1, epsilon2, epsilonr, false, diff_v_max, max_iter );
1825 auto output = input;
1826 at_solver.getOutputVectorFieldU2( output, surfels.cbegin(), surfels.cend() );
1827 auto p = ( policy == "Average" ) ? at_solver.Average
1828 : ( policy == "Minimum" ) ? at_solver.Minimum
1829 : at_solver.Maximum;
1830 at_solver.getOutputScalarFieldV0( features, itB, itE, p );
1831 return output;
1832 }

References DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::Average, calculus, DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::getOutputScalarFieldV0(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::getOutputVectorFieldU2(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::initInputVectorFieldU2(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::Maximum, DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::Minimum, DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::setUp(), DGtal::ATSolver2D< TKSpace, TLinearAlgebra >::solveGammaConvergence(), and surface.

◆ getCNCGaussianCurvatures() [1/3]

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getCNCGaussianCurvatures ( CountedPtr< typename Base::SurfaceMesh mesh,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a SurfaceMesh, compute gaussian curvature at each face using CorrectedNormalCurrent method.

This overloads compute curvature for each face of the mesh.

Warning
In this code, only triangles with barycenters strictly inside the sphere are considered.
Parameters
meshThe surface mesh
params
  • unit_u: Whether the computed normals should be normalized or not
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II, CNC)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
The curvatures for each face of the mesh, in thn the order given by the mesh

Definition at line 591 of file ShortcutsGeometry.h.

594 {
595 std::vector<typename Base::SurfaceMesh::Face> allFaces(mesh->nbFaces());
596 std::iota(allFaces.begin(), allFaces.end(), 0);
597
598 return getCNCGaussianCurvatures(mesh, allFaces, params);
599 }
static Scalars getCNCGaussianCurvatures(CountedPtr< typename Base::SurfaceMesh > mesh, const typename Base::SurfaceMesh::Faces &faces, const Parameters &params=parametersShapeGeometry())

References DGtal::ShortcutsGeometry< TKSpace >::getCNCGaussianCurvatures().

◆ getCNCGaussianCurvatures() [2/3]

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getCNCGaussianCurvatures ( CountedPtr< typename Base::SurfaceMesh mesh,
const typename Base::SurfaceMesh::Faces &  faces,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a SurfaceMesh, compute gaussian curvature at each face using CorrectedNormalCurrent method.

Warning
In this code, only triangles with barycenters strictly inside the sphere are considered.
Parameters
meshThe surface mesh
facesThe faces to compute curvature at
params
  • unit_u: Whether the computed normals should be normalized or not
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II, CNC)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
The curvatures for each face of the mesh, in the same order faces

Definition at line 542 of file ShortcutsGeometry.h.

546 {
547 using Face = typename Base::SurfaceMesh::Face;
548
549 bool unit_u = params["unit_u"].as<int>();
550 double radius = params["r-radius"].as<double>();
551 double alpha = params["alpha"].as<double>();
552 double h = params["gridstep"].as<double>();
553 if ( alpha != 1.0 ) radius *= pow( h, alpha-1.0 );
554
555 CNCComputer computer(*mesh, unit_u);
556
557 const auto& mu0 = computer.computeMu0();
558 const auto& mu2 = computer.computeMu2();
559
560 Scalars curvatures(faces.size());
561 for (size_t i = 0; i < faces.size(); ++i)
562 {
563 const auto center = mesh->faceCentroid(faces[i]);
564 const auto area = mu0.measure(center, radius, faces[i]);
565 const auto lmu2 = mu2.measure(center, radius, faces[i]);
566 curvatures[i] = CNCComputer::GaussianCurvature(area, lmu2);
567 }
568
569 return curvatures;
570 }
CorrectedNormalCurrentComputer< RealPoint, RealVector > CNCComputer
LightDigitalSurface::Face Face
Definition Shortcuts.h:163
Point center(const std::vector< Point > &points)
static Scalar GaussianCurvature(Scalar mu0, Scalar mu2)
TriMesh::Face Face

References DGtal::CorrectedNormalCurrentComputer< TRealPoint, TRealVector >::computeMu0(), DGtal::CorrectedNormalCurrentComputer< TRealPoint, TRealVector >::computeMu2(), and DGtal::CorrectedNormalCurrentComputer< TRealPoint, TRealVector >::GaussianCurvature().

Referenced by DGtal::ShortcutsGeometry< TKSpace >::getCNCGaussianCurvatures(), and DGtal::ShortcutsGeometry< TKSpace >::getCNCGaussianCurvatures().

◆ getCNCGaussianCurvatures() [3/3]

template<typename TKSpace >
template<typename T >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getCNCGaussianCurvatures ( T &  digitalObject,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a SurfaceMesh, compute mean curvature at each face using CorrectedNormalCurrent method.

Warning
In this code, only triangles with barycenters strictly inside the sphere are considered.
Template Parameters
TAny digital object convertible to surface mesh via Shortcuts::makePrimalSurfaceMesh
Parameters
digitalObjectA digital object
params
  • unit_u: Whether the computed normals should be normalized or not
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II, CNC)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
The curvatures for each face of the triangulated surface object

Definition at line 620 of file ShortcutsGeometry.h.

622 {
623 CountedPtr<typename Base::SurfaceMesh> mesh = Base::makePrimalSurfaceMesh(digitalObject);
624 return getCNCGaussianCurvatures(mesh, params);
625 }
static CountedPtr< SurfaceMesh > makePrimalSurfaceMesh(Cell2Index &c2i, CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
Definition Shortcuts.h:2633

References DGtal::ShortcutsGeometry< TKSpace >::getCNCGaussianCurvatures(), and DGtal::Shortcuts< TKSpace >::makePrimalSurfaceMesh().

◆ getCNCMeanCurvatures() [1/3]

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getCNCMeanCurvatures ( CountedPtr< typename Base::SurfaceMesh mesh,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a SurfaceMesh, compute mean curvature at each face using CorrectedNormalCurrent method.

This overloads compute curvature for each face of the mesh.

Warning
In this code, only triangles with barycenters strictly inside the sphere are considered.
Parameters
meshThe surface mesh
params
  • unit_u: Whether the computed normals should be normalized or not
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II, CNC)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
The curvatures for each face of mesh, in the the order given by the mesh

Definition at line 448 of file ShortcutsGeometry.h.

451 {
452 std::vector<typename Base::SurfaceMesh::Face> allFaces(mesh->nbFaces());
453 std::iota(allFaces.begin(), allFaces.end(), 0);
454
455 return getCNCMeanCurvatures(mesh, allFaces, params);
456 }
static Scalars getCNCMeanCurvatures(CountedPtr< typename Base::SurfaceMesh > mesh, const typename Base::SurfaceMesh::Faces faces, const Parameters &params=parametersShapeGeometry())

References DGtal::ShortcutsGeometry< TKSpace >::getCNCMeanCurvatures().

◆ getCNCMeanCurvatures() [2/3]

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getCNCMeanCurvatures ( CountedPtr< typename Base::SurfaceMesh mesh,
const typename Base::SurfaceMesh::Faces  faces,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a SurfaceMesh, compute mean curvature at each face using CorrectedNormalCurrent method.

Warning
In this code, only triangles with barycenters strictly inside the sphere are considered.
Parameters
meshThe surface mesh
facesThe faces to compute curvature at
params
  • unit_u: Whether the computed normals should be normalized or not
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II, CNC)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
The curvatures for each face of the mesh, in the same order faces

Definition at line 399 of file ShortcutsGeometry.h.

403 {
404 using Face = typename Base::SurfaceMesh::Face;
405
406 bool unit_u = params["unit_u"].as<int>();
407 double radius = params["r-radius"].as<double>();
408 double alpha = params["alpha"].as<double>();
409 double h = params["gridstep"].as<double>();
410 if ( alpha != 1.0 ) radius *= pow( h, alpha-1.0 );
411
412 CNCComputer computer(*mesh, unit_u);
413
414 const auto& mu0 = computer.computeMu0();
415 const auto& mu1 = computer.computeMu1();
416
417 Scalars curvatures(faces.size());
418 for (size_t i = 0; i < faces.size(); ++i)
419 {
420 const auto center = mesh->faceCentroid(faces[i]);
421 const auto area = mu0.measure(center, radius, faces[i]);
422 const auto lmu1 = mu1.measure(center, radius, faces[i]);
423 curvatures[i] = CNCComputer::meanCurvature(area, lmu1);
424 }
425
426 return curvatures;
427 }
static Scalar meanCurvature(Scalar mu0, Scalar mu1)

References DGtal::CorrectedNormalCurrentComputer< TRealPoint, TRealVector >::computeMu0(), DGtal::CorrectedNormalCurrentComputer< TRealPoint, TRealVector >::computeMu1(), and DGtal::CorrectedNormalCurrentComputer< TRealPoint, TRealVector >::meanCurvature().

Referenced by DGtal::ShortcutsGeometry< TKSpace >::getCNCMeanCurvatures(), and DGtal::ShortcutsGeometry< TKSpace >::getCNCMeanCurvatures().

◆ getCNCMeanCurvatures() [3/3]

template<typename TKSpace >
template<typename T >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getCNCMeanCurvatures ( T &  digitalObject,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a SurfaceMesh, compute mean curvature at each face using CorrectedNormalCurrent method.

Warning
In this code, only triangles with barycenters strictly inside the sphere are considered.
Template Parameters
Anydigital object convertible to surface mesh via Shortcuts::makePrimalSurfaceMesh
Parameters
digitalObjectA digital object
params
  • unit_u: Whether the computed normals should be normalized or not
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II, CNC)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
The curvatures for each face of the triangulated surface object

Definition at line 477 of file ShortcutsGeometry.h.

479 {
480 CountedPtr<typename Base::SurfaceMesh> mesh = Base::makePrimalSurfaceMesh(digitalObject);
481 return getCNCMeanCurvatures(mesh, params);
482 }

References DGtal::ShortcutsGeometry< TKSpace >::getCNCMeanCurvatures(), and DGtal::Shortcuts< TKSpace >::makePrimalSurfaceMesh().

◆ getCNCPrincipalCurvaturesAndDirections() [1/3]

template<typename TKSpace >
static std::tuple< Scalars, Scalars, RealVectors, RealVectors > DGtal::ShortcutsGeometry< TKSpace >::getCNCPrincipalCurvaturesAndDirections ( CountedPtr< typename Base::SurfaceMesh mesh,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a SurfaceMesh, compute principal curvature at each face using CorrectedNormalCurrent method.

This overloads compute curvature for each face of the mesh.

Note
If no normals are provided for the faces, the normals will be computed (and set) using vertex normals if they exist and positions otherwise.
Warning
In this code, only triangles with barycenters strictly inside the sphere are considered.
Parameters
[in,out]meshThe surface mesh. The mesh will be modified if no face normals are provided.
[in]params
  • unit_u: Whether the computed normals should be normalized or not
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II, CNC)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
The principal curvatures for each face of the mesh, in the same order as mesh faces. The result is a 4-element tuples: [first curvatures, second curvatures, first directions, second directions].

Definition at line 931 of file ShortcutsGeometry.h.

934 {
935 std::vector<typename Base::SurfaceMesh::Face> allFaces(mesh->nbFaces());
936 std::iota(allFaces.begin(), allFaces.end(), 0);
937
938 return getCNCPrincipalCurvaturesAndDirections(mesh, allFaces, params);
939 }
static std::tuple< Scalars, Scalars, RealVectors, RealVectors > getCNCPrincipalCurvaturesAndDirections(CountedPtr< typename Base::SurfaceMesh > mesh, const typename Base::SurfaceMesh::Faces &faces, const Parameters &params=parametersShapeGeometry())

References DGtal::ShortcutsGeometry< TKSpace >::getCNCPrincipalCurvaturesAndDirections().

◆ getCNCPrincipalCurvaturesAndDirections() [2/3]

template<typename TKSpace >
static std::tuple< Scalars, Scalars, RealVectors, RealVectors > DGtal::ShortcutsGeometry< TKSpace >::getCNCPrincipalCurvaturesAndDirections ( CountedPtr< typename Base::SurfaceMesh mesh,
const typename Base::SurfaceMesh::Faces &  faces,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a SurfaceMesh, compute principal curvature at each face using CorrectedNormalCurrent method.

Note
If no normals are provided for the faces, the normals will be computed (and set) using vertex normals if they exist and positions otherwise.
Warning
In this code, only triangles with barycenters strictly inside the sphere are considered.
Parameters
[in,out]meshThe surface mesh. The mesh will be modified if no face normals are provided.
[in]facesThe faces to compute curvature at
[in]params
  • unit_u: Whether the computed normals should be normalized or not
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II, CNC)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
The principal curvatures for each face of the mesh, in the same order as faces. The result is a 4-element tuples: [first curvatures, second curvatures, first directions, second directions].

Definition at line 861 of file ShortcutsGeometry.h.

865 {
866 using Face = typename Base::SurfaceMesh::Face;
867
868 bool unit_u = params["unit_u"].as<int>();
869 double radius = params["r-radius"].as<double>();
870 double alpha = params["alpha"].as<double>();
871 double h = params["gridstep"].as<double>();
872 if ( alpha != 1.0 ) radius *= pow( h, alpha-1.0 );
873
874 CNCComputer computer(*mesh, unit_u);
875
876 const auto& mu0 = computer.computeMu0();
877 const auto& muxy = computer.computeMuXY();
878
879 if (mesh->faceNormals().size() == 0)
880 {
881 // Try to use vertex normals if any
882 if (mesh->vertexNormals().size() == 0)
883 mesh->computeFaceNormalsFromPositions();
884 else
885 mesh->computeFaceNormalsFromVertexNormals();
886 }
887
888 const auto& normals = mesh->faceNormals();
889
890 Scalars k1(faces.size()), k2(faces.size());
891 RealVectors d1(faces.size()), d2(faces.size());
892
893 for (size_t i = 0; i < faces.size(); ++i)
894 {
895 const auto center = mesh->faceCentroid(faces[i]);
896 const auto area = mu0 .measure(center, radius, faces[i]);
897 const auto lmuxy = muxy.measure(center, radius, faces[i]);
898 std::tie(k1[i], k2[i], d1[i], d2[i]) =
899 CNCComputer::principalCurvatures(area, lmuxy, normals[faces[i]]);
900 }
901
902 return std::make_tuple(k1, k2, d1, d2);
903 }
std::vector< RealVector > RealVectors
static std::tuple< Scalar, Scalar, RealVector, RealVector > principalCurvatures(Scalar mu0, RealTensor muXY, const RealVector &N)

References DGtal::CorrectedNormalCurrentComputer< TRealPoint, TRealVector >::computeMu0(), DGtal::CorrectedNormalCurrentComputer< TRealPoint, TRealVector >::computeMuXY(), and DGtal::CorrectedNormalCurrentComputer< TRealPoint, TRealVector >::principalCurvatures().

Referenced by DGtal::ShortcutsGeometry< TKSpace >::getCNCPrincipalCurvaturesAndDirections(), and DGtal::ShortcutsGeometry< TKSpace >::getCNCPrincipalCurvaturesAndDirections().

◆ getCNCPrincipalCurvaturesAndDirections() [3/3]

template<typename TKSpace >
template<typename T >
static std::tuple< Scalars, Scalars, RealVectors, RealVectors > DGtal::ShortcutsGeometry< TKSpace >::getCNCPrincipalCurvaturesAndDirections ( T &  digitalObject,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a SurfaceMesh, compute principal curvature at each face using CorrectedNormalCurrent method.

Warning
In this code, only triangles with barycenters strictly inside the sphere are considered.
Template Parameters
TAny digital object convertible to surface mesh via Shortcuts::makePrimalSurfaceMesh
Parameters
digitalObjectA digital object
params
  • unit_u: Whether the computed normals should be normalized or not
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II, CNC)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
The curvatures for each face of the triangulated surface object

Definition at line 962 of file ShortcutsGeometry.h.

965 {
966 CountedPtr<typename Base::SurfaceMesh> mesh = Base::makePrimalSurfaceMesh(digitalObject);
967 return getCNCPrincipalCurvaturesAndDirections(mesh, params);
968 }

References DGtal::ShortcutsGeometry< TKSpace >::getCNCPrincipalCurvaturesAndDirections(), and DGtal::Shortcuts< TKSpace >::makePrimalSurfaceMesh().

◆ getCTrivialNormalVectors()

template<typename TKSpace >
template<typename TAnyDigitalSurface >
static RealVectors DGtal::ShortcutsGeometry< TKSpace >::getCTrivialNormalVectors ( CountedPtr< TAnyDigitalSurface >  surface,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() 
)
inlinestatic

Given a digital surface surface, a sequence of surfels, and some parameters params, returns the convolved trivial normal vector estimations at the specified surfels, in the same order.

Template Parameters
TAnyDigitalSurfaceeither kind of DigitalSurface, like ShortcutsGeometry::LightDigitalSurface or ShortcutsGeometry::DigitalSurface.
Parameters
[in]surfacethe digital surface
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • t-ring [ 3.0]: the radius used when computing convolved trivial normals (it is a graph distance, not related to the grid step).
Returns
the vector containing the estimated normals, in the same order as surfels.

Definition at line 1041 of file ShortcutsGeometry.h.

1045 {
1046 int verbose = params[ "verbose" ].as<int>();
1047 Scalar t = params[ "t-ring" ].as<double>();
1048 typedef typename TAnyDigitalSurface::DigitalSurfaceContainer SurfaceContainer;
1049 typedef LpMetric<Space> Metric;
1050 typedef functors::HatFunction<Scalar> Functor;
1051 typedef functors::ElementaryConvolutionNormalVectorEstimator
1052 < Surfel, CanonicSCellEmbedder<KSpace> > SurfelFunctor;
1053 typedef LocalEstimatorFromSurfelFunctorAdapter
1054 < SurfaceContainer, Metric, SurfelFunctor, Functor> NormalEstimator;
1055 if ( verbose > 0 )
1056 trace.info() << "- CTrivial normal t-ring=" << t << " (discrete)" << std::endl;
1057 const Functor fct( 1.0, t );
1058 const KSpace & K = surface->container().space();
1059 Metric aMetric( 2.0 );
1060 CanonicSCellEmbedder<KSpace> canonic_embedder( K );
1061 std::vector< RealVector > n_estimations;
1062 SurfelFunctor surfelFct( canonic_embedder, 1.0 );
1063 NormalEstimator estimator;
1064 estimator.attach( *surface);
1065 estimator.setParams( aMetric, surfelFct, fct, t );
1066 estimator.init( 1.0, surfels.begin(), surfels.end());
1067 estimator.eval( surfels.begin(), surfels.end(),
1068 std::back_inserter( n_estimations ) );
1069 std::transform( n_estimations.cbegin(), n_estimations.cend(), n_estimations.begin(),
1070 [] ( RealVector v ) { return -v; } );
1071 return n_estimations;
1072 }
Aim: Implements basic operations that will be used in Point and Vector classes.
LightDigitalSurface::Surfel Surfel
std::ostream & info()
Trace trace
KSpace K

References DGtal::Trace::info(), K, surface, and DGtal::trace.

◆ getDirectionToClosestSite()

template<typename TKSpace >
template<uint32_t p, typename PointRangeSites , typename PointRange >
static std::vector< Vector > DGtal::ShortcutsGeometry< TKSpace >::getDirectionToClosestSite ( const PointRange points,
const PointRangeSites &  sites,
const Parameters params = parametersVoronoiMap() 
)
inlinestatic

Computes the direction of the closest site of a range of points.

Template Parameters
pThe exponent in the Lp metric
PointRangeThe range of point
PointRangeSitesThe range of sites
Parameters
pointsThe one to compute the closest site of
sitesThe list of sites
paramsParameters
Returns
A vector of direction to the closest in the same order as 'points'.

Definition at line 2274 of file ShortcutsGeometry.h.

2278 {
2279 using Metric = ExactPredicateLpSeparableMetric<Space, p>;
2280 using Map = VoronoiMap<Space, VoronoiPointPredicate, Metric>;
2281
2282 // Compute domain of points
2283 Point pmin = *points.begin();
2284 Point pmax = pmin;
2285
2286 size_t pCount = 0;
2287 for (auto it = points.begin(); it != points.end(); ++it)
2288 {
2289 pCount ++;
2290 for (size_t i = 0; i < Space::dimension; ++i)
2291 {
2292 pmin[i] = std::min(pmin[i], (*it)[i] - 1);
2293 pmax[i] = std::max(pmax[i], (*it)[i] + 1);
2294 }
2295 }
2296
2297 for (auto it = sites.begin(); it != sites.end(); ++it)
2298 {
2299 for (size_t i = 0; i < Space::dimension; ++i)
2300 {
2301 pmin[i] = std::min(pmin[i], (*it)[i] - 1);
2302 pmax[i] = std::max(pmax[i], (*it)[i] + 1);
2303 }
2304 }
2305
2306 Domain domain(pmin, pmax);
2307
2308 DigitalSet set(domain); set.insert(sites.begin(), sites.end());
2309 VoronoiPointPredicate predicate(set);
2310 Metric metric;
2311
2312
2313 typename Map::PeriodicitySpec specs = {false, false, false};
2314 if (params["toroidal-x"].as<int>()) specs[0] = true;
2315 if (params["toroidal-y"].as<int>()) specs[1] = true;
2316 if (params["toroidal-z"].as<int>()) specs[2] = true;
2317
2318 auto map = Map(domain, predicate, metric, specs);
2319
2320 std::vector<Vector> directions(pCount);
2321 size_t i = 0;
2322 for (auto it = points.begin(); it != points.end(); ++it)
2323 {
2324 directions[i++] = map(*it);
2325 }
2326 return directions;
2327 }
Aim: A wrapper class around a STL associative container for storing sets of digital points within som...
functors::NotPointPredicate< DigitalSet > VoronoiPointPredicate
std::unordered_map< Cell, CubicalCellData > Map
Domain domain
HyperRectDomain< Space > Domain

References domain, and DGtal::DigitalSetByAssociativeContainer< TDomain, TContainer >::insert().

◆ getDistanceToClosestSite()

template<typename TKSpace >
template<uint32_t p, typename PointRangeSites , typename PointRange >
static std::vector< typename ExactPredicateLpSeparableMetric< Space, p >::Value > DGtal::ShortcutsGeometry< TKSpace >::getDistanceToClosestSite ( const PointRange points,
const PointRangeSites &  sites,
const Parameters params = parametersVoronoiMap() 
)
inlinestatic

Computes the distance of the closest site of a range of points.

Template Parameters
pThe exponent in the Lp metric
PointRangeThe range of point
PointRangeSitesThe range of sites
Parameters
pointsThe one to compute the closest site of
sitesThe list of sites
paramsParameters
Returns
A vector of distances to the closest in the same order as 'points'.

Definition at line 2344 of file ShortcutsGeometry.h.

2348 {
2349 using Metric = ExactPredicateLpSeparableMetric<Space, p>;
2350 using Map = DistanceTransformation<Space, VoronoiPointPredicate, Metric>;
2351
2352 // Compute domain of points
2353 Point pmin = *points.begin();
2354 Point pmax = pmin;
2355
2356 size_t pCount = 0;
2357 for (auto it = points.begin(); it != points.end(); ++it)
2358 {
2359 pCount ++;
2360 for (size_t i = 0; i < Space::dimension; ++i)
2361 {
2362 pmin[i] = std::min(pmin[i], (*it)[i] - 1);
2363 pmax[i] = std::max(pmax[i], (*it)[i] + 1);
2364 }
2365 }
2366
2367 for (auto it = sites.begin(); it != sites.end(); ++it)
2368 {
2369 for (size_t i = 0; i < Space::dimension; ++i)
2370 {
2371 pmin[i] = std::min(pmin[i], (*it)[i] - 1);
2372 pmax[i] = std::max(pmax[i], (*it)[i] + 1);
2373 }
2374 }
2375
2376 Domain domain(pmin, pmax);
2377
2378 DigitalSet set(domain); set.insert(sites.begin(), sites.end());
2379 VoronoiPointPredicate predicate(set);
2380 Metric metric;
2381
2382 typename Map::PeriodicitySpec specs = {false, false, false};
2383 if (params["toroidal-x"].as<int>()) specs[0] = true;
2384 if (params["toroidal-y"].as<int>()) specs[1] = true;
2385 if (params["toroidal-z"].as<int>()) specs[2] = true;
2386
2387 auto map = Map(domain, predicate, metric, specs);
2388
2389 std::vector<typename Metric::Value> directions(pCount);
2390 size_t i = 0;
2391 for (auto it = points.begin(); it != points.end(); ++it)
2392 {
2393 directions[i++] = map(*it);
2394 }
2395 return directions;
2396 }

References domain, and DGtal::DigitalSetByAssociativeContainer< TDomain, TContainer >::insert().

◆ getDistanceTransformation() [1/2]

template<typename TKSpace >
template<uint32_t p, typename PointRange >
static DistanceTransformation< Space, VoronoiPointPredicate, ExactPredicateLpSeparableMetric< Space, p > > DGtal::ShortcutsGeometry< TKSpace >::getDistanceTransformation ( CountedPtr< Domain domain,
const PointRange sites,
const Parameters params = parametersVoronoiMap() 
)
inlinestatic

Computes the VoronoiMap of a domain, where sites are given through a range.

Note
: This overloads return a distance transformation, ie. where operator() returns the distance to the closest site.
Template Parameters
pThe exponent in the Lp metric
PointRangeAn iterable of points (std::vector, DGtal::DigitalSet*, ...)
Parameters
domainThe associated space to compute VoronoiMap on
sitesThe list of sites
paramsthe parameters
Returns
The DistanceTransformation within a domain with prescribed sites

Definition at line 2238 of file ShortcutsGeometry.h.

2241 {
2242 using Metric = ExactPredicateLpSeparableMetric<Space, p>;
2243 using Map = DistanceTransformation<Space, VoronoiPointPredicate, Metric>;
2244 DigitalSet set(*domain); set.insert(sites.begin(), sites.end());
2245 VoronoiPointPredicate predicate(set);
2246 Metric metric;
2247
2248 typename Map::PeriodicitySpec specs = {false, false, false};
2249 if (params["toroidal-x"].as<int>()) specs[0] = true;
2250 if (params["toroidal-y"].as<int>()) specs[1] = true;
2251 if (params["toroidal-z"].as<int>()) specs[2] = true;
2252
2253 // Do not return a pointer here for two reasons:
2254 // - The distance transform will not be passed anywhere else
2255 // - The operator() is less accessible with pointers.
2256 return Map(*domain, predicate, metric, specs);
2257 }

References domain, and DGtal::DigitalSetByAssociativeContainer< TDomain, TContainer >::insert().

◆ getDistanceTransformation() [2/2]

template<typename TKSpace >
template<uint32_t p, typename PointRange >
static DistanceTransformation< Space, VoronoiPointPredicate, ExactPredicateLpSeparableMetric< Space, p > > DGtal::ShortcutsGeometry< TKSpace >::getDistanceTransformation ( Domain  domain,
const PointRange sites,
const Parameters params = parametersVoronoiMap() 
)
inlinestatic

Computes the VoronoiMap of a domain, where sites are given through a range.

Note
: This overloads return a distance transformation, ie. where operator() returns the distance to the closest site.
Template Parameters
pThe exponent in the Lp metric
PointRangeAn iterable of points (std::vector, DGtal::DigitalSet*, ...)
Parameters
domainThe associated space to compute VoronoiMap on
sitesThe list of sites
paramsthe parameters
Returns
The DistanceTransformation within a domain with prescribed sites

Definition at line 2199 of file ShortcutsGeometry.h.

2202 {
2203 using Metric = ExactPredicateLpSeparableMetric<Space, p>;
2204 using Map = DistanceTransformation<Space, VoronoiPointPredicate, Metric>;
2205 DigitalSet set(domain); set.insert(sites.begin(), sites.end());
2206 VoronoiPointPredicate predicate(set);
2207 Metric metric;
2208
2209 typename Map::PeriodicitySpec specs = {false, false, false};
2210 if (params["toroidal-x"].as<int>()) specs[0] = true;
2211 if (params["toroidal-y"].as<int>()) specs[1] = true;
2212 if (params["toroidal-z"].as<int>()) specs[2] = true;
2213
2214 // Do not return a pointer here for two reasons:
2215 // - The distance transform will not be passed anywhere else
2216 // - The operator() is less accessible with pointers.
2217 return Map(domain, predicate, metric, specs);
2218 }

References domain, and DGtal::DigitalSetByAssociativeContainer< TDomain, TContainer >::insert().

◆ getFirstPrincipalCurvatures()

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getFirstPrincipalCurvatures ( CountedPtr< ImplicitShape3D shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a space K, an implicit shape, a sequence of principal curvatures at the specified surfels, in the same order.

Note
that the first principal curvature is approximated by projecting the surfel centroid onto the implicit 3D shape.
Parameters
[in]shapethe implicit shape.
[in]Kthe Khalimsky space whose domain encompasses the digital shape.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the first principal curvatures, in the same order as surfels.

Definition at line 646 of file ShortcutsGeometry.h.

651 {
652 Scalars n_true_estimations;
654 int maxIter = params[ "projectionMaxIter" ].as<int>();
655 double accuracy = params[ "projectionAccuracy" ].as<double>();
656 double gamma = params[ "projectionGamma" ].as<double>();
657 Scalar gridstep = params[ "gridstep" ].as<Scalar>();
658 true_estimator.attach( *shape );
659 true_estimator.setParams( K, FirstPrincipalCurvatureFunctor(),
660 maxIter, accuracy, gamma );
661 true_estimator.init( gridstep, surfels.begin(), surfels.end() );
662 true_estimator.eval( surfels.begin(), surfels.end(),
663 std::back_inserter( n_true_estimations ) );
664 return n_true_estimations;
665 }
TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, FirstPrincipalCurvatureFunctor > TrueFirstPrincipalCurvatureEstimator
sgf::ShapeFirstPrincipalCurvatureFunctor< ImplicitShape3D > FirstPrincipalCurvatureFunctor

References DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::attach(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::eval(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::init(), K, and DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::setParams().

◆ getFirstPrincipalDirections()

template<typename TKSpace >
static RealVectors DGtal::ShortcutsGeometry< TKSpace >::getFirstPrincipalDirections ( CountedPtr< ImplicitShape3D shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a space K, an implicit shape, a sequence of surfels, and a gridstep h, returns the first principal directions (corresponding to the smallest principal curvature) at the specified surfels, in the same order.

Note
that the first principal direction is approximated by projecting the surfel centroid onto the implicit 3D shape.
Parameters
[in]shapethe implicit shape.
[in]Kthe Khalimsky space whose domain encompasses the digital shape.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the first principal directions, in the same order as surfels.

Definition at line 730 of file ShortcutsGeometry.h.

735 {
736 RealVectors n_true_estimations;
738 int maxIter = params[ "projectionMaxIter" ].as<int>();
739 double accuracy = params[ "projectionAccuracy" ].as<double>();
740 double gamma = params[ "projectionGamma" ].as<double>();
741 Scalar gridstep = params[ "gridstep" ].as<Scalar>();
742 true_estimator.attach( *shape );
743 true_estimator.setParams( K, FirstPrincipalDirectionFunctor(),
744 maxIter, accuracy, gamma );
745 true_estimator.init( gridstep, surfels.begin(), surfels.end() );
746 true_estimator.eval( surfels.begin(), surfels.end(),
747 std::back_inserter( n_true_estimations ) );
748 return n_true_estimations;
749 }
sgf::ShapeFirstPrincipalDirectionFunctor< ImplicitShape3D > FirstPrincipalDirectionFunctor
TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, FirstPrincipalDirectionFunctor > TrueFirstPrincipalDirectionEstimator

References DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::attach(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::eval(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::init(), K, and DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::setParams().

◆ getGaussianCurvatures()

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getGaussianCurvatures ( CountedPtr< ImplicitShape3D shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a space K, an implicit shape, a sequence of surfels, and a gridstep h, returns the gaussian curvatures at the specified surfels, in the same order.

Note
that the gaussian curvature is approximated by projecting the surfel centroid onto the implicit 3D shape.
Parameters
[in]shapethe implicit shape.
[in]Kthe Khalimsky space whose domain encompasses the digital shape.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the gaussian curvatures, in the same order as surfels.

Definition at line 504 of file ShortcutsGeometry.h.

509 {
510 Scalars n_true_estimations;
511 TrueGaussianCurvatureEstimator true_estimator;
512 int maxIter = params[ "projectionMaxIter" ].as<int>();
513 double accuracy = params[ "projectionAccuracy" ].as<double>();
514 double gamma = params[ "projectionGamma" ].as<double>();
515 Scalar gridstep = params[ "gridstep" ].as<Scalar>();
516 true_estimator.attach( *shape );
517 true_estimator.setParams( K, GaussianCurvatureFunctor(), maxIter, accuracy, gamma );
518 true_estimator.init( gridstep, surfels.begin(), surfels.end() );
519 true_estimator.eval( surfels.begin(), surfels.end(),
520 std::back_inserter( n_true_estimations ) );
521 return n_true_estimations;
522 }
TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, GaussianCurvatureFunctor > TrueGaussianCurvatureEstimator
sgf::ShapeGaussianCurvatureFunctor< ImplicitShape3D > GaussianCurvatureFunctor

References DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::attach(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::eval(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::init(), K, and DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::setParams().

◆ getIIGaussianCurvatures() [1/3]

template<typename TKSpace >
template<typename TPointPredicate >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getIIGaussianCurvatures ( const TPointPredicate &  shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() 
)
inlinestatic

Given an arbitrary PointPredicate shape: Point -> boolean, a Khalimsky space K, a sequence of surfels, and some parameters params, returns the Gaussian curvature Integral Invariant (II) estimation at the specified surfels, in the same order.

Template Parameters
TPointPredicateany type of map Point -> boolean.
Parameters
[in]shapea function Point -> boolean telling if you are inside the shape.
[in]Kthe Khalimsky space where the shape and surfels live.
[in]surfelsthe sequence of surfels at which we compute the Gaussian curvatures
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
the vector containing the estimated Gaussian curvatures, in the same order as surfels.
Note
The function is faster when surfels are in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1519 of file ShortcutsGeometry.h.

1525 {
1526 typedef functors::IIGaussianCurvature3DFunctor<Space> IIGaussianCurvFunctor;
1527 typedef IntegralInvariantCovarianceEstimator
1528 <KSpace, TPointPredicate, IIGaussianCurvFunctor> IIGaussianCurvEstimator;
1529
1530 Scalars mc_estimations;
1531 int verbose = params[ "verbose" ].as<int>();
1532 Scalar h = params[ "gridstep" ].as<Scalar>();
1533 Scalar r = params[ "r-radius" ].as<Scalar>();
1534 Scalar alpha = params[ "alpha" ].as<Scalar>();
1535 if ( alpha != 1.0 ) r *= pow( h, alpha-1.0 );
1536 if ( verbose > 0 )
1537 {
1538 trace.info() << "- II Gaussian curvature alpha=" << alpha << std::endl;
1539 trace.info() << "- II Gaussian curvature r=" << (r*h) << " (continuous) "
1540 << r << " (discrete)" << std::endl;
1541 }
1542 IIGaussianCurvFunctor functor;
1543 functor.init( h, r*h );
1544 IIGaussianCurvEstimator ii_estimator( functor );
1545 ii_estimator.attach( K, shape );
1546 ii_estimator.setParams( r );
1547 ii_estimator.init( h, surfels.begin(), surfels.end() );
1548 ii_estimator.eval( surfels.begin(), surfels.end(),
1549 std::back_inserter( mc_estimations ) );
1550 return mc_estimations;
1551 }
TKSpace KSpace
Digital cellular space.

References DGtal::Trace::info(), K, and DGtal::trace.

◆ getIIGaussianCurvatures() [2/3]

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getIIGaussianCurvatures ( CountedPtr< BinaryImage bimage,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() 
)
inlinestatic

Given a digital shape bimage, a sequence of surfels, and some parameters vm, returns the Gaussian curvature Integral Invariant (II) estimation at the specified surfels, in the same order.

Parameters
[in]bimagethe characteristic function of the shape as a binary image (inside is true, outside is false).
[in]surfelsthe sequence of surfels at which we compute the Gaussian curvatures
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
the vector containing the estimated Gaussian curvatures, in the same order as surfels.
Note
The function is faster when surfels are in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1448 of file ShortcutsGeometry.h.

1453 {
1454 auto K = getKSpace( bimage, params );
1455 return getIIGaussianCurvatures( *bimage, K, surfels, params );
1456 }
static Scalars getIIGaussianCurvatures(CountedPtr< BinaryImage > bimage, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())
static KSpace getKSpace(const Point &low, const Point &up, Parameters params=parametersKSpace())
Definition Shortcuts.h:329

References DGtal::ShortcutsGeometry< TKSpace >::getIIGaussianCurvatures(), DGtal::ShortcutsGeometry< TKSpace >::getKSpace(), and K.

Referenced by DGtal::ShortcutsGeometry< TKSpace >::getIIGaussianCurvatures(), and DGtal::ShortcutsGeometry< TKSpace >::getIIGaussianCurvatures().

◆ getIIGaussianCurvatures() [3/3]

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getIIGaussianCurvatures ( CountedPtr< DigitizedImplicitShape3D dshape,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() | parametersDigitizedImplicitShape3D() 
)
inlinestatic

Given a digitized implicit shape dshape, a sequence of surfels, and some parameters params, returns the Gaussian curvature Integral Invariant (II) estimation at the specified surfels, in the same order.

Parameters
[in]dshapethe digitized implicit shape, which is an implicitly defined characteristic function.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
  • minAABB [ -10.0]: the min value of the AABB bounding box (domain)
  • maxAABB [ 10.0]: the max value of the AABB bounding box (domain)
  • offset [ 5.0]: the digital dilation of the digital space, useful when you process shapes and that you add noise.
  • closed [ 1]: specifies if the Khalimsky space is closed (!=0) or not (==0)
Returns
the vector containing the estimated Gaussian curvatures, in the same order as surfels.
Note
It is better to have surfels in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1484 of file ShortcutsGeometry.h.

1490 {
1491 auto K = getKSpace( params );
1492 return getIIGaussianCurvatures( *dshape, K, surfels, params );
1493 }

References DGtal::ShortcutsGeometry< TKSpace >::getIIGaussianCurvatures(), DGtal::ShortcutsGeometry< TKSpace >::getKSpace(), and K.

◆ getIIMeanCurvatures() [1/3]

template<typename TKSpace >
template<typename TPointPredicate >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getIIMeanCurvatures ( const TPointPredicate &  shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() 
)
inlinestatic

Given an arbitrary PointPredicate shape: Point -> boolean, a Khalimsky space K, a sequence of surfels, and some parameters params, returns the mean curvature Integral Invariant (II) estimation at the specified surfels, in the same order.

Template Parameters
TPointPredicateany type of map Point -> boolean.
Parameters
[in]shapea function Point -> boolean telling if you are inside the shape.
[in]Kthe Khalimsky space where the shape and surfels live.
[in]surfelsthe sequence of surfels at which we compute the mean curvatures
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
the vector containing the estimated mean curvatures, in the same order as surfels.
Note
The function is faster when surfels are in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1395 of file ShortcutsGeometry.h.

1401 {
1402 typedef functors::IIMeanCurvature3DFunctor<Space> IIMeanCurvFunctor;
1403 typedef IntegralInvariantVolumeEstimator
1404 <KSpace, TPointPredicate, IIMeanCurvFunctor> IIMeanCurvEstimator;
1405
1406 Scalars mc_estimations;
1407 int verbose = params[ "verbose" ].as<int>();
1408 Scalar h = params[ "gridstep" ].as<Scalar>();
1409 Scalar r = params[ "r-radius" ].as<Scalar>();
1410 Scalar alpha = params[ "alpha" ].as<Scalar>();
1411 if ( alpha != 1.0 ) r *= pow( h, alpha-1.0 );
1412 if ( verbose > 0 )
1413 {
1414 trace.info() << "- II mean curvature alpha=" << alpha << std::endl;
1415 trace.info() << "- II mean curvature r=" << (r*h) << " (continuous) "
1416 << r << " (discrete)" << std::endl;
1417 }
1418 IIMeanCurvFunctor functor;
1419 functor.init( h, r*h );
1420 IIMeanCurvEstimator ii_estimator( functor );
1421 ii_estimator.attach( K, shape );
1422 ii_estimator.setParams( r );
1423 ii_estimator.init( h, surfels.begin(), surfels.end() );
1424 ii_estimator.eval( surfels.begin(), surfels.end(),
1425 std::back_inserter( mc_estimations ) );
1426 return mc_estimations;
1427 }

References DGtal::Trace::info(), K, and DGtal::trace.

◆ getIIMeanCurvatures() [2/3]

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getIIMeanCurvatures ( CountedPtr< BinaryImage bimage,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() 
)
inlinestatic

Given a digital shape bimage, a sequence of surfels, and some parameters vm, returns the mean curvature Integral Invariant (II) estimation at the specified surfels, in the same order.

Parameters
[in]bimagethe characteristic function of the shape as a binary image (inside is true, outside is false).
[in]surfelsthe sequence of surfels at which we compute the mean curvatures
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
the vector containing the estimated mean curvatures, in the same order as surfels.
Note
The function is faster when surfels are in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1324 of file ShortcutsGeometry.h.

1329 {
1330 auto K = getKSpace( bimage, params );
1331 return getIIMeanCurvatures( *bimage, K, surfels, params );
1332 }
static Scalars getIIMeanCurvatures(CountedPtr< BinaryImage > bimage, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())

References DGtal::ShortcutsGeometry< TKSpace >::getIIMeanCurvatures(), DGtal::ShortcutsGeometry< TKSpace >::getKSpace(), and K.

Referenced by DGtal::ShortcutsGeometry< TKSpace >::getIIMeanCurvatures(), and DGtal::ShortcutsGeometry< TKSpace >::getIIMeanCurvatures().

◆ getIIMeanCurvatures() [3/3]

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getIIMeanCurvatures ( CountedPtr< DigitizedImplicitShape3D dshape,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() | parametersDigitizedImplicitShape3D() 
)
inlinestatic

Given a digitized implicit shape dshape, a sequence of surfels, and some parameters params, returns the mean curvature Integral Invariant (II) estimation at the specified surfels, in the same order.

Parameters
[in]dshapethe digitized implicit shape, which is an implicitly defined characteristic function.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
  • minAABB [ -10.0]: the min value of the AABB bounding box (domain)
  • maxAABB [ 10.0]: the max value of the AABB bounding box (domain)
  • offset [ 5.0]: the digital dilation of the digital space, useful when you process shapes and that you add noise.
  • closed [ 1]: specifies if the Khalimsky space is closed (!=0) or not (==0)
Returns
the vector containing the estimated mean curvatures, in the same order as surfels.
Note
It is better to have surfels in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1360 of file ShortcutsGeometry.h.

1366 {
1367 auto K = getKSpace( params );
1368 return getIIMeanCurvatures( *dshape, K, surfels, params );
1369 }

References DGtal::ShortcutsGeometry< TKSpace >::getIIMeanCurvatures(), DGtal::ShortcutsGeometry< TKSpace >::getKSpace(), and K.

◆ getIINormalVectors() [1/3]

template<typename TKSpace >
template<typename TPointPredicate >
static RealVectors DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors ( const TPointPredicate &  shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() 
)
inlinestatic

Given an arbitrary PointPredicate shape: Point -> boolean, a Khalimsky space K, a sequence of surfels, and some parameters params, returns the normal Integral Invariant (II) estimation at the specified surfels, in the same order.

Template Parameters
TPointPredicateany type of map Point -> boolean.
Parameters
[in]shapea function Point -> boolean telling if you are inside the shape.
[in]Kthe Khalimsky space where the shape and surfels live.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
the vector containing the estimated normals, in the same order as surfels.
Note
Be careful, normals are reoriented with respect to Trivial normals. If you wish a more robust orientation, use getCTrivialNormalVectors.
It is better to have surfels in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1268 of file ShortcutsGeometry.h.

1274 {
1275 typedef functors::IINormalDirectionFunctor<Space> IINormalFunctor;
1276 typedef IntegralInvariantCovarianceEstimator
1277 <KSpace, TPointPredicate, IINormalFunctor> IINormalEstimator;
1278
1279 RealVectors n_estimations;
1280 int verbose = params[ "verbose" ].as<int>();
1281 Scalar h = params[ "gridstep" ].as<Scalar>();
1282 Scalar r = params[ "r-radius" ].as<Scalar>();
1283 Scalar alpha = params[ "alpha" ].as<Scalar>();
1284 if ( alpha != 1.0 ) r *= pow( h, alpha-1.0 );
1285 if ( verbose > 0 )
1286 {
1287 trace.info() << "- II normal alpha=" << alpha << std::endl;
1288 trace.info() << "- II normal r=" << (r*h) << " (continuous) "
1289 << r << " (discrete)" << std::endl;
1290 }
1291 IINormalFunctor functor;
1292 functor.init( h, r*h );
1293 IINormalEstimator ii_estimator( functor );
1294 ii_estimator.attach( K, shape );
1295 ii_estimator.setParams( r );
1296 ii_estimator.init( h, surfels.begin(), surfels.end() );
1297 ii_estimator.eval( surfels.begin(), surfels.end(),
1298 std::back_inserter( n_estimations ) );
1299 const RealVectors n_trivial = getTrivialNormalVectors( K, surfels );
1300 orientVectors( n_estimations, n_trivial );
1301 return n_estimations;
1302 }
static RealVectors getTrivialNormalVectors(const KSpace &K, const SurfelRange &surfels)
static void orientVectors(RealVectors &v, const RealVectors &ref_v)

References DGtal::ShortcutsGeometry< TKSpace >::getTrivialNormalVectors(), DGtal::Trace::info(), K, DGtal::ShortcutsGeometry< TKSpace >::orientVectors(), and DGtal::trace.

◆ getIINormalVectors() [2/3]

template<typename TKSpace >
static RealVectors DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors ( CountedPtr< BinaryImage bimage,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() 
)
inlinestatic

Given a digital shape bimage, a sequence of surfels, and some parameters params, returns the normal Integral Invariant (II) estimation at the specified surfels, in the same order.

Parameters
[in]bimagethe characteristic function of the shape as a binary image (inside is true, outside is false).
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
the vector containing the estimated normals, in the same order as surfels.
Note
Be careful, normals are reoriented with respect to Trivial normals. If you wish a more robust orientation, use getCTrivialNormalVectors.
It is better to have surfels in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1191 of file ShortcutsGeometry.h.

1196 {
1197 auto K = getKSpace( bimage, params );
1198 return getIINormalVectors( *bimage, K, surfels, params );
1199 }
static RealVectors getIINormalVectors(CountedPtr< BinaryImage > bimage, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())

References DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors(), DGtal::ShortcutsGeometry< TKSpace >::getKSpace(), and K.

Referenced by DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors(), DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors(), and precompute().

◆ getIINormalVectors() [3/3]

template<typename TKSpace >
static RealVectors DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors ( CountedPtr< DigitizedImplicitShape3D dshape,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() | parametersDigitizedImplicitShape3D() 
)
inlinestatic

Given a digitized implicit shape dshape, a sequence of surfels, and some parameters params, returns the normal Integral Invariant (II) estimation at the specified surfels, in the same order.

Parameters
[in]dshapethe digitized implicit shape, which is an implicitly defined characteristic function.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
  • minAABB [ -10.0]: the min value of the AABB bounding box (domain)
  • maxAABB [ 10.0]: the max value of the AABB bounding box (domain)
  • offset [ 5.0]: the digital dilation of the digital space, useful when you process shapes and that you add noise.
  • closed [ 1]: specifies if the Khalimsky space is closed (!=0) or not (==0)
Returns
the vector containing the estimated normals, in the same order as surfels.
Note
Be careful, normals are reoriented with respect to Trivial normals. If you wish a more robust orientation, use getCTrivialNormalVectors.
It is better to have surfels in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1231 of file ShortcutsGeometry.h.

1237 {
1238 auto K = getKSpace( params );
1239 return getIINormalVectors( *dshape, K, surfels, params );
1240 }

References DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors(), DGtal::ShortcutsGeometry< TKSpace >::getKSpace(), and K.

◆ getIIPrincipalCurvaturesAndDirections() [1/3]

template<typename TKSpace >
template<typename TPointPredicate >
static CurvatureTensorQuantities DGtal::ShortcutsGeometry< TKSpace >::getIIPrincipalCurvaturesAndDirections ( const TPointPredicate &  shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() 
)
inlinestatic

Given an arbitrary PointPredicate shape: Point -> boolean, a Khalimsky space K, a sequence of surfels, and some parameters params, returns the principal curvatures and directions using Integral Invariant (II) estimation at the specified surfels, in the same order.

Template Parameters
TPointPredicateany type of map Point -> boolean.
Parameters
[in]shapea function Point -> boolean telling if you are inside the shape.
[in]Kthe Khalimsky space where the shape and surfels live.
[in]surfelsthe sequence of surfels at which we compute the Gaussian curvatures
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).;
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
the vector containing the estimated principal curvatures and directions, in the same order as surfels.
Note
The function is faster when surfels are in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1645 of file ShortcutsGeometry.h.

1651 {
1652 typedef functors::IIPrincipalCurvaturesAndDirectionsFunctor<Space> IICurvFunctor;
1653 typedef IntegralInvariantCovarianceEstimator<KSpace, TPointPredicate, IICurvFunctor> IICurvEstimator;
1654
1655 CurvatureTensorQuantities mc_estimations;
1656 int verbose = params[ "verbose" ].as<int>();
1657 Scalar h = params[ "gridstep" ].as<Scalar>();
1658 Scalar r = params[ "r-radius" ].as<Scalar>();
1659 Scalar alpha = params[ "alpha" ].as<Scalar>();
1660 if ( alpha != 1.0 ) r *= pow( h, alpha-1.0 );
1661 if ( verbose > 0 )
1662 {
1663 trace.info() << "- II principal curvatures and directions alpha=" << alpha << std::endl;
1664 trace.info() << "- II principal curvatures and directions r=" << (r*h) << " (continuous) "
1665 << r << " (discrete)" << std::endl;
1666 }
1667 IICurvFunctor functor;
1668 functor.init( h, r*h );
1669 IICurvEstimator ii_estimator( functor );
1670 ii_estimator.attach( K, shape );
1671 ii_estimator.setParams( r );
1672 ii_estimator.init( h, surfels.begin(), surfels.end() );
1673 ii_estimator.eval( surfels.begin(), surfels.end(),
1674 std::back_inserter( mc_estimations ) );
1675 return mc_estimations;
1676 }
std::vector< CurvatureTensorQuantity > CurvatureTensorQuantities

References DGtal::Trace::info(), K, and DGtal::trace.

◆ getIIPrincipalCurvaturesAndDirections() [2/3]

template<typename TKSpace >
static CurvatureTensorQuantities DGtal::ShortcutsGeometry< TKSpace >::getIIPrincipalCurvaturesAndDirections ( CountedPtr< BinaryImage bimage,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() 
)
inlinestatic

Given a digital shape bimage, a sequence of surfels, and some parameters vm, returns the principal curvatures and directions using an Integral Invariant (II) estimation at the specified surfels, in the same order.

Parameters
[in]bimagethe characteristic function of the shape as a binary image (inside is true, outside is false).
[in]surfelsthe sequence of surfels at which we compute the Gaussian curvatures
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
Returns
the vector containing the estimated Gaussian curvatures, in the same order as surfels.
Note
The function is faster when surfels are in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1573 of file ShortcutsGeometry.h.

1578 {
1579 auto K = getKSpace( bimage, params );
1580 return getIIPrincipalCurvaturesAndDirections( *bimage, K, surfels, params );
1581 }
static CurvatureTensorQuantities getIIPrincipalCurvaturesAndDirections(CountedPtr< BinaryImage > bimage, const SurfelRange &surfels, const Parameters &params=parametersGeometryEstimation()|parametersKSpace())

References DGtal::ShortcutsGeometry< TKSpace >::getIIPrincipalCurvaturesAndDirections(), DGtal::ShortcutsGeometry< TKSpace >::getKSpace(), and K.

Referenced by DGtal::ShortcutsGeometry< TKSpace >::getIIPrincipalCurvaturesAndDirections(), and DGtal::ShortcutsGeometry< TKSpace >::getIIPrincipalCurvaturesAndDirections().

◆ getIIPrincipalCurvaturesAndDirections() [3/3]

template<typename TKSpace >
static CurvatureTensorQuantities DGtal::ShortcutsGeometry< TKSpace >::getIIPrincipalCurvaturesAndDirections ( CountedPtr< DigitizedImplicitShape3D dshape,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() | parametersKSpace() | parametersDigitizedImplicitShape3D() 
)
inlinestatic

Given a digital shape dshape, a sequence of surfels, and some parameters vm, returns the principal curvatures and directions using an Integral Invariant (II) estimation at the specified surfels, in the same order.

Parameters
[in]dshapethe digitized implicit shape, which is an implicitly defined characteristic function.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • gridstep [ 1.0]: the digitization gridstep (often denoted by h).
  • minAABB [ -10.0]: the min value of the AABB bounding box (domain)
  • maxAABB [ 10.0]: the max value of the AABB bounding box (domain)
  • offset [ 5.0]: the digital dilation of the digital space, useful when you process shapes adding some noise.
  • closed [ 1]: specifies if the Khalimsky space is closed (!=0) or not (==0)
Returns
the vector containing the estimated principal curvatures and directions, in the same order as surfels.
Note
It is better to have surfels in a specific order, as given for instance by a depth-first traversal (see getSurfelRange)

Definition at line 1610 of file ShortcutsGeometry.h.

1616 {
1617 auto K = getKSpace( params );
1618 return getIIPrincipalCurvaturesAndDirections( *dshape, K, surfels, params );
1619 }

References DGtal::ShortcutsGeometry< TKSpace >::getIIPrincipalCurvaturesAndDirections(), DGtal::ShortcutsGeometry< TKSpace >::getKSpace(), and K.

◆ getKSpace() [1/6]

template<typename TKSpace >
static KSpace DGtal::Shortcuts< TKSpace >::getKSpace ( const Point low,
const Point up,
Parameters  params = parametersKSpace() 
)
inlinestatic

Builds a Khalimsky space that encompasses the lower and upper digital points. Note that digital points are cells of the Khalimsky space with maximal dimensions. A closed Khalimsky space adds lower dimensional cells all around its boundary to define a closed complex.

Parameters
[in]lowthe lowest point in the space
[in]upthe highest point in the space
[in]paramsthe parameters:
  • closed [1]: specifies if the Khalimsky space is closed (!=0) or not (==0).
Returns
the Khalimsky space.

Definition at line 329 of file Shortcuts.h.

331 {
332 int closed = params[ "closed" ].as<int>();
333 KSpace K;
334 if ( ! K.init( low, up, closed ) )
335 trace.error() << "[Shortcuts::getKSpace]"
336 << " Error building Khalimsky space K=" << K << std::endl;
337 return K;
338 }
std::ostream & error()

Referenced by DGtal::ShortcutsGeometry< TKSpace >::getIIGaussianCurvatures(), DGtal::ShortcutsGeometry< TKSpace >::getIIGaussianCurvatures(), DGtal::ShortcutsGeometry< TKSpace >::getIIMeanCurvatures(), DGtal::ShortcutsGeometry< TKSpace >::getIIMeanCurvatures(), DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors(), DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors(), DGtal::ShortcutsGeometry< TKSpace >::getIIPrincipalCurvaturesAndDirections(), and DGtal::ShortcutsGeometry< TKSpace >::getIIPrincipalCurvaturesAndDirections().

◆ getKSpace() [2/6]

template<typename TKSpace >
template<typename TDigitalSurfaceContainer >
static KSpace DGtal::Shortcuts< TKSpace >::getKSpace ( CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > >  surface)
inlinestatic
Template Parameters
TDigitalSurfaceContainereither kind of DigitalSurfaceContainer
Parameters
[in]surfacea smart pointer on a (light or not) digital surface (e.g. DigitalSurface or LightDigitalSurface).
Returns
the Khalimsky space associated to the given surface.

Definition at line 393 of file Shortcuts.h.

395 {
396 return surface->container().space();
397 }

◆ getKSpace() [3/6]

template<typename TKSpace >
template<typename TDigitalSurfaceContainer >
static KSpace DGtal::Shortcuts< TKSpace >::getKSpace ( CountedPtr< ::DGtal::IndexedDigitalSurface< TDigitalSurfaceContainer > >  surface)
inlinestatic
Template Parameters
TDigitalSurfaceContainereither kind of DigitalSurfaceContainer
Parameters
[in]surfacea smart pointer on any indexed digital surface.
Returns
the Khalimsky space associated to the given surface.

Definition at line 404 of file Shortcuts.h.

406 {
407 return surface->container().space();
408 }

◆ getKSpace() [4/6]

template<typename TKSpace >
static KSpace DGtal::Shortcuts< TKSpace >::getKSpace ( CountedPtr< BinaryImage bimage,
Parameters  params = parametersKSpace() 
)
inlinestatic

Builds a Khalimsky space that encompasses the domain of the given image. Note that digital points are cells of the Khalimsky space with maximal dimensions. A closed Khalimsky space adds lower dimensional cells all around its boundary to define a closed complex.

Parameters
[in]bimageany binary image
[in]paramsthe parameters:
  • closed [1]: specifies if the Khalimsky space is closed (!=0) or not (==0).
Returns
the Khalimsky space.

Definition at line 351 of file Shortcuts.h.

353 {
354 int closed = params[ "closed" ].as<int>();
355 KSpace K;
356 if ( ! K.init( bimage->domain().lowerBound(),
357 bimage->domain().upperBound(),
358 closed ) )
359 trace.error() << "[Shortcuts::getKSpace]"
360 << " Error building Khalimsky space K=" << K << std::endl;
361 return K;
362 }

◆ getKSpace() [5/6]

template<typename TKSpace >
static KSpace DGtal::Shortcuts< TKSpace >::getKSpace ( CountedPtr< GrayScaleImage gimage,
Parameters  params = parametersKSpace() 
)
inlinestatic

Builds a Khalimsky space that encompasses the domain of the given image. Note that digital points are cells of the Khalimsky space with maximal dimensions. A closed Khalimsky space adds lower dimensional cells all around its boundary to define a closed complex.

Parameters
[in]gimageany gray-scale image
[in]paramsthe parameters:
  • closed [1]: specifies if the Khalimsky space is closed (!=0) or not (==0).
Returns
the Khalimsky space.

Definition at line 375 of file Shortcuts.h.

377 {
378 int closed = params[ "closed" ].as<int>();
379 KSpace K;
380 if ( ! K.init( gimage->domain().lowerBound(),
381 gimage->domain().upperBound(),
382 closed ) )
383 trace.error() << "[Shortcuts::getKSpace]"
384 << " Error building Khalimsky space K=" << K << std::endl;
385 return K;
386 }

◆ getKSpace() [6/6]

template<typename TKSpace >
static KSpace DGtal::Shortcuts< TKSpace >::getKSpace ( Parameters  params = parametersKSpace() | parametersDigitizedImplicitShape3D())
inlinestatic

Builds a Khalimsky space that encompasses the bounding box specified by a digitization in params. It is useful when digitizing an implicit shape.

Parameters
[in]paramsthe parameters:
  • minAABB [-10.0]: the min value of the AABB bounding box (domain)
  • maxAABB [ 10.0]: the max value of the AABB bounding box (domain)
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
  • offset [ 5.0]: the digital dilation of the digital space, useful when you process shapes and that you add noise.
  • closed [1] : specifies if the Khalimsky space is closed (!=0) or not (==0).
Returns
the Khalimsky space.
See also
makeDigitizedImplicitShape3D

Definition at line 483 of file Shortcuts.h.

485 {
486 Scalar min_x = params[ "minAABB" ].as<Scalar>();
487 Scalar max_x = params[ "maxAABB" ].as<Scalar>();
488 Scalar h = params[ "gridstep" ].as<Scalar>();
489 Scalar offset = params[ "offset" ].as<Scalar>();
490 bool closed = params[ "closed" ].as<int>();
491 RealPoint p1( min_x - offset * h, min_x - offset * h, min_x - offset * h );
492 RealPoint p2( max_x + offset * h, max_x + offset * h, max_x + offset * h );
493 CountedPtr<DigitizedImplicitShape3D> dshape( new DigitizedImplicitShape3D() );
494 dshape->init( p1, p2, h );
495 Domain domain = dshape->getDomain();
496 KSpace K;
497 if ( ! K.init( domain.lowerBound(), domain.upperBound(), closed ) )
498 trace.error() << "[Shortcuts::getKSpace]"
499 << " Error building Khalimsky space K=" << K << std::endl
500 << "Note: if you use decimal values, check your locale for decimal point '.' or ','."
501 << std::endl;
502 return K;
503 }
const Point & lowerBound() const
const Point & upperBound() const
GaussDigitizer< Space, ImplicitShape3D > DigitizedImplicitShape3D
defines the digitization of an implicit shape.

◆ getMeanCurvatures()

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getMeanCurvatures ( CountedPtr< ImplicitShape3D shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a space K, an implicit shape, a sequence of surfels, and a gridstep h, returns the mean curvatures at the specified surfels, in the same order.

Note
that the mean curvature is approximated by projecting the surfel centroid onto the implicit 3D shape.
Parameters
[in]shapethe implicit shape.
[in]Kthe Khalimsky space whose domain encompasses the digital shape.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the mean curvatures, in the same order as surfels.

Definition at line 364 of file ShortcutsGeometry.h.

369 {
370 Scalars n_true_estimations;
371 TrueMeanCurvatureEstimator true_estimator;
372 int maxIter = params[ "projectionMaxIter" ].as<int>();
373 double accuracy = params[ "projectionAccuracy" ].as<double>();
374 double gamma = params[ "projectionGamma" ].as<double>();
375 Scalar gridstep = params[ "gridstep" ].as<Scalar>();
376 true_estimator.attach( *shape );
377 true_estimator.setParams( K, MeanCurvatureFunctor(), maxIter, accuracy, gamma );
378 true_estimator.init( gridstep, surfels.begin(), surfels.end() );
379 true_estimator.eval( surfels.begin(), surfels.end(),
380 std::back_inserter( n_true_estimations ) );
381 return n_true_estimations;
382 }
sgf::ShapeMeanCurvatureFunctor< ImplicitShape3D > MeanCurvatureFunctor
TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, MeanCurvatureFunctor > TrueMeanCurvatureEstimator

References DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::attach(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::eval(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::init(), K, and DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::setParams().

◆ getNormalVectors()

template<typename TKSpace >
static RealVectors DGtal::ShortcutsGeometry< TKSpace >::getNormalVectors ( CountedPtr< ImplicitShape3D shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a space K, an implicit shape, a sequence of surfels, and a gridstep h, returns the normal vectors at the specified surfels, in the same order.

Note
that the normal vector is approximated by projecting the surfel centroid onto the implicit 3D shape.
Parameters
[in]shapethe implicit shape.
[in]Kthe Khalimsky space whose domain encompasses the digital shape.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the true normals, in the same order as surfels.

Definition at line 325 of file ShortcutsGeometry.h.

330 {
331 RealVectors n_true_estimations;
332 TrueNormalEstimator true_estimator;
333 int maxIter = params[ "projectionMaxIter" ].as<int>();
334 double accuracy = params[ "projectionAccuracy" ].as<double>();
335 double gamma = params[ "projectionGamma" ].as<double>();
336 Scalar gridstep = params[ "gridstep" ].as<Scalar>();
337 true_estimator.attach( *shape );
338 true_estimator.setParams( K, NormalFunctor(), maxIter, accuracy, gamma );
339 true_estimator.init( gridstep, surfels.begin(), surfels.end() );
340 true_estimator.eval( surfels.begin(), surfels.end(),
341 std::back_inserter( n_true_estimations ) );
342 return n_true_estimations;
343 }
TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, NormalFunctor > TrueNormalEstimator
sgf::ShapeNormalVectorFunctor< ImplicitShape3D > NormalFunctor

References DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::attach(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::eval(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::init(), K, and DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::setParams().

Referenced by main().

◆ getPositions() [1/2]

template<typename TKSpace >
static RealPoints DGtal::ShortcutsGeometry< TKSpace >::getPositions ( CountedPtr< ImplicitShape3D shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a space K, an implicit shape, a sequence of surfels, and a gridstep h, returns the closest positions on the surface at the specified surfels, in the same order.

Note
The surfel centroids are iteratively projected onto the implicit surface through a damped Newton process.
Parameters
[in]shapethe implicit shape.
[in]Kthe Khalimsky space whose domain encompasses the digital shape.
[in]surfelsthe sequence of surfels that we project onto the shape's surface
[in]paramsthe parameters:
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the true normals, in the same order as surfels.

Definition at line 257 of file ShortcutsGeometry.h.

262 {
263 RealVectors n_true_estimations;
264 TruePositionEstimator true_estimator;
265 int maxIter = params[ "projectionMaxIter" ].as<int>();
266 double accuracy = params[ "projectionAccuracy" ].as<double>();
267 double gamma = params[ "projectionGamma" ].as<double>();
268 Scalar gridstep = params[ "gridstep" ].as<Scalar>();
269 true_estimator.attach( *shape );
270 true_estimator.setParams( K, PositionFunctor(), maxIter, accuracy, gamma );
271 true_estimator.init( gridstep, surfels.begin(), surfels.end() );
272 true_estimator.eval( surfels.begin(), surfels.end(),
273 std::back_inserter( n_true_estimations ) );
274 return n_true_estimations;
275 }
sgf::ShapePositionFunctor< ImplicitShape3D > PositionFunctor
TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, PositionFunctor > TruePositionEstimator

References DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::attach(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::eval(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::init(), K, and DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::setParams().

◆ getPositions() [2/2]

template<typename TKSpace >
static RealPoints DGtal::ShortcutsGeometry< TKSpace >::getPositions ( CountedPtr< ImplicitShape3D shape,
const RealPoints points,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given an implicit shape and a sequence of points, returns the closest positions on the surface at the specified points, in the same order.

Parameters
[in]shapethe implicit shape.
[in]pointsthe sequence of points that we project onto the shape's surface.
[in]paramsthe parameters:
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the projected points.

Definition at line 291 of file ShortcutsGeometry.h.

295 {
296 RealPoints proj_points( points.size() );
297 int maxIter = params[ "projectionMaxIter" ].as<int>();
298 double accuracy = params[ "projectionAccuracy" ].as<double>();
299 double gamma = params[ "projectionGamma" ].as<double>();
300 for ( unsigned int i = 0; i < points.size(); ++i )
301 proj_points[ i ] = shape->nearestPoint( points[ i ], accuracy,
302 maxIter, gamma );
303 return proj_points;
304 }
std::vector< RealPoint > RealPoints

◆ getPrincipalCurvaturesAndDirections()

template<typename TKSpace >
static CurvatureTensorQuantities DGtal::ShortcutsGeometry< TKSpace >::getPrincipalCurvaturesAndDirections ( CountedPtr< ImplicitShape3D shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a space K, an implicit shape, a sequence of surfels, and a gridstep h, returns the principal curvatures and principal directions as a tuple (k1, k2, d1, d2) at the specified surfels, in the same order.

Note
that the second principal direction is approximated by projecting the surfel centroid onto the implicit 3D shape.
Parameters
[in]shapethe implicit shape.
[in]Kthe Khalimsky space whose domain encompasses the digital shape.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the principal curvatures and principal directions as a tuple (k1, k2, d1, d2), in the same order as surfels.

Definition at line 815 of file ShortcutsGeometry.h.

820 {
821 CurvatureTensorQuantities n_true_estimations;
823 int maxIter = params[ "projectionMaxIter" ].as<int>();
824 double accuracy = params[ "projectionAccuracy" ].as<double>();
825 double gamma = params[ "projectionGamma" ].as<double>();
826 Scalar gridstep = params[ "gridstep" ].as<Scalar>();
827 true_estimator.attach( *shape );
828 true_estimator.setParams( K, PrincipalCurvaturesAndDirectionsFunctor(),
829 maxIter, accuracy, gamma );
830 true_estimator.init( gridstep, surfels.begin(), surfels.end() );
831 true_estimator.eval( surfels.begin(), surfels.end(),
832 std::back_inserter( n_true_estimations ) );
833 return n_true_estimations;
834 }
TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, PrincipalCurvaturesAndDirectionsFunctor > TruePrincipalCurvaturesAndDirectionsEstimator
sgf::ShapePrincipalCurvaturesAndDirectionsFunctor< ImplicitShape3D > PrincipalCurvaturesAndDirectionsFunctor

References DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::attach(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::eval(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::init(), K, and DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::setParams().

◆ getScalarsAbsoluteDifference()

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getScalarsAbsoluteDifference ( const Scalars v1,
const Scalars v2 
)
inlinestatic

Computes the absolute difference between each element of the two vectors.

Parameters
[in]v1any vector of values.
[in]v2any vector of values.
Returns
the vector composed of elemenst |v1[i]-v2[i]|.

Definition at line 2029 of file ShortcutsGeometry.h.

2031 {
2032 Scalars result( v1.size() );
2033 std::transform( v2.cbegin(), v2.cend(), v1.cbegin(), result.begin(),
2034 [] ( Scalar val1, Scalar val2 )
2035 { return fabs( val1 - val2 ); } );
2036 return result;
2037 }

◆ getScalarsNormL1()

template<typename TKSpace >
static Scalar DGtal::ShortcutsGeometry< TKSpace >::getScalarsNormL1 ( const Scalars v1,
const Scalars v2 
)
inlinestatic

Computes the l1-norm of v1-v2, ie the average of the absolute differences of the two vectors.

Parameters
[in]v1any vector of values.
[in]v2any vector of values.
Returns
the normL1 of v1-v2, ie. 1/n sum_i |v1[i]-v2[i]|.

Definition at line 2062 of file ShortcutsGeometry.h.

2064 {
2065 Scalar sum = 0;
2066 for ( unsigned int i = 0; i < v1.size(); i++ )
2067 sum += fabs( v1[ i ] - v2[ i ] );
2068 return sum / v1.size();
2069 }

◆ getScalarsNormL2()

template<typename TKSpace >
static Scalar DGtal::ShortcutsGeometry< TKSpace >::getScalarsNormL2 ( const Scalars v1,
const Scalars v2 
)
inlinestatic

Computes the l2-norm of v1-v2, ie the square root of the mean-squared error of the two vectors.

Parameters
[in]v1any vector of values.
[in]v2any vector of values.
Returns
the normL2 of v1-v2, ie. sqrt( 1/n sum_i (v1[i]-v2[i])^2 ).

Definition at line 2046 of file ShortcutsGeometry.h.

2048 {
2049 Scalar sum = 0;
2050 for ( unsigned int i = 0; i < v1.size(); i++ )
2051 sum += ( v1[ i ] - v2[ i ] ) * ( v1[ i ] - v2[ i ] );
2052 return sqrt( sum / v1.size() );
2053 }

◆ getScalarsNormLoo()

template<typename TKSpace >
static Scalar DGtal::ShortcutsGeometry< TKSpace >::getScalarsNormLoo ( const Scalars v1,
const Scalars v2 
)
inlinestatic

Computes the loo-norm of v1-v2, ie the maximum of the absolute differences of the two vectors.

Parameters
[in]v1any vector of values.
[in]v2any vector of values.
Returns
the normLoo of v1-v2, ie. max_i |v1[i]-v2[i]|.

Definition at line 2078 of file ShortcutsGeometry.h.

2080 {
2081 Scalar loo = 0;
2082 for ( unsigned int i = 0; i < v1.size(); i++ )
2083 loo = std::max( loo, fabs( v1[ i ] - v2[ i ] ) );
2084 return loo;
2085 }

◆ getSecondPrincipalCurvatures()

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getSecondPrincipalCurvatures ( CountedPtr< ImplicitShape3D shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a space K, an implicit shape, a sequence of surfels, and a gridstep h, returns the second (greatest) principal curvatures at the specified surfels, in the same order.

Note
that the second principal curvature is approximated by projecting the surfel centroid onto the implicit 3D shape.
Parameters
[in]shapethe implicit shape.
[in]Kthe Khalimsky space whose domain encompasses the digital shape.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the second principal curvatures, in the same order as surfels.

Definition at line 688 of file ShortcutsGeometry.h.

693 {
694 Scalars n_true_estimations;
696 int maxIter = params[ "projectionMaxIter" ].as<int>();
697 double accuracy = params[ "projectionAccuracy" ].as<double>();
698 double gamma = params[ "projectionGamma" ].as<double>();
699 Scalar gridstep = params[ "gridstep" ].as<Scalar>();
700 true_estimator.attach( *shape );
701 true_estimator.setParams( K, SecondPrincipalCurvatureFunctor(),
702 maxIter, accuracy, gamma );
703 true_estimator.init( gridstep, surfels.begin(), surfels.end() );
704 true_estimator.eval( surfels.begin(), surfels.end(),
705 std::back_inserter( n_true_estimations ) );
706 return n_true_estimations;
707 }
sgf::ShapeSecondPrincipalCurvatureFunctor< ImplicitShape3D > SecondPrincipalCurvatureFunctor
TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, SecondPrincipalCurvatureFunctor > TrueSecondPrincipalCurvatureEstimator

References DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::attach(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::eval(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::init(), K, and DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::setParams().

◆ getSecondPrincipalDirections()

template<typename TKSpace >
static RealVectors DGtal::ShortcutsGeometry< TKSpace >::getSecondPrincipalDirections ( CountedPtr< ImplicitShape3D shape,
const KSpace K,
const SurfelRange surfels,
const Parameters params = parametersShapeGeometry() 
)
inlinestatic

Given a space K, an implicit shape, a sequence of surfels, and a gridstep h, returns the second principal directions (corresponding to the greatest principal curvature) at the specified surfels, in the same order.

Note
that the second principal direction is approximated by projecting the surfel centroid onto the implicit 3D shape.
Parameters
[in]shapethe implicit shape.
[in]Kthe Khalimsky space whose domain encompasses the digital shape.
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the second principal directions, in the same order as surfels.

Definition at line 772 of file ShortcutsGeometry.h.

777 {
778 RealVectors n_true_estimations;
780 int maxIter = params[ "projectionMaxIter" ].as<int>();
781 double accuracy = params[ "projectionAccuracy" ].as<double>();
782 double gamma = params[ "projectionGamma" ].as<double>();
783 Scalar gridstep = params[ "gridstep" ].as<Scalar>();
784 true_estimator.attach( *shape );
785 true_estimator.setParams( K, SecondPrincipalDirectionFunctor(),
786 maxIter, accuracy, gamma );
787 true_estimator.init( gridstep, surfels.begin(), surfels.end() );
788 true_estimator.eval( surfels.begin(), surfels.end(),
789 std::back_inserter( n_true_estimations ) );
790 return n_true_estimations;
791 }
sgf::ShapeSecondPrincipalDirectionFunctor< ImplicitShape3D > SecondPrincipalDirectionFunctor
TrueDigitalSurfaceLocalEstimator< KSpace, ImplicitShape3D, SecondPrincipalDirectionFunctor > TrueSecondPrincipalDirectionEstimator

References DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::attach(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::eval(), DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::init(), K, and DGtal::TrueDigitalSurfaceLocalEstimator< TKSpace, TShape, TGeometricFunctor >::setParams().

◆ getStatistic()

template<typename TKSpace >
static ScalarStatistic DGtal::ShortcutsGeometry< TKSpace >::getStatistic ( const Scalars v)
inlinestatic

Computes the statistic of a vector of scalars

Parameters
[in]va vector of scalars
Returns
its statistic.

Definition at line 1986 of file ShortcutsGeometry.h.

1987 {
1988 ScalarStatistic stat;
1989 stat.addValues( v.begin(), v.end() );
1990 stat.terminate();
1991 return stat;
1992 }
::DGtal::Statistic< Scalar > ScalarStatistic

References DGtal::Statistic< TQuantity >::addValues(), and DGtal::Statistic< TQuantity >::terminate().

◆ getTrivialNormalVectors()

template<typename TKSpace >
static RealVectors DGtal::ShortcutsGeometry< TKSpace >::getTrivialNormalVectors ( const KSpace K,
const SurfelRange surfels 
)
inlinestatic

Given a digital space K and a vector of surfels, returns the trivial normals at the specified surfels, in the same order.

Parameters
[in]Kthe Khalimsky space whose domain encompasses the digital shape.
[in]surfelsthe sequence of surfels at which we compute the normals
Returns
the vector containing the trivial normal vectors, in the same order as surfels.

Definition at line 1009 of file ShortcutsGeometry.h.

1011 {
1012 std::vector< RealVector > result;
1013 for ( auto s : surfels )
1014 {
1015 Dimension k = K.sOrthDir( s );
1016 bool direct = K.sDirect( s, k );
1018 t[ k ] = direct ? -1.0 : 1.0;
1019 result.push_back( t );
1020 }
1021 return result;
1022 }
static Self zero
Static const for zero PointVector.
DGtal::uint32_t Dimension
Definition Common.h:119

References K, and DGtal::PointVector< dim, TEuclideanRing, TContainer >::zero.

Referenced by DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors().

◆ getVCMNormalVectors()

template<typename TKSpace >
template<typename TAnyDigitalSurface >
static RealVectors DGtal::ShortcutsGeometry< TKSpace >::getVCMNormalVectors ( CountedPtr< TAnyDigitalSurface >  surface,
const SurfelRange surfels,
const Parameters params = parametersGeometryEstimation() 
)
inlinestatic

Given a digital surface surface, a sequence of surfels, and some parameters params, returns the normal Voronoi Covariance Measure (VCM) estimation at the specified surfels, in the same order.

Template Parameters
TAnyDigitalSurfaceeither kind of DigitalSurface, like ShortcutsGeometry::LightDigitalSurface or ShortcutsGeometry::DigitalSurface.
Parameters
[in]surfacethe digital surface
[in]surfelsthe sequence of surfels at which we compute the normals
[in]paramsthe parameters:
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • t-ring [ 3.0]: the radius used when computing convolved trivial normals (it is a graph distance, not related to the grid step).
  • R-radius [ 10.0]: the constant for distance parameter R in R(h)=R h^alpha (VCM).
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • kernel [ "hat"]: the kernel integration function chi_r, either "hat" or "ball". )
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • surfelEmbedding [ 0]: the surfel -> point embedding for VCM estimator: 0: Pointels, 1: InnerSpel, 2: OuterSpel.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
Returns
the vector containing the estimated normals, in the same order as surfels.

Definition at line 1097 of file ShortcutsGeometry.h.

1101 {
1102 typedef ExactPredicateLpSeparableMetric<Space,2> Metric;
1103 typedef typename TAnyDigitalSurface::DigitalSurfaceContainer SurfaceContainer;
1104 RealVectors n_estimations;
1105 int verbose = params[ "verbose" ].as<int>();
1106 std::string kernel = params[ "kernel" ].as<std::string>();
1107 Scalar h = params[ "gridstep" ].as<Scalar>();
1108 Scalar R = params[ "R-radius" ].as<Scalar>();
1109 Scalar r = params[ "r-radius" ].as<Scalar>();
1110 Scalar t = params[ "t-ring" ].as<Scalar>();
1111 Scalar alpha = params[ "alpha" ].as<Scalar>();
1112 int embedding = params[ "embedding" ].as<int>();
1113 // Adjust parameters according to gridstep if specified.
1114 if ( alpha != 1.0 ) R *= pow( h, alpha-1.0 );
1115 if ( alpha != 1.0 ) r *= pow( h, alpha-1.0 );
1116 Surfel2PointEmbedding embType = embedding == 0 ? Pointels :
1117 embedding == 1 ? InnerSpel : OuterSpel;
1118 if ( verbose > 0 )
1119 {
1120 trace.info() << "- VCM normal kernel=" << kernel << " emb=" << embedding
1121 << " alpha=" << alpha << std::endl;
1122 trace.info() << "- VCM normal r=" << (r*h) << " (continuous) "
1123 << r << " (discrete)" << std::endl;
1124 trace.info() << "- VCM normal R=" << (R*h) << " (continuous) "
1125 << R << " (discrete)" << std::endl;
1126 trace.info() << "- VCM normal t=" << t << " (discrete)" << std::endl;
1127 }
1128 if ( kernel == "hat" )
1129 {
1130 typedef functors::HatPointFunction<Point,Scalar> KernelFunction;
1131 typedef VoronoiCovarianceMeasureOnDigitalSurface
1132 < SurfaceContainer, Metric, KernelFunction > VCMOnSurface;
1133 typedef functors::VCMNormalVectorFunctor<VCMOnSurface> NormalVFunctor;
1134 typedef VCMDigitalSurfaceLocalEstimator
1135 < SurfaceContainer, Metric, KernelFunction, NormalVFunctor> VCMNormalEstimator;
1136 KernelFunction chi_r( 1.0, r );
1137 VCMNormalEstimator estimator;
1138 estimator.attach( *surface );
1139 estimator.setParams( embType, R, r, chi_r, t, Metric(), verbose > 0 );
1140 estimator.init( h, surfels.begin(), surfels.end() );
1141 estimator.eval( surfels.begin(), surfels.end(),
1142 std::back_inserter( n_estimations ) );
1143 }
1144 else if ( kernel == "ball" )
1145 {
1146 typedef functors::BallConstantPointFunction<Point,Scalar> KernelFunction;
1147 typedef VoronoiCovarianceMeasureOnDigitalSurface
1148 < SurfaceContainer, Metric, KernelFunction > VCMOnSurface;
1149 typedef functors::VCMNormalVectorFunctor<VCMOnSurface> NormalVFunctor;
1150 typedef VCMDigitalSurfaceLocalEstimator
1151 < SurfaceContainer, Metric, KernelFunction, NormalVFunctor> VCMNormalEstimator;
1152 KernelFunction chi_r( 1.0, r );
1153 VCMNormalEstimator estimator;
1154 estimator.attach( *surface );
1155 estimator.setParams( embType, R, r, chi_r, t, Metric(), verbose > 0 );
1156 estimator.init( h, surfels.begin(), surfels.end() );
1157 estimator.eval( surfels.begin(), surfels.end(),
1158 std::back_inserter( n_estimations ) );
1159 }
1160 else
1161 {
1162 trace.warning() << "[ShortcutsGeometry::getVCMNormalVectors] Unknown kernel: "
1163 << kernel << std::endl;
1164 }
1165 return n_estimations;
1166 }
std::ostream & warning()
Surfel2PointEmbedding
Possible embeddings for surfel as point(s)

References DGtal::Trace::info(), DGtal::InnerSpel, DGtal::OuterSpel, DGtal::Pointels, DGtal::R, surface, DGtal::trace, and DGtal::Trace::warning().

◆ getVectorsAngleDeviation()

template<typename TKSpace >
static Scalars DGtal::ShortcutsGeometry< TKSpace >::getVectorsAngleDeviation ( const RealVectors v1,
const RealVectors v2 
)
inlinestatic

Computes the statistic that measures the angle differences between the two arrays of unit vectors.

Parameters
[in]v1the first array of unit vectors (normals)
[in]v2the second array of unit vectors (normals)
Returns
the vector of angle differences.

Definition at line 2001 of file ShortcutsGeometry.h.

2003 {
2004 Scalars v( v1.size() );
2005 if ( v1.size() == v2.size() )
2006 {
2007 auto outIt = v.begin();
2008 for ( auto it1 = v1.cbegin(), it2 = v2.cbegin(), itE1 = v1.cend();
2009 it1 != itE1; ++it1, ++it2 )
2010 {
2011 Scalar angle_error = acos( (*it1).dot( *it2 ) );
2012 *outIt++ = angle_error;
2013 }
2014 }
2015 else
2016 {
2017 trace.warning() << "[ShortcutsGeometry::getVectorsAngleDeviation]"
2018 << " v1.size()=" << v1.size() << " should be equal to "
2019 << " v2.size()=" << v2.size() << std::endl;
2020 }
2021 return v;
2022 }

References DGtal::trace, and DGtal::Trace::warning().

◆ getVoronoiMap() [1/2]

template<typename TKSpace >
template<uint32_t p, typename PointRange >
static VoronoiMap< Space, VoronoiPointPredicate, ExactPredicateLpSeparableMetric< Space, p > > DGtal::ShortcutsGeometry< TKSpace >::getVoronoiMap ( CountedPtr< Domain domain,
const PointRange sites,
const Parameters params = parametersVoronoiMap() 
)
inlinestatic

Computes the VoronoiMap of a domain, where sites are given through a range.

Template Parameters
pThe exponent in the Lp metric
PointRangeAn iterable of points (std::vector, DGtal::DigitalSet*, ...)
Parameters
domainThe associated space to compute VoronoiMap on
sitesThe list of sites
paramsthe parameters
Returns
The VoronoiMap within a domain with prescribed sites

Definition at line 2160 of file ShortcutsGeometry.h.

2163 {
2164 using Metric = ExactPredicateLpSeparableMetric<Space, p>;
2165 using Map = VoronoiMap<Space, VoronoiPointPredicate, Metric>;
2166 DigitalSet set(*domain); set.insert(sites.begin(), sites.end());
2167 VoronoiPointPredicate predicate(set);
2168 Metric metric;
2169
2170 typename Map::PeriodicitySpec specs = {false, false, false};
2171 if (params["toroidal-x"].as<int>()) specs[0] = true;
2172 if (params["toroidal-y"].as<int>()) specs[1] = true;
2173 if (params["toroidal-z"].as<int>()) specs[2] = true;
2174
2175 // Do not return a pointer here for two reasons:
2176 // - The distance transform will not be passed anywhere else
2177 // - The operator() is less accessible with pointers.
2178 return Map(*domain, predicate, metric, specs);
2179 }

References domain, and DGtal::DigitalSetByAssociativeContainer< TDomain, TContainer >::insert().

◆ getVoronoiMap() [2/2]

template<typename TKSpace >
template<uint32_t p, typename PointRange >
static VoronoiMap< Space, VoronoiPointPredicate, ExactPredicateLpSeparableMetric< Space, p > > DGtal::ShortcutsGeometry< TKSpace >::getVoronoiMap ( Domain  domain,
const PointRange sites,
const Parameters params = parametersVoronoiMap() 
)
inlinestatic

Computes the VoronoiMap of a domain, where sites are given through a range.

Template Parameters
pThe exponent in the Lp metric
PointRangeAn iterable of points (std::vector, DGtal::DigitalSet*, ...)
Parameters
domainThe associated space to compute VoronoiMap on
sitesThe list of sites
paramsthe parameters
Returns
The VoronoiMap within a domain with prescribed sites

Definition at line 2123 of file ShortcutsGeometry.h.

2126 {
2127 using Metric = ExactPredicateLpSeparableMetric<Space, p>;
2128 using Map = VoronoiMap<Space, VoronoiPointPredicate, Metric>;
2129 DigitalSet set(domain); set.insert(sites.begin(), sites.end());
2130 VoronoiPointPredicate predicate(set);
2131 Metric metric;
2132
2133 typename Map::PeriodicitySpec specs = {false, false, false};
2134 if (params["toroidal-x"].as<int>()) specs[0] = true;
2135 if (params["toroidal-y"].as<int>()) specs[1] = true;
2136 if (params["toroidal-z"].as<int>()) specs[2] = true;
2137
2138
2139 // Do not return a pointer here for two reasons:
2140 // - The distance transform will not be passed anywhere else
2141 // - The operator() is less accessible with pointers.
2142 return Map(domain, predicate, metric, specs);
2143 }

References domain, and DGtal::DigitalSetByAssociativeContainer< TDomain, TContainer >::insert().

◆ operator=() [1/2]

template<typename TKSpace >
ShortcutsGeometry & DGtal::ShortcutsGeometry< TKSpace >::operator= ( const ShortcutsGeometry< TKSpace > &  other)
delete

Copy assignment operator.

Parameters
otherthe object to copy.
Returns
a reference on 'this'.

◆ operator=() [2/2]

template<typename TKSpace >
ShortcutsGeometry & DGtal::ShortcutsGeometry< TKSpace >::operator= ( ShortcutsGeometry< TKSpace > &&  other)
delete

Move assignment operator.

Parameters
otherthe object to move.
Returns
a reference on 'this'.

◆ orientVectors()

template<typename TKSpace >
static void DGtal::ShortcutsGeometry< TKSpace >::orientVectors ( RealVectors v,
const RealVectors ref_v 
)
inlinestatic

Orient v so that it points in the same direction as ref_v (scalar product is then non-negative afterwards).

Parameters
[in,out]vthe vectors to reorient.
[in]ref_vthe vectors having the reference orientation.

Definition at line 1973 of file ShortcutsGeometry.h.

1975 {
1976 std::transform( ref_v.cbegin(), ref_v.cend(), v.cbegin(), v.begin(),
1977 [] ( RealVector rw, RealVector w )
1978 { return rw.dot( w ) >= 0.0 ? w : -w; } );
1979 }

Referenced by DGtal::ShortcutsGeometry< TKSpace >::getIINormalVectors().

◆ parametersATApproximation()

template<typename TKSpace >
static Parameters DGtal::ShortcutsGeometry< TKSpace >::parametersATApproximation ( )
inlinestatic
Returns
the parameters and their default values which are used to compute Ambrosio-Tortorelli piecewise-smooth approximation of a function.
  • at-enabled [ 1 ]: 1 if AT is enabled, 0 otherwise.
  • at-alpha [ 0.1 ]: parameter alpha in AT (data fit)
  • at-lambda [ 0.025 ]: parameter lambda in AT (1/length of discontinuities)
  • at-epsilon [ 0.5 ]: (last value of) parameter epsilon in AT (width of discontinuities)
  • at-epsilon-start[ 2.0 ]: first value for parameter epsilon in Gamma-convergence optimization (sequence of AT optimization with decreasing epsilon)
  • at-epsilon-ratio[ 2.0 ]: ratio between two consecutive epsilon value in Gamma-convergence optimization (sequence of AT optimization with decreasing epsilon)
  • at-max-iter [ 10 ]: maximum number of alternate minization in AT optimization
  • at-diff-v-max [ 0.0001]: stopping criterion that measures the loo-norm of the evolution of v between two iterations
  • at-v-policy ["Maximum"]: the policy when outputing feature vector v onto cells: "Average"|"Minimum"|"Maximum"

Definition at line 1697 of file ShortcutsGeometry.h.

1698 {
1699 return Parameters
1700 ( "at-enabled", 1 )
1701 ( "at-alpha", 0.1 )
1702 ( "at-lambda", 0.025 )
1703 ( "at-epsilon", 0.25 )
1704 ( "at-epsilon-start", 2.0 )
1705 ( "at-epsilon-ratio", 2.0 )
1706 ( "at-max-iter", 10 )
1707 ( "at-diff-v-max", 0.0001 )
1708 ( "at-v-policy", "Maximum" );
1709 }

Referenced by DGtal::ShortcutsGeometry< TKSpace >::defaultParameters().

◆ parametersDigitizedImplicitShape3D()

template<typename TKSpace >
static Parameters DGtal::Shortcuts< TKSpace >::parametersDigitizedImplicitShape3D ( )
inlinestatic
Returns
the parameters and their default values which are used for digitization.
  • minAABB [-10.0]: the min value of the AABB bounding box (domain)
  • maxAABB [ 10.0]: the max value of the AABB bounding box (domain)
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).
  • offset [ 5.0]: the digital dilation of the digital space, useful when you process shapes and that you add noise.

Definition at line 458 of file Shortcuts.h.

459 {
460 return Parameters
461 ( "minAABB", -10.0 )
462 ( "maxAABB", 10.0 )
463 ( "gridstep", 1.0 )
464 ( "offset", 5.0 );
465 }

◆ parametersGeometryEstimation()

template<typename TKSpace >
static Parameters DGtal::ShortcutsGeometry< TKSpace >::parametersGeometryEstimation ( )
inlinestatic
Returns
the parameters and their default values which are used to estimate the geometry of a digital surface.
  • verbose [ 1]: verbose trace mode 0: silent, 1: verbose.
  • t-ring [ 3.0]: the radius used when computing convolved trivial normals (it is a graph distance, not related to the grid step).
  • R-radius [ 10.0]: the constant for distance parameter R in R(h)=R h^alpha (VCM).
  • r-radius [ 3.0]: the constant for kernel radius parameter r in r(h)=r h^alpha (VCM,II,Trivial).
  • kernel [ "hat"]: the kernel integration function chi_r, either "hat" or "ball". )
  • alpha [ 0.33]: the parameter alpha in r(h)=r h^alpha (VCM, II)."
  • surfelEmbedding [ 0]: the surfel -> point embedding for VCM estimator: 0: Pointels, 1: InnerSpel, 2: OuterSpel.
  • unit_u [0]: Use unit normals for (CNC) curvature computations.

Definition at line 986 of file ShortcutsGeometry.h.

987 {
988 return Parameters
989 ( "verbose", 1 )
990 ( "t-ring", 3.0 )
991 ( "kernel", "hat" )
992 ( "R-radius", 10.0 )
993 ( "r-radius", 3.0 )
994 ( "alpha", 0.33 )
995 ( "surfelEmbedding", 0 )
996 ( "unit_u" , 0 );
997 }

Referenced by DGtal::ShortcutsGeometry< TKSpace >::defaultParameters(), main(), and precompute().

◆ parametersKSpace()

template<typename TKSpace >
static Parameters DGtal::Shortcuts< TKSpace >::parametersKSpace ( )
inlinestatic
Returns
the parameters and their default values which are used for digitization.
  • closed [1 ]: specifies if the Khalimsky space is closed (!=0) or not (==0).
  • gridsizex[1.0]: specifies the space between points along x.
  • gridsizey[1.0]: specifies the space between points along y.
  • gridsizez[1.0]: specifies the space between points along z.

Definition at line 308 of file Shortcuts.h.

309 {
310 return Parameters
311 ( "closed", 1 )
312 ( "gridsizex", 1.0 )
313 ( "gridsizey", 1.0 )
314 ( "gridsizez", 1.0 );
315 }

◆ parametersShapeGeometry()

template<typename TKSpace >
static Parameters DGtal::ShortcutsGeometry< TKSpace >::parametersShapeGeometry ( )
inlinestatic
Returns
the parameters and their default values which are used to approximate the geometry of continuous shape.
  • projectionMaxIter [ 20]: the maximum number of iteration for the projection.
  • projectionAccuracy[0.0001]: the zero-proximity stop criterion during projection.
  • projectionGamma [ 0.5]: the damping coefficient of the projection.
  • gridstep [ 1.0]: the gridstep that defines the digitization (often called h).

Definition at line 229 of file ShortcutsGeometry.h.

230 {
231 return Parameters
232 ( "projectionMaxIter", 20 )
233 ( "projectionAccuracy", 0.0001 )
234 ( "projectionGamma", 0.5 )
235 ( "gridstep", 1.0 );
236 }

Referenced by DGtal::ShortcutsGeometry< TKSpace >::defaultParameters().

◆ parametersVoronoiMap()

template<typename TKSpace >
static Parameters DGtal::ShortcutsGeometry< TKSpace >::parametersVoronoiMap ( )
inlinestatic
Returns
the parameters and their default values which are used in VoronoiMap and DistanceTransformation

Definition at line 2098 of file ShortcutsGeometry.h.

2098 {
2099 return Parameters
2100 // Toricity might be moved elsewhere as this is quite a general parameter
2101 ( "toroidal-x" , false )
2102 ( "toroidal-y" , false )
2103 ( "toroidal-z" , false );
2104 }

Referenced by DGtal::ShortcutsGeometry< TKSpace >::defaultParameters().


The documentation for this class was generated from the following file: