Skip to content

Contours and discrete geometrics estimators

troussil edited this page Jun 27, 2011 · 14 revisions

Note: CSequence is called now CRange

  • template <typename KSpace> class GridCurve<KSpace> : describes a 4-connected oriented interpixel curve, closed or open. For instance, the topological boundary of a simply connected digital shape is a closed GridCurve. This object provides several ranges, each of them are models of CRange:

    • PointsRange, CodesRange, LinelsRange, ArrowsRange: Each of them provides the following types/methods: - inner type = ConstIterator - ConstIterator begin() const - ConstIterator end() const
    • PointsRange: the ConstIterator is a model of CConstIteratorOnPoint<KSpace::Space> It returns the successive coordinates (KSpace::Space::Point) of the pointels of the grid curve (even the last when the curve is open).
    • CodesRange: the ConstIterator is a model of CConstIteratorOnCode It returns the successive chaincodes (unsigned int in 0-3) of the linels of the grid curve
    • LinelsRange: the ConstIterator is a model of CConstIteratorOnLinel<KSpace> It returns the successive linels (KSpace::SCell) of the grid curve.
    • ArrowsRange: the ConstIterator is a model of CConstIteratorOnArrow<KSpace::Space> It returns the successive arrows corresponding to linels as a std::pair<KSpace::Space::Point,KSpace::Space::Vector> where the point describes the coordinates of the pointel and the vector stands for the displacement.
    • ConstraintsRange: the ConstIterator is a model of CConstIteratorOnConstraints<KSpace::Space> It returns the center of the two pixels incident to the successive linels as a std::pair<KSpace::Space::Point,KSpace::Space::Point>
  • The concept CLocalCurveGeometricEstimator describes an object that can process a CRange so as to return Quantitys. More precisely, it provides:

    • inner types: Range the type of the range, Quantity the type of the estimated quantity. Note that Range should provide an inner type ConstIterator.
    • void init( double h, const Range & s, bool closed ) : called once, h is the grid step, s describes the piece to process, closed tells what to do when arriving at s.end().
    • template <typename OutputIterator> void eval( Range::ConstIterator itb, Range::ConstIterator ite, OutputIterator itw ) const : writes estimated quantities from positions itb till ite excluded on the output with *itw++.
    • Quantity eval( Sequence::ConstIterator it) const : returns the estimated quantity at position it.
  • We think to provide a rather generic class for building geometric estimators from models of SegmentComputer. For instance, given a SegmentComputer and a functor on SegmentComputer, we may provide an estimator which returns the functor value of the most centered segment. The class should be written as template <typename SegmentComputer, typename SegmentComputerFunctor> class MostCenteredMaximalSegmentEstimator, where

    • SegmentComputer is a standard model of CSegmentComputer
    • SegmentComputerFunctor has
      • inner type Value.
      • Value operator()( const SegmentComputer & sc )
    • inner types: Range, Quantity (is SegmentComputerFunctor::Value)
    • void init( double h, const Range & s, bool closed )
    • template <typename OutputIterator> void eval( Range::ConstIterator itb, Range::ConstIterator ite, OutputIterator itw ) const
    • Quantity eval( Range::ConstIterator it) const
  • Similarly, we could provide a lambda-Maximal Segment estimator built similarly from maximal segments.

  • The concept CGlobalCurveGeometricEstimator describes an object that can process a CRange so as to return a single Quantity. More precisely:

    • inner types: Range the type of the sequence or range, Quantity the type of the estimated quantity. Note that Range should provide an inner type ConstIterator.
    • void init( double h, const Range & s, bool closed ) : called once, h is the grid step, s describes the range to process, closed tells what to do when arriving at s.end().
    • Quantity eval( ) const : returns the estimated quantity for the range.
    • Examples of model: length by MLP,FP, greedy DSSs segmentation.
  • The concept CGlobalGeometricEstimator describes an object that can process a CDigitalSetor a CObject (don't know if there exist topology dependent global geometric estimators) so as to return a single Quantity. More precisely:

    • inner types: Set or Object the type of the object, Quantity the type of the estimated quantity. Note that Object should provide an inner type ConstIterator.
    • void init( double h, const Set & s) : called once, h is the grid step, s describes the set to process.
    • Quantity eval( ) const : returns the estimated quantity for the object
      • Examples of model: geometrical moments, circularity, ...