Public Types | Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
DistanceModel Class Referenceabstract

Base class for linear and exponential distances in rectangular pixel images. More...

#include <DistanceModel.h>

Inheritance diagram for DistanceModel:
Inheritance graph
[legend]
Collaboration diagram for DistanceModel:
Collaboration graph
[legend]

Public Types

enum  PIXEL_ADJACENCY { CONN4 =4 , CONN8 =8 , KNIGHT =16 }
 
typedef PIXEL_ADJACENCY topol_t
 
typedef drain::EnumFlagger< drain::SingleFlagger< PIXEL_ADJACENCY > > PixelAdjacencyFlagger
 

Public Member Functions

void setMax (float maxCodeValue)
 Set maximum (expected) code value. Radii, if given, will set pixel-to-pixel decrements scaled to this value.
 
float getMax () const
 Returns the maximum (expected) code value.
 
virtual void setRadius (float horz, float vert=nan_f, float horzLeft=nan_f, float vertUp=nan_f)=0
 Sets the geometry of the distance model. More...
 
void setRadiusVerbatim (float horz, float vert=nan_f, float horzLeft=nan_f, float vertUp=nan_f)
 Simply copies values, does not try to set defaults.
 
const Bidirectional< float > & getRadiusHorz () const
 
const Bidirectional< float > & getRadiusVert () const
 
virtual void setDecrement (float horz, float vert=NAN, float horzRight=NAN, float vertUp=NAN)=0
 
virtual DistanceElement getElement (short dx, short dy, bool forward=true) const =0
 
void update ()
 
virtual void updateBean () const override
 Called after setParameters()
 
void setTopology (PIXEL_ADJACENCY topology)
 Sets the topology of the computation grid: 0=diamond, 1=diagonal, 2=extended (chess knight steps)
 
void setTopology (const std::string &topology)
 
void createChain (DistanceNeighbourhood &chain, PIXEL_ADJACENCY topology=PIXEL_ADJACENCY::KNIGHT, bool forward=true) const
 Creates a list of DistanceElements. More...
 
void createChain (DistanceNeighbourhood &chain, bool forward=true) const
 
virtual float decrease (float value, float coeff) const =0
 
- Public Member Functions inherited from BeanLike
virtual const std::string & getName () const
 Return the name of an instance.
 
virtual const std::string & getDescription () const
 Return a brief description.
 
bool hasParameters () const
 
template<class F >
getParameter (const std::string &p) const
 Gets a single parameter.
 
const ReferenceMapgetParameters () const
 
ReferenceMapgetParameters ()
 
template<class F >
void setParametersFromEntries (const F &args)
 
void setParameters (std::initializer_list< Variable::init_pair_t > args)
 Grants access to (if above hidden)
 
virtual void setParameters (const std::string &p, char assignmentSymbol='=', char separatorSymbol=0)
 Sets comma-separated parameters in a predetermined order "a,b,c" or by specifing them "b=2". More...
 
template<class T >
void setParameters (const std::map< std::string, T > &args)
 Set parameters.
 
template<class T >
void setParameters (const SmartMap< T > &args)
 Set parameters.
 
void setParameter (const std::string &p, const Castable &value)
 Sets a single parameter.
 
template<class T >
void setParameter (const std::string &p, const VariableT< T > &value)
 
template<class F >
void setParameter (const std::string &p, const F &value)
 Sets a single parameter. More...
 
template<class F >
void setParameter (const std::string &p, std::initializer_list< F > value)
 Sets a single parameter.
 
BeanLikeoperator= (const BeanLike &b)
 
virtual std::ostream & toStream (std::ostream &ostr, bool compact=true) const
 
 BeanLike (const BeanLike &b)
 
 BeanLike (const std::string &name, const std::string &description="")
 

Public Attributes

PixelAdjacencyFlagger pixelAdjacency
 

Static Public Attributes

static const float nan_f = std::numeric_limits<float>::quiet_NaN()
 

Protected Member Functions

 DistanceModel (const std::string &name, const std::string &description="")
 Base class for digital distance models. Supports 4-, 8- and extended "chess knight" distance. More...
 
 DistanceModel (const DistanceModel &dm)
 
- Protected Member Functions inherited from BeanLike
virtual void storeLastArguments (const std::string &p)
 Called after setParameters()
 

Protected Attributes

std::string pixelAdjacencyStr
 
drain::Bidirectional< float > horzRadius
 
drain::Bidirectional< float > vertRadius
 
drain::Bidirectional< float > horzDec
 Final decrement or decay per pixel in horizontal direction. Derived from horzRadius; definition varies in subclasses.
 
drain::Bidirectional< float > vertDec
 Final decrement or decay per pixel in vertical direction. Derived from vertRadius; definition varies in subclasses.
 
float maxCodeValue
 Needed internally to get diag decrement larger than horz/vert decrements. (Not used for scaling).
 
- Protected Attributes inherited from BeanLike
const std::string name
 
const std::string description
 
ReferenceMap parameters
 

Detailed Description

Base class for linear and exponential distances in rectangular pixel images.

Constructor & Destructor Documentation

◆ DistanceModel()

DistanceModel ( const std::string &  name,
const std::string &  description = "" 
)
inlineprotected

Base class for digital distance models. Supports 4-, 8- and extended "chess knight" distance.

Sets the horizontal and vertical radius for the distance function. The parameters are called "width" and "height"

By default, the geometry is octagonal, applying 8-distance.

Member Function Documentation

◆ createChain()

void createChain ( DistanceNeighbourhood &  chain,
PIXEL_ADJACENCY  topology = PIXEL_ADJACENCY::KNIGHT,
bool  forward = true 
) const

Creates a list of DistanceElements.

Diagonal (dx+dy) and "chess knight" (2dx+dy or dx+2dy) values will be adjusted as well.

◆ setDecrement()

virtual void setDecrement ( float  horz,
float  vert = NAN,
float  horzRight = NAN,
float  vertUp = NAN 
)
pure virtual

Set the distance geometry directly by modifying decrement/decay coefficients. Alternative to setRadus(). Set final decrement or decay per pixel. The exact definition varies in subclasses; the decay may be linear decrement as with DistanceModelLinear or multiplicative as with DistanceModelExponential .

Parameters
horz- horizontal distance decrement/decay
vert- vertical distance decrement/decay; if NaN, set equal to horz
horzLeft- horizontal distance decrement/decay; if NaN, set equal to horz
vertUp- vertical distance decrement/decay; if NaN, set equal to vert

Special values:

  • NaN: use default value
  • negative value: no decay; continue to infinity with constant value
  • zero: sharp decay, value is zero in neighboring pixels

Implemented in DistanceModelExponential, and DistanceModelLinear.

◆ setRadius()

virtual void setRadius ( float  horz,
float  vert = nan_f,
float  horzLeft = nan_f,
float  vertUp = nan_f 
)
pure virtual

Sets the geometry of the distance model.

The values are in float, as eg. half-width radius may be sharp, under 1.0.

Parameters
horz- horizontal distance, "width".
vert- vertical distance, "height"; if negative, set equal to horizontal

Special values:

  • NaN: use default value (horz for vert and horzRight; vert for \vertUp )
  • negative value: no decay; continue to infinity with constant value
  • zero: sharp decay, value is zero in neighboring pixels

Implemented in DistanceModelLinear, and DistanceModelExponential.


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