VMTK
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
vtkvmtkNonManifoldFastMarching Class Reference

Implementation of the Fast Marching Method on polygonal non-manifolds. More...

#include <vtkvmtkNonManifoldFastMarching.h>

Inheritance diagram for vtkvmtkNonManifoldFastMarching:
[legend]
Collaboration diagram for vtkvmtkNonManifoldFastMarching:
[legend]

Public Types

typedef vtkPolyDataAlgorithm Superclass
 

Public Member Functions

virtual int IsA (const char *type)
 
vtkvmtkNonManifoldFastMarchingNewInstance () const
 
void PrintSelf (ostream &os, vtkIndent indent) VTK_OVERRIDE
 
virtual void SetStopTravelTime (double)
 
virtual double GetStopTravelTime ()
 
virtual void SetStopNumberOfPoints (int)
 
virtual int GetStopNumberOfPoints ()
 
virtual void SetRegularization (double)
 
virtual double GetRegularization ()
 
virtual void SetSeedsBoundaryConditions (int)
 
virtual int GetSeedsBoundaryConditions ()
 
virtual void SeedsBoundaryConditionsOn ()
 
virtual void SeedsBoundaryConditionsOff ()
 
virtual void SetPolyDataBoundaryConditions (int)
 
virtual int GetPolyDataBoundaryConditions ()
 
virtual void PolyDataBoundaryConditionsOn ()
 
virtual void PolyDataBoundaryConditionsOff ()
 
virtual void SetSeeds (vtkIdList *)
 
virtual vtkIdList * GetSeeds ()
 
virtual void SetBoundaryPolyData (vtkPolyData *)
 
virtual vtkPolyData * GetBoundaryPolyData ()
 
virtual void SetIntersectedEdgesArrayName (const char *)
 
virtual char * GetIntersectedEdgesArrayName ()
 
virtual void SetInitializeFromScalars (int)
 
virtual int GetInitializeFromScalars ()
 
virtual void InitializeFromScalarsOn ()
 
virtual void InitializeFromScalarsOff ()
 
virtual void SetInitializationArrayName (const char *)
 
virtual char * GetInitializationArrayName ()
 
virtual void SetUnitSpeed (int)
 
virtual int GetUnitSpeed ()
 
virtual void UnitSpeedOn ()
 
virtual void UnitSpeedOff ()
 
virtual void SetCostFunctionArrayName (const char *)
 
virtual char * GetCostFunctionArrayName ()
 
virtual void SetSolutionArrayName (const char *)
 
virtual char * GetSolutionArrayName ()
 

Static Public Member Functions

static int IsTypeOf (const char *type)
 
static vtkvmtkNonManifoldFastMarchingSafeDownCast (vtkObjectBase *o)
 
static vtkvmtkNonManifoldFastMarchingNew ()
 

Protected Member Functions

virtual vtkObjectBase * NewInstanceInternal () const
 
 vtkvmtkNonManifoldFastMarching ()
 
 ~vtkvmtkNonManifoldFastMarching ()
 
virtual int RequestData (vtkInformation *, vtkInformationVector **, vtkInformationVector *) VTK_OVERRIDE
 
void InitPropagation (vtkPolyData *input)
 
void SolveQuadratic (double a, double b, double c, char &nSol, double &x0, double &x1)
 
void GetNeighbors (vtkPolyData *input, vtkIdType pointId, vtkIdList *neighborIds)
 
double ComputeUpdateFromCellNeighbor (vtkPolyData *input, vtkIdType neighborId, vtkIdType *trianglePts)
 
void UpdateNeighbor (vtkPolyData *input, vtkIdType neighborId)
 
void UpdateNeighborhood (vtkPolyData *input, vtkIdType pointId)
 
void Propagate (vtkPolyData *input)
 

Static Protected Member Functions

static double Max (double a, double b)
 
static double Min (double a, double b)
 

Protected Attributes

vtkDoubleArray * TScalars
 
vtkCharArray * StatusScalars
 
vtkvmtkMinHeapConsideredMinHeap
 
vtkIdList * Seeds
 
vtkPolyData * BoundaryPolyData
 
double Regularization
 
double StopTravelTime
 
vtkIdType StopNumberOfPoints
 
int UnitSpeed
 
int InitializeFromScalars
 
char * IntersectedEdgesArrayName
 
char * InitializationArrayName
 
char * SolutionArrayName
 
char * CostFunctionArrayName
 
int SeedsBoundaryConditions
 
int PolyDataBoundaryConditions
 
