Skip to content

itk::ParticleEntropyGradientFunction

This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution. More...

#include <itkParticleEntropyGradientFunction.h>

Inherits from itk::ParticleVectorFunction< VDimension >, LightObject

Inherited by itk::ParticleConstrainedModifiedCotangentEntropyGradientFunction< TGradientNumericType, VDimension >, itk::ParticleCurvatureEntropyGradientFunction< TGradientNumericType, VDimension >, itk::ParticleModifiedCotangentEntropyGradientFunction< TGradientNumericType, VDimension >, itk::ParticleOmegaGradientFunction< TGradientNumericType, VDimension >

Public Types

Name
typedef ParticleEntropyGradientFunction Self
typedef SmartPointer< Self > Pointer
typedef SmartPointer< const Self > ConstPointer
typedef ParticleVectorFunction< VDimension > Superclass
typedef TGradientNumericType GradientNumericType
typedef Superclass::ParticleSystemType ParticleSystemType
typedef ParticleContainerArrayAttribute< double, VDimension > SigmaCacheType
typedef Superclass::VectorType VectorType
typedef ParticleSystemType::PointType PointType
typedef vnl_vector_fixed< TGradientNumericType, VDimension > GradientVectorType

Public Functions

Name
itkTypeMacro(ParticleEntropyGradientFunction , ParticleVectorFunction )
itkNewMacro(Self )
itkStaticConstMacro(Dimension , unsigned int , VDimension )
virtual VectorType Evaluate(unsigned int , unsigned int , const ParticleSystemType * , double & ) const
virtual VectorType Evaluate(unsigned int , unsigned int , const ParticleSystemType * , double & , double & ) const
virtual double Energy(unsigned int , unsigned int , const ParticleSystemType * ) const
virtual void ResetBuffers()
virtual double EstimateSigma(unsigned int idx, const typename ParticleSystemType::PointVectorType & neighborhood, const shapeworks::ParticleDomain * domain, const std::vector< double > & weights, const PointType & pos, double initial_sigma, double precision, int & err) const
TGradientNumericType AngleCoefficient(const GradientVectorType & , const GradientVectorType & ) const
void SetMinimumNeighborhoodRadius(double s)
double GetMinimumNeighborhoodRadius() const
void SetMaximumNeighborhoodRadius(double s)
double GetMaximumNeighborhoodRadius() const
void SetFlatCutoff(double s)
double GetFlatCutoff() const
void SetNeighborhoodToSigmaRatio(double s)
double GetNeighborhoodToSigmaRatio() const
void SetSpatialSigmaCache(SigmaCacheType * s)
SigmaCacheType * GetSpatialSigmaCache()
const SigmaCacheType * GetSpatialSigmaCache() const
void ComputeAngularWeights(const PointType & , int , const typename ParticleSystemType::PointVectorType & , const shapeworks::ParticleDomain * , std::vector< double > & ) const
virtual ParticleVectorFunction< VDimension >::Pointer Clone()

Protected Functions

Name
ParticleEntropyGradientFunction()
virtual ~ParticleEntropyGradientFunction()
void operator=(const ParticleEntropyGradientFunction & )
ParticleEntropyGradientFunction(const ParticleEntropyGradientFunction & )

Protected Attributes

Name
double m_MinimumNeighborhoodRadius
double m_MaximumNeighborhoodRadius
double m_FlatCutoff
double m_NeighborhoodToSigmaRatio
SigmaCacheType::Pointer m_SpatialSigmaCache

Additional inherited members

Public Functions inherited from itk::ParticleVectorFunction< VDimension >

Name
virtual void AfterIteration()
virtual void BeforeIteration()
virtual void BeforeEvaluate(unsigned int , unsigned int , const ParticleSystemType * )
virtual void SetParticleSystem(ParticleSystemType * p)
virtual ParticleSystemType * GetParticleSystem() const
virtual void SetDomainNumber(unsigned int i)
virtual int GetDomainNumber() const

