DGtal  0.9.4beta
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions
DGtal::MeaningfulScaleAnalysis< TProfile > Class Template Reference

#include <DGtal/math/MeaningfulScaleAnalysis.h>

Public Types

typedef TProfile Profile
 

Public Member Functions

 MeaningfulScaleAnalysis (ConstAlias< Profile > aProfile)
 
 ~MeaningfulScaleAnalysis ()
 
void computeMeaningfulScales (std::vector< std::pair< unsigned int, unsigned int > > &intervals, const unsigned int minSize=1, const double maxSlope=-0.2, const double minSlope=-1e10) const
 
std::pair< bool, double > getSlopeFromMeaningfulScales (const double maxSlope=-0.2, const double minSlope=-1e10, const unsigned int minSize=2) const
 
unsigned int noiseLevel (const unsigned int minSize=1, const double maxSlope=-0.2, const double minSlope=-1e10) const
 
unsigned int lowerBoundedNoiseLevel (const unsigned int minSize=1, const double maxSlope=-0.2, const double minSlope=-1e10, const double lowerBoundAtScale1=1.0, const double lowerBoundSlope=-2.0) const
 
void selfDisplay (std::ostream &out) const
 
bool isValid () const
 

Protected Member Functions

 MeaningfulScaleAnalysis ()
 

Protected Attributes

const ProfilemyProfile
 

Private Member Functions

 MeaningfulScaleAnalysis (const MeaningfulScaleAnalysis &other)
 
MeaningfulScaleAnalysisoperator= (const MeaningfulScaleAnalysis &other)
 

Detailed Description

template<typename TProfile>
class DGtal::MeaningfulScaleAnalysis< TProfile >

Aim: This class implements different methods used to define the meaningful scale analysis as proposed in [41] . In particular, it uses the Profile class to represent a multi-scale profile and to compute a meaningful scale. It also permits to get a noise estimation from the given profile.

Description of class 'MeaningfulScaleAnalysis'

A typical example is for instance the length of maximal segments obtained at different scales.

First we construct a Profile:

// we need to have the Profile header:
#include "DGtal/math/Profile.h"
// with a log functor to obtain log scale profile:
struct LogFct{
float operator()(const float &a) const {
return log(a);
}
};
...
Profile<LogFct> sp (Profile<LogFct>::MEAN);
sp.init(6);

Then, we can add values to the profile:

sp.addValue(0,22);
sp.addValue(1,15);
sp.addValue(2,8);
sp.addValue(3,17);
sp.addValue(4,7);
sp.addValue(5,2);

Finally we can construct the MeaningfulScaleAnalysis object and obtain the meaningful scale:

MeaningfulScaleAnalysis<Profile<LogFct>> msa(sp);
std::vector< std::pair<uint, uint> > intervals;
msa.computeMeaningfulScales(intervals, 1);
unsigned int n = msa.noiseLevel();
See also
testMeaningfulScaleAnalysis
Template Parameters
TProfilethe type of the profile class.

Definition at line 112 of file MeaningfulScaleAnalysis.h.

Member Typedef Documentation

template<typename TProfile>
typedef TProfile DGtal::MeaningfulScaleAnalysis< TProfile >::Profile

Definition at line 117 of file MeaningfulScaleAnalysis.h.

Constructor & Destructor Documentation

template<typename TProfile>
DGtal::MeaningfulScaleAnalysis< TProfile >::MeaningfulScaleAnalysis ( ConstAlias< Profile aProfile)

Constructor

template<typename TProfile>
DGtal::MeaningfulScaleAnalysis< TProfile >::~MeaningfulScaleAnalysis ( )

Destructor.

template<typename TProfile>
DGtal::MeaningfulScaleAnalysis< TProfile >::MeaningfulScaleAnalysis ( )
protected

Constructor. Forbidden by default (protected to avoid g++ warnings).

template<typename TProfile>
DGtal::MeaningfulScaleAnalysis< TProfile >::MeaningfulScaleAnalysis ( const MeaningfulScaleAnalysis< TProfile > &  other)
private

Copy constructor.

Parameters
otherthe object to clone. Forbidden by default.

Member Function Documentation

