#include <itkAnisotropicDiffusionFunction.h>
This class is a virtual base for anisotropic diffusion function objects. It is a component object in the finite difference solver hierarchy (see itkFiniteDifferenceImageFilter for an overview). AnisotropicDiffusionFunction objects are used by AnisotropicDiffusionImageFilter objects to perform non-linear diffusion on itk::Images.
Anisotropic diffusion methods are formulated to reduce noise (or unwanted detail) in images while preserving specific image features. For many applications, there is an assumption that light-dark transitions (edges) are interesting. Standard isotropic diffusion methods move and blur light-dark boundaries. Anisotropic diffusion methods are formulated to specifically preserve edges.
Anisotropic diffusion methods can be thought of as tools for calculating multi-scale descriptions of images. Embed an image \(U(\mathbf{x})\) in a higher dimensional function of derived images, \(U(\mathbf{x}, t)\). This higher dimensional function represents the solution of the heat diffusion equation,
\[\frac{d U(\mathbf{x})}{d t} = \nabla \cdot c \nabla U(\mathbf{x})\]
\[\frac{d U(\mathbf{x})}{d t} = C(\mathbf{x})\Delta U(\mathbf{x}) + \nabla C(\mathbf{x}) \nabla U(\mathbf{x})\]
\[C(\mathbf{x}) = e^{-(\frac{\parallel \nabla U(\mathbf{x}) \parallel}{K})^2}\]
.For additional details see [86].
Definition at line 136 of file itkAnisotropicDiffusionFunction.h.
Public Types | |
using | ConstPointer = SmartPointer<const Self> |
using | PixelrealType = typename Superclass::PixelRealType |
using | Pointer = SmartPointer<Self> |
using | Self = AnisotropicDiffusionFunction |
using | Superclass = FiniteDifferenceFunction<TImage> |
![]() | |
using | ConstPointer |
using | DefaultBoundaryConditionType |
using | FloatOffsetType |
using | ImageType |
using | NeighborhoodScalesType |
using | NeighborhoodType |
using | PixelRealType |
using | PixelType |
using | Pointer |
using | RadiusType |
using | Self |
using | Superclass |
using | TimeStepType |
![]() | |
using | ConstPointer = SmartPointer<const Self> |
using | Pointer = SmartPointer<Self> |
using | Self = LightObject |
Public Member Functions | |
virtual void | CalculateAverageGradientMagnitudeSquared (ImageType *)=0 |
TimeStepType | ComputeGlobalTimeStep (void *GlobalData) const override |
const double & | GetAverageGradientMagnitudeSquared () const |
const double & | GetConductanceParameter () const |
void * | GetGlobalDataPointer () const override |
const char * | GetNameOfClass () const override |
const TimeStepType & | GetTimeStep () const |
void | ReleaseGlobalDataPointer (void *GlobalData) const override |
void | SetAverageGradientMagnitudeSquared (const double c) |
void | SetConductanceParameter (const double c) |
void | SetTimeStep (const TimeStepType &t) |
![]() | |
const NeighborhoodScalesType | ComputeNeighborhoodScales () const |
const NeighborhoodScalesType | ComputeNeighborhoodScales () const |
virtual PixelType | ComputeUpdate (const NeighborhoodType &neighborhood, void *globalData, const FloatOffsetType &offset=FloatOffsetType(0.0))=0 |
virtual PixelType | ComputeUpdate (const NeighborhoodType &neighborhood, void *globalData, const FloatOffsetType &offset=FloatOffsetType(0.0))=0 |
const char * | GetNameOfClass () const override |
const char * | GetNameOfClass () const override |
const RadiusType & | GetRadius () const |
const RadiusType & | GetRadius () const |
void | GetScaleCoefficients (PixelRealType vals[ImageDimension]) const |
void | GetScaleCoefficients (PixelRealType vals[ImageDimension]) const |
virtual void | InitializeIteration () |
virtual void | InitializeIteration () |
void | SetRadius (const RadiusType &r) |
void | SetRadius (const RadiusType &r) |
void | SetScaleCoefficients (const PixelRealType vals[ImageDimension]) |
void | SetScaleCoefficients (const PixelRealType vals[ImageDimension]) |
![]() | |
Pointer | Clone () const |
virtual Pointer | CreateAnother () const |
virtual void | Delete () |
virtual int | GetReferenceCount () const |
void | Print (std::ostream &os, Indent indent=0) const |
virtual void | Register () const |
virtual void | SetReferenceCount (int) |
virtual void | UnRegister () const noexcept |
Static Public Attributes | |
static constexpr unsigned int | ImageDimension = Superclass::ImageDimension |
![]() | |
static constexpr unsigned int | ImageDimension |
static constexpr unsigned int | ImageDimension |
Protected Member Functions | |
AnisotropicDiffusionFunction () | |
void | PrintSelf (std::ostream &os, Indent indent) const override |
~AnisotropicDiffusionFunction () override=default | |
![]() | |
FiniteDifferenceFunction () | |
FiniteDifferenceFunction () | |
void | PrintSelf (std::ostream &os, Indent indent) const override |
void | PrintSelf (std::ostream &os, Indent indent) const override |
~FiniteDifferenceFunction () override=default | |
~FiniteDifferenceFunction () override=default | |
![]() | |
virtual LightObject::Pointer | InternalClone () const |
LightObject () | |
virtual void | PrintHeader (std::ostream &os, Indent indent) const |
virtual void | PrintTrailer (std::ostream &os, Indent indent) const |
virtual | ~LightObject () |
Private Attributes | |
double | m_AverageGradientMagnitudeSquared {} |
double | m_ConductanceParameter {} |
TimeStepType | m_TimeStep {} |
Additional Inherited Members | |
![]() | |
static void | BreakOnError () |
static Pointer | New () |
![]() | |
RadiusType | m_Radius |
RadiusType | m_Radius |
PixelRealType | m_ScaleCoefficients [ImageDimension] |
PixelRealType | m_ScaleCoefficients [ImageDimension] |
![]() | |
std::atomic< int > | m_ReferenceCount {} |
using itk::AnisotropicDiffusionFunction< TImage >::ConstPointer = SmartPointer<const Self> |
Definition at line 146 of file itkAnisotropicDiffusionFunction.h.
using itk::AnisotropicDiffusionFunction< TImage >::PixelrealType = typename Superclass::PixelRealType |
Definition at line 154 of file itkAnisotropicDiffusionFunction.h.
using itk::AnisotropicDiffusionFunction< TImage >::Pointer = SmartPointer<Self> |
Definition at line 145 of file itkAnisotropicDiffusionFunction.h.
using itk::AnisotropicDiffusionFunction< TImage >::Self = AnisotropicDiffusionFunction |
Standard class type aliases.
Definition at line 143 of file itkAnisotropicDiffusionFunction.h.
using itk::AnisotropicDiffusionFunction< TImage >::Superclass = FiniteDifferenceFunction<TImage> |
Definition at line 144 of file itkAnisotropicDiffusionFunction.h.
|
inlineprotected |
Definition at line 236 of file itkAnisotropicDiffusionFunction.h.
References m_AverageGradientMagnitudeSquared, m_ConductanceParameter, and m_TimeStep.
Referenced by GetNameOfClass().
|
overrideprotecteddefault |
|
pure virtual |
This method is called before each iteration. It calculates a scalar value that is the average of the gradient magnitude squared at each pixel in the output image (intermediate solution). The average gradient magnitude value is typically used in the anisotropic diffusion equations to calibrate the conductance term.
Implemented in itk::ScalarAnisotropicDiffusionFunction< TImage >, and itk::VectorAnisotropicDiffusionFunction< TImage >.
|
inlineoverridevirtual |
Returns the time step supplied by the user. We don't need to use the global data supplied since we are returning a fixed value.
Implements itk::FiniteDifferenceFunction< TImage >.
Definition at line 215 of file itkAnisotropicDiffusionFunction.h.
References GetTimeStep().
|
inline |
Set/Get the average gradient magnitude squared.
Definition at line 201 of file itkAnisotropicDiffusionFunction.h.
References m_AverageGradientMagnitudeSquared.
Referenced by itk::CurvatureNDAnisotropicDiffusionFunction< TImage >::InitializeIteration(), itk::GradientNDAnisotropicDiffusionFunction< TImage >::InitializeIteration(), itk::VectorCurvatureNDAnisotropicDiffusionFunction< TImage >::InitializeIteration(), and itk::VectorGradientNDAnisotropicDiffusionFunction< TImage >::InitializeIteration().
|
inline |
Definition at line 194 of file itkAnisotropicDiffusionFunction.h.
References m_ConductanceParameter.
Referenced by itk::CurvatureNDAnisotropicDiffusionFunction< TImage >::InitializeIteration(), itk::GradientNDAnisotropicDiffusionFunction< TImage >::InitializeIteration(), itk::VectorCurvatureNDAnisotropicDiffusionFunction< TImage >::InitializeIteration(), and itk::VectorGradientNDAnisotropicDiffusionFunction< TImage >::InitializeIteration().
|
inlineoverridevirtual |
The anisotropic diffusion classes don't use this particular parameter so it's safe to return a null value.
Implements itk::FiniteDifferenceFunction< TImage >.
Definition at line 223 of file itkAnisotropicDiffusionFunction.h.
|
overridevirtual |
Reimplemented from itk::LightObject.
Reimplemented in itk::CurvatureNDAnisotropicDiffusionFunction< TImage >, itk::GradientNDAnisotropicDiffusionFunction< TImage >, itk::ScalarAnisotropicDiffusionFunction< TImage >, itk::VectorAnisotropicDiffusionFunction< TImage >, itk::VectorCurvatureNDAnisotropicDiffusionFunction< TImage >, and itk::VectorGradientNDAnisotropicDiffusionFunction< TImage >.
References AnisotropicDiffusionFunction().
|
inline |
Definition at line 181 of file itkAnisotropicDiffusionFunction.h.
References m_TimeStep.
Referenced by ComputeGlobalTimeStep().
|
inlineoverrideprotectedvirtual |
Methods invoked by Print() to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.
Reimplemented from itk::LightObject.
Reimplemented in itk::VectorAnisotropicDiffusionFunction< TImage >, and itk::VectorCurvatureNDAnisotropicDiffusionFunction< TImage >.
Definition at line 246 of file itkAnisotropicDiffusionFunction.h.
References m_ConductanceParameter, m_TimeStep, and itk::FiniteDifferenceFunction< TImage >::PrintSelf().
Referenced by itk::VectorAnisotropicDiffusionFunction< TImage >::PrintSelf().
|
inlineoverridevirtual |
Does nothing. No global data is used in this class of equations.
Implements itk::FiniteDifferenceFunction< TImage >.
Definition at line 230 of file itkAnisotropicDiffusionFunction.h.
|
inline |
Definition at line 207 of file itkAnisotropicDiffusionFunction.h.
References m_AverageGradientMagnitudeSquared.
|
inline |
Set/Get the conductance parameter. The conductance parameter.
Definition at line 188 of file itkAnisotropicDiffusionFunction.h.
References m_ConductanceParameter.
|
inline |
Set/Get the time step. For this class of anisotropic diffusion filters, the time-step is supplied by the user and remains fixed for all updates.
Definition at line 175 of file itkAnisotropicDiffusionFunction.h.
References m_TimeStep.
|
staticconstexpr |
Inherit some parameters from the superclass type
Definition at line 161 of file itkAnisotropicDiffusionFunction.h.
|
private |
Definition at line 254 of file itkAnisotropicDiffusionFunction.h.
Referenced by AnisotropicDiffusionFunction(), GetAverageGradientMagnitudeSquared(), and SetAverageGradientMagnitudeSquared().
|
private |
Definition at line 255 of file itkAnisotropicDiffusionFunction.h.
Referenced by AnisotropicDiffusionFunction(), GetConductanceParameter(), PrintSelf(), and SetConductanceParameter().
|
private |
Definition at line 256 of file itkAnisotropicDiffusionFunction.h.
Referenced by AnisotropicDiffusionFunction(), GetTimeStep(), PrintSelf(), and SetTimeStep().