Protected Functions inherited from itk::ParticleVectorFunction< VDimension >

Name
ParticleVectorFunction()
virtual ~ParticleVectorFunction()
ParticleVectorFunction(const ParticleVectorFunction & )

Protected Attributes inherited from itk::ParticleVectorFunction< VDimension >

Name
ParticleSystemType * m_ParticleSystem
unsigned int m_DomainNumber

Detailed Description

template <class TGradientNumericType ,
unsigned int VDimension>
class itk::ParticleEntropyGradientFunction;

This function returns an estimate of the gradient of the entropy of a particle distribution with respect to change in position of a specific particle in that distribution.

The following description is an excerpt from

J Cates, P T Fletcher, M Styner, M Shenton, R Whitaker. Shape Modeling and Analysis with Entropy-Based Particle Systems. Information Processing in Medical Imaging IPMI 2007, LNCS 4584, pp. 333�345, 2007.

We treat a surface as a subset of \(\Re^d\), where \(d=2\) or \(d=3\) depending whether we are processing curves in the plane or surfaces in a volume, refspectively. The method we describe here deals with smooth, closed manifolds of codimension one, and we will refer to such manifolds as {surfaces}. We sample a surface \({\cal S} \subset \Re^d\) using a discrete set of \(N\) points that are considered random variables \(Z = (X_1, X_2, \ldots, X_N)\) drawn from a probability density function (PDF), \(p(X)\). We denote a realization of this PDF with lower case, and thus we have \(z = (x_1, x_2,\ldots, x_N)\), where \(z \in {\cal S}^N\). The probability of a realization \(x\) is \(p(X = x)\), which we denote simply as \(p(x)\).

The amount of information contained in such a random sampling is, in the limit, the differential entropy of the PDF, which is \(H[X] = -\int_S p(x) \log p(x) dx = -E\{\log p(X)\}\), where \(E\{ \cdot \}\) is the expectation. When we have a sufficient number of points sampled from \(p\), we can approximate the expectation by the sample mean, which gives \(H[X] \approx - (1/N)\sum_{i} \log p(x_i)\). We must also estimate \(p(x_i)\). Density functions on surfaces can be quite complex, and so we use a nonparametric, Parzen windowing estimation of this density using the particles themselves. Thus we have where \(G(x_i - x_j, \sigma_i)\) is a \(d\)-dimensional, isotropic Gaussian with standard deviation \(\sigma_i\). The cost function \(C\), is therefore an approximation of (negative) entropy:

Public Types Documentation

typedef Self

typedef ParticleEntropyGradientFunction itk::ParticleEntropyGradientFunction< TGradientNumericType, VDimension >::Self;

Standard class typedefs.

typedef Pointer

typedef SmartPointer<Self> itk::ParticleEntropyGradientFunction< TGradientNumericType, VDimension >::Pointer;

typedef ConstPointer

typedef SmartPointer<const Self> itk::ParticleEntropyGradientFunction< TGradientNumericType, VDimension >::ConstPointer;

typedef Superclass

typedef ParticleVectorFunction<VDimension> itk::ParticleEntropyGradientFunction< TGradientNumericType, VDimension >::Superclass;

typedef GradientNumericType

typedef TGradientNumericType itk::ParticleEntropyGradientFunction< TGradientNumericType, VDimension >::GradientNumericType;

Data type representing individual gradient components.

typedef ParticleSystemType

typedef Superclass::ParticleSystemType itk::ParticleEntropyGradientFunction< TGradientNumericType, VDimension >::ParticleSystemType;

Type of particle system.

typedef SigmaCacheType

typedef ParticleContainerArrayAttribute<double, VDimension> itk::ParticleEntropyGradientFunction< TGradientNumericType, VDimension >::SigmaCacheType;

Cache type for the sigma values.

typedef VectorType

