35 #if defined(DigitalSurfaceConvolver_RECURSES) 36 #error Recursive header files inclusion detected in DigitalSurfaceConvolver.h 37 #else // defined(DigitalSurfaceConvolver_RECURSES) 39 #define DigitalSurfaceConvolver_RECURSES 41 #if !defined DigitalSurfaceConvolver_h 43 #define DigitalSurfaceConvolver_h 48 #include "DGtal/base/Common.h" 49 #include "DGtal/kernel/PointVector.h" 50 #include "DGtal/math/linalg/SimpleMatrix.h" 51 #include "DGtal/base/ConstAlias.h" 52 #include "DGtal/base/Alias.h" 53 #include "DGtal/base/Clone.h" 54 #include "DGtal/topology/CCellFunctor.h" 55 #include "DGtal/topology/CanonicSCellEmbedder.h" 56 #include "DGtal/topology/SCellsFunctors.h" 75 template<
typename TFunctor,
typename TKernelFunctor,
typename TKSpace,
typename TDigitalKernel, Dimension dimension = TKSpace::dimension >
92 typedef typename KSpace::SCell
Spel;
94 typedef typename KSpace::Space::RealPoint
RealPoint;
97 typedef std::pair< KernelConstIterator, KernelConstIterator >
PairIterators;
147 void init (
const Point & pOrigin,
149 ConstAlias< std::vector< PairIterators > > masks );
166 void init (
const Point & pOrigin,
168 ConstAlias< std::vector< PairIterators > > masks );
179 template<
typename SurfelIterator >
180 Quantity
eval (
const SurfelIterator & it )
const;
194 template<
typename SurfelIterator,
typename EvalFunctor >
196 EvalFunctor functor )
const;
209 template<
typename SurfelIterator,
typename OutputIterator >
210 void eval (
const SurfelIterator & itbegin,
211 const SurfelIterator & itend,
212 OutputIterator & result )
const;
226 template<
typename SurfelIterator,
typename OutputIterator,
typename EvalFunctor >
227 void eval (
const SurfelIterator & itbegin,
228 const SurfelIterator & itend,
229 OutputIterator & result,
230 EvalFunctor functor )
const;
242 template<
typename SurfelIterator >
256 template<
typename SurfelIterator,
typename EvalFunctor >
258 EvalFunctor functor )
const;
270 template<
typename SurfelIterator,
typename OutputIterator >
272 const SurfelIterator & itend,
273 OutputIterator & result )
const;
287 template<
typename SurfelIterator,
typename OutputIterator,
typename EvalFunctor >
289 const SurfelIterator & itend,
290 OutputIterator & result,
291 EvalFunctor functor )
const;
325 void fillMoments( Quantity* aMomentMatrix,
const Spel & aSpel,
double direction )
const;
349 template<
typename SurfelIterator >
350 bool core_eval (
const SurfelIterator & it,
353 bool useLastResults =
false,
354 Spel & lastInnerSpel = defaultInnerSpel,
355 Spel & lastOuterSpel = defaultOuterSpel,
356 Quantity & lastInnerSum = defaultInnerSum,
357 Quantity & lastOuterSum = defaultOuterSum )
const;
373 template<
typename SurfelIterator >
375 CovarianceMatrix & innerMatrix,
376 CovarianceMatrix & outerMatrix,
377 bool useLastResults =
false,
378 Spel & lastInnerSpel = defaultInnerSpel,
379 Spel & lastOuterSpel = defaultOuterSpel,
380 Quantity * lastInnerMoments = defaultInnerMoments,
381 Quantity * lastOuterMoments = defaultOuterMoments )
const;
434 template<
typename TFunctor,
typename TKernelFunctor,
typename TKSpace,
typename TDigitalKernel >
453 typedef typename KSpace::SCell
Spel;
458 typedef std::pair< KernelConstIterator, KernelConstIterator >
PairIterators;
507 void init (
const Point & pOrigin,
509 ConstAlias< std::vector< PairIterators > > masks );
526 void init (
const Point & pOrigin,
528 ConstAlias< std::vector< PairIterators > > masks );
539 template<
typename SurfelIterator >
540 Quantity
eval (
const SurfelIterator & it )
const;
554 template<
typename SurfelIterator,
typename EvalFunctor >
556 EvalFunctor functor )
const;
569 template<
typename SurfelIterator,
typename OutputIterator >
570 void eval (
const SurfelIterator & itbegin,
571 const SurfelIterator & itend,
572 OutputIterator & result )
const;
586 template<
typename SurfelIterator,
typename OutputIterator,
typename EvalFunctor >
587 void eval (
const SurfelIterator & itbegin,
588 const SurfelIterator & itend,
589 OutputIterator & result,
590 EvalFunctor functor )
const;
602 template<
typename SurfelIterator >
616 template<
typename SurfelIterator,
typename EvalFunctor >
618 EvalFunctor functor )
const;
630 template<
typename SurfelIterator,
typename OutputIterator >
632 const SurfelIterator & itend,
633 OutputIterator & result )
const;
647 template<
typename SurfelIterator,
typename OutputIterator,
typename EvalFunctor >
649 const SurfelIterator & itend,
650 OutputIterator & result,
651 EvalFunctor functor )
const;
685 void fillMoments( Quantity* aMomentMatrix,
const Spel & aSpel,
double direction )
const;
709 template<
typename SurfelIterator >
710 bool core_eval (
const SurfelIterator & it,
713 bool useLastResults =
false,
714 Spel & lastInnerSpel = defaultInnerSpel,
715 Spel & lastOuterSpel = defaultOuterSpel,
716 Quantity & lastInnerSum = defaultInnerSum,
717 Quantity & lastOuterSum = defaultOuterSum )
const;
733 template<
typename SurfelIterator >
735 CovarianceMatrix & innerMatrix,
736 CovarianceMatrix & outerMatrix,
737 bool useLastResults =
false,
738 Spel & lastInnerSpel = defaultInnerSpel,
739 Spel & lastOuterSpel = defaultOuterSpel,
740 Quantity * lastInnerMoments = defaultInnerMoments,
741 Quantity * lastOuterMoments = defaultOuterMoments )
const;
796 template<
typename TFunctor,
typename TKernelFunctor,
typename TKSpace,
typename TDigitalKernel >
815 typedef typename KSpace::SCell
Spel;
821 typedef std::pair< KernelConstIterator, KernelConstIterator >
PairIterators;
872 void init (
const Point & pOrigin,
874 ConstAlias< std::vector< PairIterators > > masks );
891 void init (
const Point & pOrigin,
893 ConstAlias< std::vector< PairIterators > > masks );
904 template<
typename SurfelIterator >
905 Quantity
eval (
const SurfelIterator & it )
const;
919 template<
typename SurfelIterator,
typename EvalFunctor >
921 EvalFunctor functor )
const;
934 template<
typename SurfelIterator,
typename OutputIterator >
935 void eval (
const SurfelIterator & itbegin,
936 const SurfelIterator & itend,
937 OutputIterator & result )
const;
951 template<
typename SurfelIterator,
typename OutputIterator,
typename EvalFunctor >
952 void eval (
const SurfelIterator & itbegin,
953 const SurfelIterator & itend,
954 OutputIterator & result,
955 EvalFunctor functor )
const;
967 template<
typename SurfelIterator >
981 template<
typename SurfelIterator,
typename EvalFunctor >
983 EvalFunctor functor )
const;
995 template<
typename SurfelIterator,
typename OutputIterator >
997 const SurfelIterator & itend,
998 OutputIterator & result )
const;
1012 template<
typename SurfelIterator,
typename OutputIterator,
typename EvalFunctor >
1014 const SurfelIterator & itend,
1015 OutputIterator & result,
1016 EvalFunctor functor )
const;
1051 void fillMoments ( Quantity * aMomentMatrix,
const Spel & aSpel,
double direction )
const;
1075 template<
typename SurfelIterator >
1076 bool core_eval (
const SurfelIterator & it,
1077 Quantity & innerSum,
1078 Quantity & outerSum,
1079 bool useLastResults =
false,
1080 Spel & lastInnerSpel = defaultInnerSpel,
1081 Spel & lastOuterSpel = defaultOuterSpel,
1082 Quantity & lastInnerSum = defaultInnerSum,
1083 Quantity & lastOuterSum = defaultOuterSum )
const;
1099 template<
typename SurfelIterator >
1101 CovarianceMatrix & innerMatrix,
1102 CovarianceMatrix & outerMatrix,
1103 bool useLastResults =
false,
1104 Spel & lastInnerSpel = defaultInnerSpel,
1105 Spel & lastOuterSpel = defaultOuterSpel,
1106 Quantity * lastInnerMoments = defaultInnerMoments,
1107 Quantity * lastOuterMoments = defaultOuterMoments )
const;
1169 template<
typename TF,
typename TKF,
typename TKS,
typename TDK, Dimension dimension >
1171 operator<< ( std::ostream & out, const DGtal::DigitalSurfaceConvolver< TF, TKF, TKS, TDK, dimension > & object );
1173 template<
typename TF,
typename TKF,
typename TKS,
typename TDK >
1175 operator<< ( std::ostream & out, const DGtal::DigitalSurfaceConvolver< TF, TKF, TKS, TDK, 2 > & object );
1177 template<
typename TF,
typename TKF,
typename TKS,
typename TDK >
1179 operator<< ( std::ostream & out, const DGtal::DigitalSurfaceConvolver<TF, TKF, TKS, TDK, 3 > & object );
1187 #include "DGtal/geometry/surfaces/DigitalSurfaceConvolver.ih" 1193 #endif // !defined DigitalSurfaceConvolver_h 1195 #undef DigitalSurfaceConvolver_RECURSES 1196 #endif // else defined(DigitalSurfaceConvolver_RECURSES)
static const int nbMoments
the number of moments is dependent to the dimension. In 2D, they are 6 moments such that p+q <= 2...
static Spel defaultInnerSpel
default Spel, used as default parameter in core_eval and core_evalCovarianceMatrix functions ...
Z2i::DigitalSet::ConstIterator KernelConstIterator
bool isInitFullMasks
If the user uses init with masks. See init() for more information.
CanonicSCellEmbedder< KSpace > Embedder
void fillMoments(Quantity *aMomentMatrix, const Spel &aSpel, double direction) const
fillMoments fill the matrix of moments with a given spel.
std::pair< KernelConstIterator, KernelConstIterator > PairIterators
const std::vector< PairIterators > * myMasks
Pointer of vector of iterators for kernel partial masks.
bool isInitFullMasks
If the user uses init with masks. See init() for more information.
static Quantity defaultOuterSum
default Quantity, used as default parameter in core_eval function
const DigitalKernel * myKernel
Two choice to iterate over the full kernel. See init() for more information.
const KSpace & myKSpace
Const ref of the shape Kspace.
TDigitalKernel DigitalKernel
Spel myKernelSpelOrigin
Copy of the origin cell of the kernel.
Aim: This class encapsulates its parameter class so that to indicate to the user that the object/poin...
CanonicSCellEmbedder< KSpace > Embedder
static Spel defaultOuterSpel
default Spel, used as default parameter in core_eval and core_evalCovarianceMatrix functions ...
DGtal::uint32_t Dimension
Embedder myEmbedder
Converter Digital point -> Euclidean point.
Aim: Defines a functor on cells.
~DigitalSurfaceConvolver()
DigitalSurfaceConvolver()
const DigitalKernel * myKernel
Two choice to iterate over the full kernel. See init() for more information.
SimpleMatrix< double, 2, 2 > CovarianceMatrix
static Quantity defaultOuterMoments[6]
default array of Quantity, used as default parameter in core_evalCovarianceMatrix function ...
void init(const Point &pOrigin, ConstAlias< PairIterators > fullKernel, ConstAlias< std::vector< PairIterators > > masks)
TDigitalKernel DigitalKernel
const DigitalKernel * myKernel
Two choice to iterate over the full kernel. See init() for more information.
const KSpace & myKSpace
Const ref of the shape Kspace.
~DigitalSurfaceConvolver()
SimpleMatrix< Quantity, dimension, dimension > MatrixQuantity
Aim: Implements basic operations that will be used in Point and Vector classes.
bool isInitKernelAndMasks
If the user uses init with masks and digital (full) kernel. See init() for more information.
Z3i::DigitalSet::ConstIterator KernelConstIterator
std::pair< KernelConstIterator, KernelConstIterator > PairIterators
static Spel defaultInnerSpel
default Spel, used as default parameter in core_eval and core_evalCovarianceMatrix functions ...
PointVector< 3, Quantity > VectorQuantity
PointVector< 2, Quantity > VectorQuantity
Embedder myEmbedder
Converter Digital point -> Euclidean point.
const Functor & myFFunctor
Const ref of the shape functor.
TDigitalKernel DigitalKernel
Aim: implements basic MxN Matrix services (M,N>=1).
TKernelFunctor KernelFunctor
~DigitalSurfaceConvolver()
static Quantity defaultInnerSum
default Quantity, used as default parameter in core_eval function
PointVector< dimension, Quantity > VectorQuantity
const PairIterators * myKernelMask
Two choice to iterate over the full kernel. See init() for more information.
SimpleMatrix< double, dimension, dimension > CovarianceMatrix
static const int nbMoments
the number of moments is dependent to the dimension. In 2D, they are 6 moments such that p+q <= 2 (se...
static Quantity defaultInnerSum
default Quantity, used as default parameter in core_eval function
static Quantity defaultOuterSum
default Quantity, used as default parameter in core_eval function
Quantity eval(const SurfelIterator &it) const
const std::vector< PairIterators > * myMasks
Pointer of vector of iterators for kernel partial masks.
Z2i::DigitalSet::ConstIterator KernelConstIterator
const Functor & myFFunctor
Const ref of the shape functor.
static const int nbMoments
the number of moments is dependent to the dimension. In 3D, they are 10 moments such that p+q+s <= 2 ...
CanonicSCellEmbedder< KSpace > Embedder
SimpleMatrix< Quantity, 3, 3 > MatrixQuantity
TKernelFunctor KernelFunctor
CovarianceMatrix evalCovarianceMatrix(const SurfelIterator &it) const
const KSpace & myKSpace
Const ref of the shape Kspace.
KSpace::Space::RealPoint RealPoint
BOOST_CONCEPT_ASSERT((concepts::CCellFunctor< Functor >))
DigitalSurfaceConvolver & operator=(const DigitalSurfaceConvolver &other)
const KernelFunctor & myGFunctor
Const ref of the kernel functor.
KSpace::Space::RealPoint RealPoint
const Functor & myFFunctor
Const ref of the shape functor.
SimpleMatrix< double, 3, 3 > CovarianceMatrix
const std::vector< PairIterators > * myMasks
Pointer of vector of iterators for kernel partial masks.
static Quantity defaultInnerSum
default Quantity, used as default parameter in core_eval function
static Quantity defaultInnerMoments[6]
default array of Quantity, used as default parameter in core_evalCovarianceMatrix function ...
DGtal is the top-level namespace which contains all DGtal functions and types.
Embedder myEmbedder
Converter Digital point -> Euclidean point.
bool core_eval(const SurfelIterator &it, Quantity &innerSum, Quantity &outerSum, bool useLastResults=false, Spel &lastInnerSpel=defaultInnerSpel, Spel &lastOuterSpel=defaultOuterSpel, Quantity &lastInnerSum=defaultInnerSum, Quantity &lastOuterSum=defaultOuterSum) const
core_eval method used ( in intern by eval() ) to compute the Quantity on a given surfel (*it) ...
static Spel defaultOuterSpel
default Spel, used as default parameter in core_eval and core_evalCovarianceMatrix functions ...
static Quantity defaultOuterSum
default Quantity, used as default parameter in core_eval function
bool core_evalCovarianceMatrix(const SurfelIterator &it, CovarianceMatrix &innerMatrix, CovarianceMatrix &outerMatrix, bool useLastResults=false, Spel &lastInnerSpel=defaultInnerSpel, Spel &lastOuterSpel=defaultOuterSpel, Quantity *lastInnerMoments=defaultInnerMoments, Quantity *lastOuterMoments=defaultOuterMoments) const
core_evalCovarianceMatrix method used ( in intern by evalCovarianceMatrix() ) to compute the covarian...
const Dimension dimension
Current dimension (= 2)
SimpleMatrix< Quantity, 2, 2 > MatrixQuantity
bool isInitFullMasks
If the user uses init with masks. See init() for more information.
const KernelFunctor & myGFunctor
Const ref of the kernel functor.
const PairIterators * myKernelMask
Two choice to iterate over the full kernel. See init() for more information.
std::pair< KernelConstIterator, KernelConstIterator > PairIterators
KSpace::Space::RealPoint RealPoint
const KernelFunctor & myGFunctor
Const ref of the kernel functor.
TKernelFunctor KernelFunctor
Spel myKernelSpelOrigin
Copy of the origin cell of the kernel.
Container::const_iterator ConstIterator
ConstIterator type of the container;.
void computeCovarianceMatrix(const Quantity *aMomentMatrix, CovarianceMatrix &aCovarianceMatrix) const
computeCovarianceMatrix compute the covariance matrix from matrix of moments.
bool isInitKernelAndMasks
If the user uses init with masks and digital (full) kernel. See init() for more information.
static Spel defaultInnerSpel
default Spel, used as default parameter in core_eval and core_evalCovarianceMatrix functions ...
bool isInitKernelAndMasks
If the user uses init with masks and digital (full) kernel. See init() for more information.
const Dimension dimension
Current dimension (= 3)
Spel myKernelSpelOrigin
Copy of the origin cell of the kernel.
static Spel defaultOuterSpel
default Spel, used as default parameter in core_eval and core_evalCovarianceMatrix functions ...
const PairIterators * myKernelMask
Two choice to iterate over the full kernel. See init() for more information.