vtkIdType NumberOfAcceptedPoints
 
int AllowLineUpdate
 
int UpdateFromConsidered
 

Detailed Description

Implementation of the Fast Marching Method on polygonal non-manifolds.

Date
2006/04/06 16:46:43
Revision
1.5

This class is used to solve the Eikonal equation

\[|\nabla T(\mathbf{x})| = F(\mathbf{x})\]

on non-manifolds made of convex polygons, using the Fast Marching Method, by J.A. Sethian (see below). The solution to the Eikonal equation represents the arrival times of a wave propagating on a domain with speed $F^{-1}(\mathbf{x})$ from given seed points (or regions). If F(x)=1, T(x) represents the geodesic distance field to the seed points (Note: F(x) can be equivalently interpreted as a cost function). The Fast Marching Method takes O(N logN). For more insight see J.A. Sethian, Level Set Methods and Fast Marching Methods, Cambridge University Press, 2nd Edition, 1999.

The implementation given in this class is an extension of the Fast Marching Method for triangulated 2-manifolds proposed by Kimmel et al. (R. Kimmel and J.A. Sethian. Computing geodesic paths on manifolds. PNAS, 95(15): 8431-8435, Jul 1998.) to non-manifolds made of convex polygons, such as the Voronoi diagram.

The propagation starts from a set of seeds. By default the seed points are given a propagation time of 0.0, but activating InitializeFromScalars and providing the point data array of name InitializationArrayName, it is possible to assign nonzero initialization times (this is useful when the zero propagation time point lies inside a cell). For the specification of F(x), the user must either provide a point data array of name CostFunctionArrayName, or activate UnitSpeed, which sets F(x)=1 everywhere, thus yielding a geodesic distance field. The propagation stops when all the points in the domain path-connected to the seeds have been visited. Alternatively it is possible to limit the propagation by setting StopTravelTime or StopNumberOfPoints. The solution is stored in a point data array of name SolutionArrayName (name provided by the user, "EikonalSolution" by default).

The Regularization value adds a constant term to F(x), which acts as a regularization term for the minimal cost paths (see L.D. Cohen and R. Kimmel. Global minimum of active contour models: a minimal path approach. IJCV, 24(1): 57-78, Aug 1997).

See also
vtkVoronoiDiagram3D vtkMinHeap

Definition at line 56 of file vtkvmtkNonManifoldFastMarching.h.

Member Typedef Documentation

◆ Superclass

typedef vtkPolyDataAlgorithm vtkvmtkNonManifoldFastMarching::Superclass

Definition at line 59 of file vtkvmtkNonManifoldFastMarching.h.

Constructor & Destructor Documentation

◆ vtkvmtkNonManifoldFastMarching()

vtkvmtkNonManifoldFastMarching::vtkvmtkNonManifoldFastMarching ( )
protected

◆ ~vtkvmtkNonManifoldFastMarching()

vtkvmtkNonManifoldFastMarching::~vtkvmtkNonManifoldFastMarching ( )
protected

Member Function Documentation

◆ IsTypeOf()

static int vtkvmtkNonManifoldFastMarching::IsTypeOf ( const char *  type)
static

◆ IsA()

virtual int vtkvmtkNonManifoldFastMarching::IsA ( const char *  type)
virtual

◆ SafeDownCast()

static vtkvmtkNonManifoldFastMarching* vtkvmtkNonManifoldFastMarching::SafeDownCast ( vtkObjectBase *  o)
static

◆ NewInstanceInternal()

virtual vtkObjectBase* vtkvmtkNonManifoldFastMarching::NewInstanceInternal ( ) const
protectedvirtual

◆ NewInstance()

vtkvmtkNonManifoldFastMarching* vtkvmtkNonManifoldFastMarching::NewInstance ( ) const

◆ PrintSelf()

void vtkvmtkNonManifoldFastMarching::PrintSelf ( ostream &  os,
vtkIndent  indent 
)

◆ New()

static vtkvmtkNonManifoldFastMarching* vtkvmtkNonManifoldFastMarching::New ( )
static

◆ SetStopTravelTime()

virtual void vtkvmtkNonManifoldFastMarching::SetStopTravelTime ( double  )
virtual

Set/Get maximum travel time for travel time-based stop criterion.

◆ GetStopTravelTime()

virtual double vtkvmtkNonManifoldFastMarching::GetStopTravelTime ( )
virtual

Set/Get maximum travel time for travel time-based stop criterion.

◆ SetStopNumberOfPoints()