template<typename TProfile>
void DGtal::MeaningfulScaleAnalysis< TProfile >::computeMeaningfulScales ( std::vector< std::pair< unsigned int, unsigned int > > &  intervals,
const unsigned int  minSize = 1,
const double  maxSlope = -0.2,
const double  minSlope = -1e10 
) const

A meaningful scale is an interval of scales of length no smaller than [min_width] and in which the profile has slopes below [max_slope] and above [min_slope]. This method computes the sequence of meaningful scales for surfel [idx].

Parameters
[out]intervals(returns) a list of meaningful scales.
[in]minSizethe minimum length for the meaningful scales.
[in]maxSlopethe maximum allowed slope for length evolution.
[in]minSlopethe minimum allowed slope for length evolution.
template<typename TProfile>
std::pair<bool, double> DGtal::MeaningfulScaleAnalysis< TProfile >::getSlopeFromMeaningfulScales ( const double  maxSlope = -0.2,
const double  minSlope = -1e10,
const unsigned int  minSize = 2 
) const

Compute the profile slope of the first meaningful scale interval computed by a simple linear regression model.

Returns
a pair<bool, double> giving the slope and indicating if a meaningful scale was found or not. If no meaningful scale interval was found, it simply return the slope obtained from the linear regression.
Parameters
[in]maxSlopethe maximum allowed slope for length evolution.
[in]minSlopethe minimum allowed slope for length evolution.
[in]minSizethe minimum length for the meaningful scales.
template<typename TProfile>
bool DGtal::MeaningfulScaleAnalysis< TProfile >::isValid ( ) const

Checks the validity/consistency of the object.

Returns
'true' if the object is valid, 'false' otherwise.
template<typename TProfile>
unsigned int DGtal::MeaningfulScaleAnalysis< TProfile >::lowerBoundedNoiseLevel ( const unsigned int  minSize = 1,
const double  maxSlope = -0.2,
const double  minSlope = -1e10,
const double  lowerBoundAtScale1 = 1.0,
const double  lowerBoundSlope = -2.0 
) const

The noise level is the first scale of the first meaningful scale. A meaningful scale is an interval of scales of length no smaller than [minWidth] and in which the profile has slopes below [maxSlope]. The lower bounded noise level also requires minimum lenghs for different scales. Therefore the profile must be greater that [lower_bound_at_scale_1]+[lower_bound_slope]*scale.

Parameters
[in]minSizethe minimum length for the meaningful scales.
[in]maxSlopethe maximum allowed slope for length evolution.
[in]minSlopethe minimum allowed slope for length evolution.
[in]lowerBoundAtScale1the lower bound for the profile at scale 1.
[in]lowerBoundSlopethe slope of the lower bound for the profile (for instance -1 for digital contours, -3 for digital image graphs since area values are divided by (scale)^3.
Returns
the noise level or zero is none was found.
See also
meaningfulScales
template<typename TProfile>
unsigned int DGtal::MeaningfulScaleAnalysis< TProfile >::noiseLevel ( const unsigned int  minSize = 1,
const double  maxSlope = -0.2,
const double  minSlope = -1e10 
) const

The noise level is the first scale of the first meaningful scale. A meaningful scale is an interval of scales of length no smaller than [min_width] and in which the profile has slopes below [max_slope].

Parameters
[in]minSizethe minimum length for the meaningful scales.
[in]maxSlopethe maximum allowed slope for length evolution.
[in]minSlopethe minimum allowed slope for length evolution.
Returns
the noise level or zero is none was found.
See also
meaningfulScales
template<typename TProfile>
MeaningfulScaleAnalysis& DGtal::MeaningfulScaleAnalysis< TProfile >::operator= ( const MeaningfulScaleAnalysis< TProfile > &  other)
private

Assignment.

Parameters
otherthe object to copy.
Returns
a reference on 'this'. Forbidden by default.
template<typename TProfile>
void DGtal::MeaningfulScaleAnalysis< TProfile >::selfDisplay ( std::ostream &  out) const

Writes/Displays the object on an output stream.

Parameters
outthe output stream where the object is written.

Field Documentation

template<typename TProfile>
const Profile& DGtal::MeaningfulScaleAnalysis< TProfile >::myProfile
protected

Definition at line 234 of file MeaningfulScaleAnalysis.h.


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