Detailed Description

Fast marching solves an Eikonal equation where the speed is always non-negative and depends on the position only. Starting from an initial position on the front, fast marching systematically moves the front forward one node at a time.

Updates are preformed using an entropy satisfy scheme where only "upwind" neighborhoods are used. This implementation of Fast Marching uses a std::priority_queue to locate the next proper node to update.

Fast Marching sweeps through N points in (N log N) steps to obtain the arrival time value as the front propagates through the domain.

The initial front is specified by two containers:

one containing the known nodes (Alive Nodes: nodes that are already part of the object),

one containing the trial nodes (Trial Nodes: nodes that are considered for inclusion).

In order for the filter to evolve, at least some trial nodes must be specified. These can for instance be specified as the layer of nodes around the alive ones.

The algorithm is terminated early by setting an appropriate stopping criterion, or if there are no more nodes to process.

Essentially, one can constrain the propagating front(s) such that they either:

don't merge (using the "Strict" option)

don't create handles (using the "NoHandles" option)

Whereas the majority of related work uses the digital topological concept of "simple points" to constrain the evolving front, this filter uses the concept of "well-composedness". Advantages of the latter over the former includes being able to use the standard marching cubes algorithm to produce a mesh whose genus is identical to that of the evolved front(s).