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

Volume filtering (e.g., diffusion) with optional alpha masking. More...

#include <openvdb/tools/Filter.h>

Public Types

using GridType = GridT
 
using MaskType = MaskT
 
using TreeType = typename GridType::TreeType
 
using LeafType = typename TreeType::LeafNodeType
 
using ValueType = typename GridType::ValueType
 
using AlphaType = typename MaskType::ValueType
 
using LeafManagerType = typename tree::LeafManager< TreeType >
 
using RangeType = typename LeafManagerType::LeafRange
 
using BufferType = typename LeafManagerType::BufferType
 

Public Member Functions

 Filter (GridT &grid, InterruptT *interrupt=nullptr)
 
 Filter (const Filter &other)
 Shallow copy constructor called by tbb::parallel_for() threads during filtering. More...
 
int getGrainSize () const
 
void setGrainSize (int grainsize)
 Set the grain-size used for multi-threading. More...
 
bool getProcessTiles () const
 
void setProcessTiles (bool flag)
 Set whether active tiles should also be processed. 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 mean (int width=1, int iterations=1, const MaskType *mask=nullptr)
 One iteration of a fast separable mean-value (i.e. box) filter. More...
 
void gaussian (int width=1, int iterations=1, const MaskType *mask=nullptr)
 One iteration of a fast separable Gaussian filter. More...
 
void median (int width=1, int iterations=1, const MaskType *mask=nullptr)
 One iteration of a median-value filter. More...
 
void offset (ValueType offset, const MaskType *mask=nullptr)
 
void operator() (const RangeType &range) const
 Used internally by tbb::parallel_for() More...
 

Detailed Description

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

Volume filtering (e.g., diffusion) with optional alpha masking.

Member Typedef Documentation

using AlphaType = typename MaskType::ValueType
using BufferType = typename LeafManagerType::BufferType
using GridType = GridT
using LeafType = typename TreeType::LeafNodeType
using MaskType = MaskT
using RangeType = typename LeafManagerType::LeafRange
using TreeType = typename GridType::TreeType
using ValueType = typename GridType::ValueType

Constructor & Destructor Documentation

Filter ( GridT &  grid,
InterruptT *  interrupt = nullptr 
)
inline

Constructor

Parameters
gridGrid to be filtered.
interruptOptional interrupter.
Filter ( const Filter< GridT, MaskT, InterruptT > &  other)
inline

Shallow copy constructor called by tbb::parallel_for() threads during filtering.

Parameters
otherThe other Filter from which to copy.

Member Function Documentation

void gaussian ( int  width = 1,
int  iterations = 1,
const MaskType mask = nullptr 
)

One iteration of a fast separable Gaussian filter.

Note
This is approximated as 4 iterations of a separable mean filter which typically leads an approximation that's better than 95%!
Parameters
widthThe width of the mean-value filter is 2*width+1 voxels.
iterationsNumber of times the mean-value filter is applied.
maskOptional alpha mask.
int getGrainSize ( ) const
inline
Returns
the grain-size used for multi-threading
bool getProcessTiles ( ) const
inline
Returns
whether active tiles are being processed
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.

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,
int  iterations = 1,
const MaskType mask = nullptr 
)

One iteration of a fast separable mean-value (i.e. box) filter.

Parameters
widthThe width of the mean-value filter is 2*width+1 voxels.
iterationsNumber of times the mean-value filter is applied.
maskOptional alpha mask.
void median ( int  width = 1,
int  iterations = 1,
const MaskType mask = nullptr 
)

One iteration of a median-value filter.

Note
This filter is not separable and is hence relatively slow!
Parameters
widthThe width of the mean-value filter is 2*width+1 voxels.
iterationsNumber of times the mean-value filter is applied.
maskOptional alpha mask.
AlphaType minMask ( ) const
inline

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

void offset ( ValueType  offset,
const MaskType mask = nullptr 
)

Offsets (i.e. adds) a constant value to all active voxels.

Parameters
offsetOffset in the same units as the grid.
maskOptional alpha mask.
void operator() ( const RangeType range) const
inline

Used internally by tbb::parallel_for()

Parameters
rangeRange of LeafNodes over which to multi-thread.
Warning
Never call this method directly!
void setGrainSize ( int  grainsize)
inline

Set the grain-size used for multi-threading.

Note
A grain size 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 are clamped to zero or one, and values inside the range map smoothly to 0->1 (unless the mask is inverted).

Exceptions
ValueErrorif min is not smaller than max.
void setProcessTiles ( bool  flag)
inline

Set whether active tiles should also be processed.

Note
If true, some tiles may become voxelized
Warning
If using with a mask, ensure that the mask topology matches the tile topology of the filter grid as tiles will not respect overlapping mask values at tree levels finer than themselves e.g. a leaf level tile will only use the corresponding tile ijk value in the mask grid