typedef Superclass::VectorType itk::ParticleEntropyGradientFunction< TGradientNumericType, VDimension >::VectorType;

Vector & Point types.

typedef PointType

typedef ParticleSystemType::PointType itk::ParticleEntropyGradientFunction< TGradientNumericType, VDimension >::PointType;

typedef GradientVectorType

typedef vnl_vector_fixed<TGradientNumericType, VDimension> itk::ParticleEntropyGradientFunction< TGradientNumericType, VDimension >::GradientVectorType;

Public Functions Documentation

function itkTypeMacro

itkTypeMacro(
    ParticleEntropyGradientFunction ,
    ParticleVectorFunction 
)

function itkNewMacro

itkNewMacro(
    Self 
)

Method for creation through the object factory.

function itkStaticConstMacro

itkStaticConstMacro(
    Dimension ,
    unsigned int ,
    VDimension 
)

Dimensionality of the domain of the particle system.

function Evaluate

virtual VectorType Evaluate(
    unsigned int ,
    unsigned int ,
    const ParticleSystemType * ,
    double & 
) const

Reimplements: itk::ParticleVectorFunction::Evaluate

Reimplemented by: itk::ParticleConstrainedModifiedCotangentEntropyGradientFunction::Evaluate, itk::ParticleCurvatureEntropyGradientFunction::Evaluate, itk::ParticleCurvatureEntropyGradientFunction::Evaluate, itk::ParticleModifiedCotangentEntropyGradientFunction::Evaluate, itk::ParticleModifiedCotangentEntropyGradientFunction::Evaluate, itk::ParticleOmegaGradientFunction::Evaluate, itk::ParticleOmegaGradientFunction::Evaluate

The first argument is a pointer to the particle system. The second argument is the index of the domain within that particle system. The third argument is the index of the particle location within the given domain.

function Evaluate

inline virtual VectorType Evaluate(
    unsigned int ,
    unsigned int ,
    const ParticleSystemType * ,
    double & ,
    double & 
) const

Reimplements: itk::ParticleVectorFunction::Evaluate

Reimplemented by: itk::ParticleConstrainedModifiedCotangentEntropyGradientFunction::Evaluate, itk::ParticleCurvatureEntropyGradientFunction::Evaluate, itk::ParticleCurvatureEntropyGradientFunction::Evaluate, itk::ParticleModifiedCotangentEntropyGradientFunction::Evaluate, itk::ParticleModifiedCotangentEntropyGradientFunction::Evaluate, itk::ParticleOmegaGradientFunction::Evaluate, itk::ParticleOmegaGradientFunction::Evaluate

function Energy

inline virtual double Energy(
    unsigned int ,
    unsigned int ,
    const ParticleSystemType * 
) const

Reimplements: itk::ParticleVectorFunction::Energy

Reimplemented by: itk::ParticleConstrainedModifiedCotangentEntropyGradientFunction::Energy, itk::ParticleCurvatureEntropyGradientFunction::Energy, itk::ParticleCurvatureEntropyGradientFunction::Energy, itk::ParticleModifiedCotangentEntropyGradientFunction::Energy, itk::ParticleModifiedCotangentEntropyGradientFunction::Energy, itk::ParticleOmegaGradientFunction::Energy, itk::ParticleOmegaGradientFunction::Energy

function ResetBuffers

inline virtual void ResetBuffers()

Reimplements: itk::ParticleVectorFunction::ResetBuffers

May be called by the solver class.

function EstimateSigma

virtual double EstimateSigma(
    unsigned int idx,
    const typename ParticleSystemType::PointVectorType & neighborhood,
    const shapeworks::ParticleDomain * domain,
    const std::vector< double > & weights,
    const PointType & pos,
    double initial_sigma,
    double precision,
    int & err
) const

Estimate the best sigma for Parzen windowing in a given neighborhood. The best sigma is the sigma that maximizes probability at the given point

