OpenVDB  9.0.1
Classes | Public Types | Public Member Functions | List of all members
LevelSetFilter< GridT, MaskT, InterruptT > Class Template Reference

Filtering (e.g. diffusion) of narrow-band level sets. An optional scalar field can be used to produce a (smooth) alpha mask for the filtering. More...

#include <openvdb/tools/LevelSetFilter.h>

Inherits LevelSetTracker< GridT, InterruptT >.

Public Types

using BaseType = LevelSetTracker< GridT, InterruptT >
 
using GridType = GridT
 
using MaskType = MaskT
 
using TreeType = typename GridType::TreeType
 
using ValueType = typename TreeType::ValueType
 
using AlphaType = typename MaskType::ValueType
 
using TrimMode = lstrack::TrimMode
 
using LeafType = typename TreeType::LeafNodeType
 
using LeafManagerType = typename tree::LeafManager< TreeType >
 
using LeafRange = typename LeafManagerType::LeafRange
 
using BufferType = typename LeafManagerType::BufferType
 
using MaskTreeType = typename TreeType::template ValueConverter< ValueMask >::Type
 

Public Member Functions

 LevelSetFilter (GridType &grid, InterruptT *interrupt=nullptr)
 Main constructor from a grid. More...
 
 ~LevelSetFilter () override
 Default destructor. More...
 
AlphaType minMask () const
 Return the minimum value of the mask to be used for the derivation of a smooth alpha value. More...
 
AlphaType maxMask () const
 Return the maximum value of the mask to be used for the derivation of a smooth alpha value. More...
 
void setMaskRange (AlphaType min, AlphaType max)
 Define the range for the (optional) scalar mask. More...
 
bool isMaskInverted () const
 Return true if the mask is inverted, i.e. min->max in the original mask maps to 1->0 in the inverted alpha mask. More...
 
void invertMask (bool invert=true)
 Invert the optional mask, i.e. min->max in the original mask maps to 1->0 in the inverted alpha mask. More...
 
void meanCurvature (const MaskType *mask=nullptr)
 One iteration of mean-curvature flow of the level set. More...
 
void laplacian (const MaskType *mask=nullptr)
 One iteration of Laplacian flow of the level set. More...
 
void gaussian (int width=1, const MaskType *mask=nullptr)
 One iteration of a fast separable Gaussian filter. More...
 
void offset (ValueType offset, const MaskType *mask=nullptr)
 Offset the level set by the specified (world) distance. More...
 
void median (int width=1, const MaskType *mask=nullptr)
 One iteration of median-value flow of the level set. More...
 
void mean (int width=1, const MaskType *mask=nullptr)
 One iteration of mean-value flow of the level set. More...
 
template<typename MaskType >
void normalize (const MaskType *mask)
 Iterative normalization, i.e. solving the Eikonal equation. More...
 
void normalize ()
 Iterative normalization, i.e. solving the Eikonal equation. More...
 
template<typename MaskT >
void normalize (const MaskT *mask)
 
void track ()
 Track the level set interface, i.e. rebuild and normalize the narrow band of the level set. More...
 
void prune ()
 Set voxels that are outside the narrow band to the background value (if trimming is enabled) and prune the grid. More...
 
void dilate (int iterations=1)
 Fast but approximate dilation of the narrow band - one layer at a time. Normally we recommend using the resize method below which internally calls dilate (or erode) with the correct number of iterations to achieve the desired half voxel width of the narrow band (3 is recommended for most level set applications). More...
 
void erode (int iterations=1)
 Erodes the width of the narrow-band and update the background values. More...
 
bool resize (Index halfWidth=static_cast< Index >(LEVEL_SET_HALF_WIDTH))
 Resize the width of the narrow band, i.e. perform dilation and renormalization or erosion as required. More...
 
ValueType getHalfWidth () const
 Return the half width of the narrow band in floating-point voxel units. More...
 
State getState () const
 Return the state of the tracker (see struct defined above) More...
 
void setState (const State &s)
 Set the state of the tracker (see struct defined above) More...
 
math::BiasedGradientScheme getSpatialScheme () const
 
void setSpatialScheme (math::BiasedGradientScheme s)
 Set the spatial finite difference scheme. More...
 
