i3dlib

Documentation

i3d::PDESolverFunction< VOXEL > Class Template Reference

This class is together with class PDESolver the root abstract class for wide family of classes which implements segmentation methods and image preprocessing filters. All these offsprings of this base class have one common feature. The key idea of those methods or filters is described by partial differential equation, which is evolving in time. This class serves to compute the difference between two timesteps. More...

#include <LevelSet.h>

Inheritance diagram for i3d::PDESolverFunction< VOXEL >:

i3d::ExplicitSchemeFunction< VOXEL > i3d::GradientMagnitudeEstimator< VOXEL > i3d::MCDEFilterFunction< VOXEL > i3d::MCFFilterFunction< VOXEL > i3d::PMFilterFunction< VOXEL > i3d::SpatialDerivatives< VOXEL > List of all members.

Public Member Functions

virtual void ComputeUpdateData ()
 This function computes the $\tau F$ part of the PDE equation, if fills the buffer with the update.
VOXEL GetGlobalTimeStep ()
 Returns the global time step which was computed by ComputeUpdateData function().
void SetGlobalTimeStep (VOXEL ts)
 Set the fixed global time step.
void SetSpeedImage (Image3d< VOXEL > *data)
 Set the Speed image. This image is used in some Level set methods.
virtual void SetSpacing (float x, float y, float z)
 Set Spacing between voxels.
virtual void SetSpacing (Vector3d< float > vec)
 Set Spacing between voxels.
Vector3d< float > GetSpacing ()
 Get Spacing between voxels.
void GetSpacing (float *x, float *y, float *z)
 Get Spacing between voxels.
void SetEpsilon (VOXEL e)
 Set the epsilon parametr. If is greater than zero the curvature part of some Level Set methods will be take into the account in the computations.
VOXEL GetEpsilon ()
 Get the epsilon parametr. If is greater than zero the curvature part of some Level Set methods will be take into the account in the computations.

Protected Attributes

VOXEL GlobalTimeStep
 Global time step.
Image3d< VOXEL > & Data
 Reference to the Data image (to the changing solution of the equation).
valarray< VOXEL > & DataArray
 Reference to the Data image valarray (to the changing solution of the equation).
Image3d< VOXEL > * SpeedImage
 Pointer to Speed image (it is needed to some Level Set methods).
Vector3d< float > Spacing
 Spacing of the LevelSet lattice.
size_t Dimensions
 Number of dimensions (2 or 3).
bool FixedTimeStep
 True, if the time step should be fixed during the computation.

Detailed Description

template<class VOXEL>
class i3d::PDESolverFunction< VOXEL >

This class is together with class PDESolver the root abstract class for wide family of classes which implements segmentation methods and image preprocessing filters. All these offsprings of this base class have one common feature. The key idea of those methods or filters is described by partial differential equation, which is evolving in time. This class serves to compute the difference between two timesteps.

The partial differential equation, which is the core off all offsprings of PDESolver class, has following "general form":

\[ u_t = F(u_x,u_y,u_z,u_{xx},u_{yy},u_{zz},u_{xxx},...), \]

where F is some function of spatial derivatives. The temporal derivation can be for example discretised by the forward Euler operator.

\[ \frac{u^{n+1}- u^{n}}{\tau} = F(u_x,u_y,u_z,u_{xx},u_{yy},u_{zz},u_{xxx},...), \]

This leads to following explicit scheme:

\[ u^{n+1} = u^{n} + \tau F(u_x,u_y,u_z,u_{xx},u_{yy},u_{zz},u_{xxx},...), \]

From this follows, that we have some initial state (input image, initial state of the segmentation, etc. ) we iteratively modify this state (we compute the filter on the image, we try to find correct segmentation) and after some time we find the solution of the equation.

Class PDESolverFunction computes only the $ F(u_x,u_y,u_z,u_{xx},u_{yy},u_{zz},u_{xxx},...) $ part of the equation. Due to the limitations of the numerical schema (time step requirements, neighbourhood computations, etc.) it is convenient to compute the update ($ \tau F $ part) to independent buffer and after the computation add the buffer to the solution. Therefore all offsprings of this class have some buffer structure (which can differ) and all implement the ComputeUpdateData() method, which updates this buffer every time step. There is no need to instantiate a "Function" object (i. e. PDESolverFunction class) from the user point of view. The user should only instantiate some offspring of PDESolver class. The "Function" object is instantiated automatically by the "Solver" object.

See also following schema and the documentation of PDESolver class.

diag.png

Diagram of Data and Control flow between Solver object (PDESolver offspring) and Function Object (PDESolverFunction offsprint)

Author:
Jan Hubený xhubeny@fi.muni.cz
Date:
2005


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