function AngleCoefficient

TGradientNumericType AngleCoefficient(
    const GradientVectorType & ,
    const GradientVectorType & 
) const

Returns a weighting coefficient based on the angle between two vectors. Weights smoothly approach zero as the angle between two normals approaches 90 degrees.

function SetMinimumNeighborhoodRadius

inline void SetMinimumNeighborhoodRadius(
    double s
)

Minimum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space. The actual radius used in a calculation may exceed this value, but will not exceed the MaximumNeighborhoodRadius.

function GetMinimumNeighborhoodRadius

inline double GetMinimumNeighborhoodRadius() const

function SetMaximumNeighborhoodRadius

inline void SetMaximumNeighborhoodRadius(
    double s
)

Maximum radius of the neighborhood of points that are considered in the calculation. The neighborhood is a spherical radius in 3D space.

function GetMaximumNeighborhoodRadius

inline double GetMaximumNeighborhoodRadius() const

function SetFlatCutoff

inline void SetFlatCutoff(
    double s
)

Numerical parameters

function GetFlatCutoff

inline double GetFlatCutoff() const

function SetNeighborhoodToSigmaRatio

inline void SetNeighborhoodToSigmaRatio(
    double s
)

function GetNeighborhoodToSigmaRatio

inline double GetNeighborhoodToSigmaRatio() const

function SetSpatialSigmaCache

inline void SetSpatialSigmaCache(
    SigmaCacheType * s
)

Access the cache of sigma values for each particle position. This cache is populated by registering this object as an observer of the correct particle system (see SetParticleSystem).

function GetSpatialSigmaCache

inline SigmaCacheType * GetSpatialSigmaCache()

function GetSpatialSigmaCache

inline const SigmaCacheType * GetSpatialSigmaCache() const

function ComputeAngularWeights

void ComputeAngularWeights(
    const PointType & ,
    int ,
    const typename ParticleSystemType::PointVectorType & ,
    const shapeworks::ParticleDomain * ,
    std::vector< double > & 
) const

Compute a set of weights based on the difference in the normals of a central point and each of its neighbors. Difference of > 90 degrees results in a weight of 0.

function Clone

inline virtual ParticleVectorFunction< VDimension >::Pointer Clone()

Reimplements: itk::ParticleVectorFunction::Clone

Reimplemented by: itk::ParticleConstrainedModifiedCotangentEntropyGradientFunction::Clone, itk::ParticleConstrainedModifiedCotangentEntropyGradientFunction::Clone, itk::ParticleCurvatureEntropyGradientFunction::Clone, itk::ParticleCurvatureEntropyGradientFunction::Clone, itk::ParticleModifiedCotangentEntropyGradientFunction::Clone, itk::ParticleModifiedCotangentEntropyGradientFunction::Clone, itk::ParticleOmegaGradientFunction::Clone, itk::ParticleOmegaGradientFunction::Clone

Protected Functions Documentation

function ParticleEntropyGradientFunction

inline ParticleEntropyGradientFunction()

function ~ParticleEntropyGradientFunction

inline virtual ~ParticleEntropyGradientFunction()

function operator=

void operator=(
    const ParticleEntropyGradientFunction & 
)

function ParticleEntropyGradientFunction

ParticleEntropyGradientFunction(
    const ParticleEntropyGradientFunction & 
)

Protected Attributes Documentation

variable m_MinimumNeighborhoodRadius

double m_MinimumNeighborhoodRadius;

variable m_MaximumNeighborhoodRadius

double m_MaximumNeighborhoodRadius;

variable m_FlatCutoff

double m_FlatCutoff;

variable m_NeighborhoodToSigmaRatio

double m_NeighborhoodToSigmaRatio;

variable m_SpatialSigmaCache

SigmaCacheType::Pointer m_SpatialSigmaCache;

Updated on 2022-07-23 at 16:40:05 -0600