virtual void vtkvmtkNonManifoldFastMarching::SetStopNumberOfPoints ( int  )
virtual

Set/Get maximum number of visited points for number of visited points-based stop criterion.

◆ GetStopNumberOfPoints()

virtual int vtkvmtkNonManifoldFastMarching::GetStopNumberOfPoints ( )
virtual

Set/Get maximum number of visited points for number of visited points-based stop criterion.

◆ SetRegularization()

virtual void vtkvmtkNonManifoldFastMarching::SetRegularization ( double  )
virtual

Set/Get minimal cost path regularization amount.

◆ GetRegularization()

virtual double vtkvmtkNonManifoldFastMarching::GetRegularization ( )
virtual

Set/Get minimal cost path regularization amount.

◆ SetSeedsBoundaryConditions()

virtual void vtkvmtkNonManifoldFastMarching::SetSeedsBoundaryConditions ( int  )
virtual

Toggle on/off boundary conditions expressed as a list of seeds.

◆ GetSeedsBoundaryConditions()

virtual int vtkvmtkNonManifoldFastMarching::GetSeedsBoundaryConditions ( )
virtual

Toggle on/off boundary conditions expressed as a list of seeds.

◆ SeedsBoundaryConditionsOn()

virtual void vtkvmtkNonManifoldFastMarching::SeedsBoundaryConditionsOn ( )
virtual

Toggle on/off boundary conditions expressed as a list of seeds.

◆ SeedsBoundaryConditionsOff()

virtual void vtkvmtkNonManifoldFastMarching::SeedsBoundaryConditionsOff ( )
virtual

Toggle on/off boundary conditions expressed as a list of seeds.

◆ SetPolyDataBoundaryConditions()

virtual void vtkvmtkNonManifoldFastMarching::SetPolyDataBoundaryConditions ( int  )
virtual

Toggle on/off boundary conditions expressed as poly data.

◆ GetPolyDataBoundaryConditions()

virtual int vtkvmtkNonManifoldFastMarching::GetPolyDataBoundaryConditions ( )
virtual

Toggle on/off boundary conditions expressed as poly data.

◆ PolyDataBoundaryConditionsOn()

virtual void vtkvmtkNonManifoldFastMarching::PolyDataBoundaryConditionsOn ( )
virtual

Toggle on/off boundary conditions expressed as poly data.

◆ PolyDataBoundaryConditionsOff()

virtual void vtkvmtkNonManifoldFastMarching::PolyDataBoundaryConditionsOff ( )
virtual

Toggle on/off boundary conditions expressed as poly data.

◆ SetSeeds()

virtual void vtkvmtkNonManifoldFastMarching::SetSeeds ( vtkIdList *  )
virtual

Set/Get seeds were boundary conditions are specified.

◆ GetSeeds()

virtual vtkIdList* vtkvmtkNonManifoldFastMarching::GetSeeds ( )
virtual

Set/Get seeds were boundary conditions are specified.

◆ SetBoundaryPolyData()

virtual void vtkvmtkNonManifoldFastMarching::SetBoundaryPolyData ( vtkPolyData *  )
virtual

Set/Get poly data were boundary conditions are specified.

◆ GetBoundaryPolyData()

virtual vtkPolyData* vtkvmtkNonManifoldFastMarching::GetBoundaryPolyData ( )
virtual

Set/Get poly data were boundary conditions are specified.

◆ SetIntersectedEdgesArrayName()

virtual void vtkvmtkNonManifoldFastMarching::SetIntersectedEdgesArrayName ( const char *  )
virtual

Set/Get the name of the 2-component point data array of boundary poly data where point ids of edges of the input intersected by boundary poly data are stored.

◆ GetIntersectedEdgesArrayName()

virtual char* vtkvmtkNonManifoldFastMarching::GetIntersectedEdgesArrayName ( )
virtual

Set/Get the name of the 2-component point data array of boundary poly data where point ids of edges of the input intersected by boundary poly data are stored.

◆ SetInitializeFromScalars()

virtual void vtkvmtkNonManifoldFastMarching::SetInitializeFromScalars ( int  )
virtual

Toggle on/off using point data array of name InitializationArrayName for the solution value of seed points. If off, a value of 0.0 is used for all seeds.

◆ GetInitializeFromScalars()

virtual int vtkvmtkNonManifoldFastMarching::GetInitializeFromScalars ( )
virtual

Toggle on/off using point data array of name InitializationArrayName for the solution value of seed points. If off, a value of 0.0 is used for all seeds.