math::TemporalIntegrationScheme getTemporalScheme () const
 
void setTemporalScheme (math::TemporalIntegrationScheme s)
 Set the spatial finite difference scheme. More...
 
int getNormCount () const
 
void setNormCount (int n)
 Set the number of normalizations performed per track or normalize call. More...
 
int getGrainSize () const
 
void setGrainSize (int grainsize)
 Set the grain-size used for multi-threading. More...
 
TrimMode trimming () const
 Return the trimming mode for voxels outside the narrow band. More...
 
void setTrimming (TrimMode mode)
 Specify whether to trim voxels outside the narrow band prior to pruning. More...
 
ValueType voxelSize () const
 
void startInterrupter (const char *msg)
 
void endInterrupter ()
 
bool checkInterrupter ()
 
const GridTypegrid () const
 
LeafManagerTypeleafs ()
 
const LeafManagerTypeleafs () const
 

Detailed Description

template<typename GridT, typename MaskT = typename GridT::template ValueConverter<float>::Type, typename InterruptT = util::NullInterrupter>
class openvdb::v9_0::tools::LevelSetFilter< GridT, MaskT, InterruptT >

Filtering (e.g. diffusion) of narrow-band level sets. An optional scalar field can be used to produce a (smooth) alpha mask for the filtering.

Note
This class performs proper interface tracking which allows for unrestricted surface deformations

Member Typedef Documentation

using AlphaType = typename MaskType::ValueType
using BaseType = LevelSetTracker<GridT, InterruptT>
using BufferType = typename LeafManagerType::BufferType
inherited
using GridType = GridT
using LeafManagerType = typename tree::LeafManager<TreeType>
inherited
using LeafRange = typename LeafManagerType::LeafRange
inherited
using LeafType = typename TreeType::LeafNodeType
inherited
using MaskTreeType = typename TreeType::template ValueConverter<ValueMask>::Type
inherited
using MaskType = MaskT
using TreeType = typename GridType::TreeType
using TrimMode = lstrack::TrimMode
inherited
using ValueType = typename TreeType::ValueType

Constructor & Destructor Documentation

LevelSetFilter ( GridType grid,
InterruptT *  interrupt = nullptr 
)
inline

Main constructor from a grid.

Parameters
gridThe level set to be filtered.
interruptOptional interrupter.
~LevelSetFilter ( )
inlineoverride

Default destructor.

Member Function Documentation

bool checkInterrupter ( )
inlineinherited
Returns
false if the process was interrupted
void dilate ( int  iterations = 1)
inherited

Fast but approximate dilation of the narrow band - one layer at a time. Normally we recommend using the resize method below which internally calls dilate (or erode) with the correct number of iterations to achieve the desired half voxel width of the narrow band (3 is recommended for most level set applications).

Note
Since many level set applications perform interface-tracking, which in turn rebuilds the narrow-band accurately, this dilate method can often be used with a single iterations of low-order re-normalization. This effectively allows very narrow bands to be created from points or polygons (e.g. with a half voxel width of 1), followed by a fast but approximate dilation (typically with a half voxel width of 3). This can be significantly faster than generating the final width of the narrow band from points or polygons.
void endInterrupter ( )
inlineinherited
void erode ( int  iterations = 1)
inherited

Erodes the width of the narrow-band and update the background values.

Exceptions
ValueErrorif iterations is larger than the current half-width.
void gaussian ( int  width = 1,
const MaskType mask = nullptr 
)
inline

One iteration of a fast separable Gaussian filter.

Parameters
widthWidth of the Gaussian kernel in voxel units.
maskOptional alpha mask.
Note
This is approximated as 4 iterations of a separable mean filter which typically leads an approximation that's better than 95%!
int getGrainSize ( ) const
inlineinherited
Returns
the grain-size used for multi-threading
ValueType getHalfWidth ( ) const
inlineinherited

Return the half width of the narrow band in floating-point voxel units.

int getNormCount ( ) const
inlineinherited
Returns
The number of normalizations performed per track or normalize call.
math::BiasedGradientScheme getSpatialScheme ( ) const
inlineinherited
Returns
the spatial finite difference scheme
State getState ( ) const
inlineinherited

