Skip to content

Contours and discrete geometrics estimators

dcoeurjo edited this page Jun 25, 2011 · 14 revisions
  • 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 CSequences:

    • 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.
  • The concept CLocalCurveGeometricEstimator describes an object that can process a CSequence so as to return Quantitys. More precisely, it provides:

    • inner types: Sequence the type of the sequence or range, Quantity the type of the estimated quantity. Note that Sequence should provide an inner type ConstIterator.
    • void init( double h, const Sequence & 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( Sequence::ConstIterator itb, Sequence::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 type Segment is SegmentComputer::Segment
    • inner type Quantity is SegmentComputerFunctor::Value
  • Similarly, we could provide a lambda-Maximal Segment estimator built similarly from maximal segments.

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

    • inner types: Sequence the type of the sequence or range, Quantity the type of the estimated quantity. Note that Object should provide an inner type ConstIterator.
    • void init( double h, const Sequence & 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> Quantity eval( Sequence::ConstIterator itb, Sequence::ConstIterator ite, OutputIterator itw ) const : returns the Quantity from positions itb till ite excluded on the output with *itw++.
    • Quantity eval( Sequence::ConstIterator it) const : returns the estimated quantity at position it.
  • 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 Sequence & 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().
    • Quantity eval( const Object &anObject ) const : returns the estimated quantity for the object
    • Examples of model: geometrical moments, circularity, ...