◆ InitializeFromScalarsOn()

virtual void vtkvmtkNonManifoldFastMarching::InitializeFromScalarsOn ( )
virtual

Toggle on/off using point data array of name InitializationArrayName for the solution value of seed points. If off, a value of 0.0 is used for all seeds.

◆ InitializeFromScalarsOff()

virtual void vtkvmtkNonManifoldFastMarching::InitializeFromScalarsOff ( )
virtual

Toggle on/off using point data array of name InitializationArrayName for the solution value of seed points. If off, a value of 0.0 is used for all seeds.

◆ SetInitializationArrayName()

virtual void vtkvmtkNonManifoldFastMarching::SetInitializationArrayName ( const char *  )
virtual

Set/Get the name of point data InitializationArray

◆ GetInitializationArrayName()

virtual char* vtkvmtkNonManifoldFastMarching::GetInitializationArrayName ( )
virtual

Set/Get the name of point data InitializationArray

◆ SetUnitSpeed()

virtual void vtkvmtkNonManifoldFastMarching::SetUnitSpeed ( int  )
virtual

Toggle on/off using a unit speed field over the whole domain (used to obtain geodesic distances). If off, a CostFunctionArray must be provided.

◆ GetUnitSpeed()

virtual int vtkvmtkNonManifoldFastMarching::GetUnitSpeed ( )
virtual

Toggle on/off using a unit speed field over the whole domain (used to obtain geodesic distances). If off, a CostFunctionArray must be provided.

◆ UnitSpeedOn()

virtual void vtkvmtkNonManifoldFastMarching::UnitSpeedOn ( )
virtual

Toggle on/off using a unit speed field over the whole domain (used to obtain geodesic distances). If off, a CostFunctionArray must be provided.

◆ UnitSpeedOff()

virtual void vtkvmtkNonManifoldFastMarching::UnitSpeedOff ( )
virtual

Toggle on/off using a unit speed field over the whole domain (used to obtain geodesic distances). If off, a CostFunctionArray must be provided.

◆ SetCostFunctionArrayName()

virtual void vtkvmtkNonManifoldFastMarching::SetCostFunctionArrayName ( const char *  )
virtual

Set/Get the name of point data CostFunctionArray

◆ GetCostFunctionArrayName()

virtual char* vtkvmtkNonManifoldFastMarching::GetCostFunctionArrayName ( )
virtual

Set/Get the name of point data CostFunctionArray

◆ SetSolutionArrayName()

virtual void vtkvmtkNonManifoldFastMarching::SetSolutionArrayName ( const char *  )
virtual

Set/Get the name of point data SolutionArray

◆ GetSolutionArrayName()

virtual char* vtkvmtkNonManifoldFastMarching::GetSolutionArrayName ( )
virtual

Set/Get the name of point data SolutionArray

◆ RequestData()

virtual int vtkvmtkNonManifoldFastMarching::RequestData ( vtkInformation *  ,
vtkInformationVector **  ,
vtkInformationVector *   
)
protectedvirtual

◆ InitPropagation()

void vtkvmtkNonManifoldFastMarching::InitPropagation ( vtkPolyData *  input)
protected

◆ SolveQuadratic()

void vtkvmtkNonManifoldFastMarching::SolveQuadratic ( double  a,
double  b,
double  c,
char &  nSol,
double &  x0,
double &  x1 
)
protected

◆ GetNeighbors()

void vtkvmtkNonManifoldFastMarching::GetNeighbors ( vtkPolyData *  input,
vtkIdType  pointId,
vtkIdList *  neighborIds 
)
protected

◆ ComputeUpdateFromCellNeighbor()

double vtkvmtkNonManifoldFastMarching::ComputeUpdateFromCellNeighbor ( vtkPolyData *  input,
vtkIdType  neighborId,
vtkIdType *  trianglePts 
)
protected

◆ UpdateNeighbor()

void vtkvmtkNonManifoldFastMarching::UpdateNeighbor ( vtkPolyData *  input,
vtkIdType  neighborId 
)
protected

◆ UpdateNeighborhood()

void vtkvmtkNonManifoldFastMarching::UpdateNeighborhood ( vtkPolyData *  input,
vtkIdType  pointId 
)
protected

◆ Propagate()

void vtkvmtkNonManifoldFastMarching::Propagate ( vtkPolyData *  input)
protected

◆ Max()

static double vtkvmtkNonManifoldFastMarching::Max ( double  a,
double  b 
)
inlinestaticprotected