Return the state of the tracker (see struct defined above)

math::TemporalIntegrationScheme getTemporalScheme ( ) const
inlineinherited
Returns
the temporal integration scheme
const GridType& grid ( ) const
inlineinherited
void invertMask ( bool  invert = true)
inline

Invert the optional mask, i.e. min->max in the original mask maps to 1->0 in the inverted alpha mask.

bool isMaskInverted ( ) const
inline

Return true if the mask is inverted, i.e. min->max in the original mask maps to 1->0 in the inverted alpha mask.

void laplacian ( const MaskType mask = nullptr)
inline

One iteration of Laplacian flow of the level set.

Parameters
maskOptional alpha mask.
LeafManagerType& leafs ( )
inlineinherited
const LeafManagerType& leafs ( ) const
inlineinherited
AlphaType maxMask ( ) const
inline

Return the maximum value of the mask to be used for the derivation of a smooth alpha value.

void mean ( int  width = 1,
const MaskType mask = nullptr 
)
inline

One iteration of mean-value flow of the level set.

Parameters
widthWidth of the mean-value kernel in voxel units.
maskOptional alpha mask.
Note
This filter is separable so it's fast!
void meanCurvature ( const MaskType mask = nullptr)
inline

One iteration of mean-curvature flow of the level set.

Parameters
maskOptional alpha mask.
void median ( int  width = 1,
const MaskType mask = nullptr 
)
inline

One iteration of median-value flow of the level set.

Parameters
widthWidth of the median-value kernel in voxel units.
maskOptional alpha mask.
Warning
This filter is not separable and is hence relatively slow!
AlphaType minMask ( ) const
inline

Return the minimum value of the mask to be used for the derivation of a smooth alpha value.

void normalize ( const MaskType *  mask)
inherited

Iterative normalization, i.e. solving the Eikonal equation.

Note
The mask it optional and by default it is ignored.
void normalize ( )
inlineinherited

Iterative normalization, i.e. solving the Eikonal equation.

void normalize ( const MaskT *  mask)
inherited
void offset ( ValueType  offset,
const MaskType mask = nullptr 
)
inline

Offset the level set by the specified (world) distance.

Parameters
offsetValue of the offset.
maskOptional alpha mask.
void prune ( )
inherited

Set voxels that are outside the narrow band to the background value (if trimming is enabled) and prune the grid.

Pruning is done automatically as a step in tracking.

See also
setTrimming, trimming
bool resize ( Index  halfWidth = static_cast<Index>(LEVEL_SET_HALF_WIDTH))
inherited

Resize the width of the narrow band, i.e. perform dilation and renormalization or erosion as required.

void setGrainSize ( int  grainsize)
inlineinherited

Set the grain-size used for multi-threading.

Note
A grainsize of 0 or less disables multi-threading!
void setMaskRange ( AlphaType  min,
AlphaType  max 
)
inline

Define the range for the (optional) scalar mask.

Parameters
minMinimum value of the range.
maxMaximum value of the range.

Mask values outside the range maps to alpha values of respectfully zero and one, and values inside the range maps smoothly to 0->1 (unless of course the mask is inverted).

Exceptions
ValueErrorif min is not smaller than max.
void setNormCount ( int  n)
inlineinherited

Set the number of normalizations performed per track or normalize call.

void setSpatialScheme ( math::BiasedGradientScheme  s)
inlineinherited

Set the spatial finite difference scheme.

void setState ( const State s)
inlineinherited

Set the state of the tracker (see struct defined above)

void setTemporalScheme ( math::TemporalIntegrationScheme  s)
inlineinherited

Set the spatial finite difference scheme.

void setTrimming ( TrimMode  mode)
inlineinherited

Specify whether to trim voxels outside the narrow band prior to pruning.

See also
trimming, prune
void startInterrupter ( const char *  msg)
inlineinherited
void track ( )
inherited

Track the level set interface, i.e. rebuild and normalize the narrow band of the level set.

TrimMode trimming ( ) const
inlineinherited

Return the trimming mode for voxels outside the narrow band.

Trimming is enabled by default and is applied automatically prior to pruning.

See also
setTrimming, prune
ValueType voxelSize ( ) const
inlineinherited