Definition at line 169 of file vtkvmtkNonManifoldFastMarching.h.

170  { return a-b > VTK_VMTK_DOUBLE_TOL ? a : b; }
#define VTK_VMTK_DOUBLE_TOL

◆ Min()

static double vtkvmtkNonManifoldFastMarching::Min ( double  a,
double  b 
)
inlinestaticprotected

Definition at line 172 of file vtkvmtkNonManifoldFastMarching.h.

173  { return a-b < - VTK_VMTK_DOUBLE_TOL ? a : b; }
#define VTK_VMTK_DOUBLE_TOL

Member Data Documentation

◆ TScalars

vtkDoubleArray* vtkvmtkNonManifoldFastMarching::TScalars
protected

Definition at line 175 of file vtkvmtkNonManifoldFastMarching.h.

◆ StatusScalars

vtkCharArray* vtkvmtkNonManifoldFastMarching::StatusScalars
protected

Definition at line 176 of file vtkvmtkNonManifoldFastMarching.h.

◆ ConsideredMinHeap

vtkvmtkMinHeap* vtkvmtkNonManifoldFastMarching::ConsideredMinHeap
protected

Definition at line 177 of file vtkvmtkNonManifoldFastMarching.h.

◆ Seeds

vtkIdList* vtkvmtkNonManifoldFastMarching::Seeds
protected

Definition at line 179 of file vtkvmtkNonManifoldFastMarching.h.

◆ BoundaryPolyData

vtkPolyData* vtkvmtkNonManifoldFastMarching::BoundaryPolyData
protected

Definition at line 180 of file vtkvmtkNonManifoldFastMarching.h.

◆ Regularization

double vtkvmtkNonManifoldFastMarching::Regularization
protected

Definition at line 182 of file vtkvmtkNonManifoldFastMarching.h.

◆ StopTravelTime

double vtkvmtkNonManifoldFastMarching::StopTravelTime
protected

Definition at line 183 of file vtkvmtkNonManifoldFastMarching.h.

◆ StopNumberOfPoints

vtkIdType vtkvmtkNonManifoldFastMarching::StopNumberOfPoints
protected

Definition at line 184 of file vtkvmtkNonManifoldFastMarching.h.

◆ UnitSpeed

int vtkvmtkNonManifoldFastMarching::UnitSpeed
protected

Definition at line 185 of file vtkvmtkNonManifoldFastMarching.h.

◆ InitializeFromScalars

int vtkvmtkNonManifoldFastMarching::InitializeFromScalars
protected

Definition at line 186 of file vtkvmtkNonManifoldFastMarching.h.

◆ IntersectedEdgesArrayName

char* vtkvmtkNonManifoldFastMarching::IntersectedEdgesArrayName
protected

Definition at line 187 of file vtkvmtkNonManifoldFastMarching.h.

◆ InitializationArrayName

char* vtkvmtkNonManifoldFastMarching::InitializationArrayName
protected

Definition at line 188 of file vtkvmtkNonManifoldFastMarching.h.

◆ SolutionArrayName

char* vtkvmtkNonManifoldFastMarching::SolutionArrayName
protected

Definition at line 189 of file vtkvmtkNonManifoldFastMarching.h.

◆ CostFunctionArrayName

char* vtkvmtkNonManifoldFastMarching::CostFunctionArrayName
protected

Definition at line 190 of file vtkvmtkNonManifoldFastMarching.h.

◆ SeedsBoundaryConditions

int vtkvmtkNonManifoldFastMarching::SeedsBoundaryConditions
protected

Definition at line 192 of file vtkvmtkNonManifoldFastMarching.h.

◆ PolyDataBoundaryConditions

int vtkvmtkNonManifoldFastMarching::PolyDataBoundaryConditions
protected

Definition at line 193 of file vtkvmtkNonManifoldFastMarching.h.

◆ NumberOfAcceptedPoints

vtkIdType vtkvmtkNonManifoldFastMarching::NumberOfAcceptedPoints
protected

Definition at line 195 of file vtkvmtkNonManifoldFastMarching.h.

◆ AllowLineUpdate

int vtkvmtkNonManifoldFastMarching::AllowLineUpdate
protected

Definition at line 197 of file vtkvmtkNonManifoldFastMarching.h.

◆ UpdateFromConsidered

int vtkvmtkNonManifoldFastMarching::UpdateFromConsidered
protected

Definition at line 198 of file vtkvmtkNonManifoldFastMarching.h.


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