Mathematical morphology


Detailed Description

Todo:
Improve documentation


Classes

struct  i3d::minimum< T >
struct  i3d::maximum< T >
class  i3d::less_than< T >
class  i3d::greater_than< T >

Functions

template<class T>
void i3d::Dilation (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::LocalDilation (const Image3d< T > &in, Image3d< T > &out, const Image3d< BINARY > &mask, const Neighbourhood &neib)
template<class T>
void i3d::Erosion (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::LocalErosion (const Image3d< T > &in, Image3d< T > &out, const Image3d< BINARY > &mask, const Neighbourhood &neib)
template<class T>
void i3d::Closing (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::LocalClosing (const Image3d< T > &in, Image3d< T > &out, const Image3d< BINARY > &mask, const Neighbourhood &neib)
template<class T>
void i3d::Closing (Image3d< T > &in, const Neighbourhood &neib)
template<class T>
void i3d::Opening (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &neigh)
template<class T>
void i3d::LocalOpening (const Image3d< T > &in, Image3d< T > &out, const Image3d< BINARY > &mask, const Neighbourhood &neib)
template<class T>
void i3d::Opening (Image3d< T > &in, const Neighbourhood &neib)
template<class T>
void i3d::WhiteTopHat (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::BlackTopHat (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::TopHat (Image3d< T > &in, const Neighbourhood &neib)
template<class T>
void i3d::HitOrMiss (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &b, const Neighbourhood &w)
template<class T>
void i3d::Thinning (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &b, const Neighbourhood &w)
template<class T>
void i3d::Thicking (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &b, const Neighbourhood &w)
template<class T>
I3D_DLLEXPORT void i3d::DilationO (const Image3d< T > &in, Image3d< T > &out, const int radius_size)
template<class T>
I3D_DLLEXPORT void i3d::ErosionO (const Image3d< T > &in, Image3d< T > &out, const int radius_size)
template<class T>
I3D_DLLEXPORT void i3d::ClosingO (const Image3d< T > &in, Image3d< T > &out, const int radius_size)
template<class T>
I3D_DLLEXPORT void i3d::OpeningO (const Image3d< T > &in, Image3d< T > &out, const int radius_size)
template<class T>
I3D_DLLEXPORT void i3d::WhiteTopHatO (const Image3d< T > &in, Image3d< T > &out, const int radius_size)
template<class T>
I3D_DLLEXPORT void i3d::BlackTopHatO (const Image3d< T > &in, Image3d< T > &out, const int radius_size)
template<class T>
I3D_DLLEXPORT void i3d::MaximaDynamic (const Image3d< T > &in, Image3d< BINARY > &out, const T dynamic)
I3D_DLLEXPORT void i3d::Dilation (const Image3d< i3d::BINARY > &in, Image3d< i3d::BINARY > &out, const float radius)
I3D_DLLEXPORT void i3d::Erosion (const Image3d< i3d::BINARY > &in, Image3d< i3d::BINARY > &out, const float radius)
I3D_DLLEXPORT void i3d::Closing (const Image3d< i3d::BINARY > &in, Image3d< i3d::BINARY > &out, const float radius)
I3D_DLLEXPORT void i3d::Opening (const Image3d< i3d::BINARY > &in, Image3d< i3d::BINARY > &out, const float radius)
template<class T>
void i3d::Geodesic_dilation (const Image3d< T > &marker, const Image3d< T > &mask, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::Geodesic_erosion (const Image3d< T > &marker, const Image3d< T > &mask, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::h_Max (const Image3d< T > &in, T h, Image3d< T > &out)
template<class T>
void i3d::h_Convex (const Image3d< T > &in, T h, Image3d< T > &out)
template<class T>
void i3d::r_Max_bysweeping (const Image3d< T > &in, Image3d< T > &out)
template<class T>
void i3d::r_Max (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &neib, const T minVal=(T) 0)
template<typename T>
void i3d::r_Min (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::e_Max (const Image3d< T > &in, T h, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::impose_minima (Image3d< T > &in_out, const Image3d< BINARY > &mask_bin)
template<class T>
void i3d::Fillhole (const Image3d< T > &in, Image3d< T > &out)
template<class T, class F, class G>
void i3d::Reconstruction_by_DilEro (const Image3d< T > &marker, const Image3d< T > &mask, Image3d< T > &out, const Neighbourhood &neib, F func_f, G func_g)
template<class T, class F, class G>
void i3d::Reconstruction_by_DilEro (const Image3d< T > &marker, const Image3d< T > &mask, Image3d< T > &out, F func_f, G func_g)
template<class T>
void i3d::Reconstruction_by_dilation (const Image3d< T > &marker, const Image3d< T > &mask, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::Reconstruction_by_dilation (const Image3d< T > &marker, const Image3d< T > &mask, Image3d< T > &out)
template<class T>
void i3d::Reconstruction_by_erosion (const Image3d< T > &marker, const Image3d< T > &mask, Image3d< T > &out, const Neighbourhood &neib)
template<class T>
void i3d::Reconstruction_by_erosion (const Image3d< T > &marker, const Image3d< T > &mask, Image3d< T > &out)
template<class T, class F>
void i3d::DilEro (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &neib, F function)
template<class T, class F>
I3D_DLLEXPORT void i3d::LocalDilEro (const Image3d< T > &in, Image3d< T > &out, Image3d< BINARY > &, const Neighbourhood &neib, F function)
template<class T1, class T2, class Pred>
void i3d::DiscreteDistance (const Image3d< T1 > &in, Image3d< T2 > &out, const Neighbourhood &neib, Pred p)
void i3d::Split (const Neighbourhood &n, Neighbourhood &n_forw, Neighbourhood &n_back)
template<class T>
bool i3d::Correspond (std::vector< T * > &b, std::vector< T * > &w)
template<class T>
void i3d::WatershedToboggan (const Image3d< T > &in, Image3d< int > &out, int connectivity, bool drawLines=false)
template<class T>
void i3d::WatershedToboggan2D (const Image3d< T > &in, Image3d< int > &out, int connectivity)
template<class T>
void i3d::WatershedLin (const Image3d< T > &in, Image3d< int > &out, int connectivity, bool drawLines=false)
template<class T>
void i3d::WatershedLin2D (const Image3d< T > &in, Image3d< int > &out, int connectivity)
template<typename T>
I3D_DLLEXPORT void i3d::WatershedMeyer (const Image3d< T > &input, const Image3d< size_t > &marker, Image3d< size_t > &output, const Neighbourhood &neighbourhood)
template<typename T>
I3D_DLLEXPORT void i3d::WatershedMeyer (const Image3d< T > &input, Image3d< size_t > &output, const Neighbourhood &neighbourhood)
template<class T>
void i3d::WatershedCGS (const Image3d< T > &in, Image3d< T > &out, int connectivity)
template<class T>
void i3d::Watershed (const Image3d< T > &in, Image3d< T > &out, const Neighbourhood &neib)


Function Documentation

template<class T>
I3D_DLLEXPORT void i3d::Dilation ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

Morphologial Dilation.

template<class T>
I3D_DLLEXPORT void i3d::LocalDilation ( const Image3d< T > &  in,
Image3d< T > &  out,
const Image3d< BINARY > &  mask,
const Neighbourhood neib 
) [inline]

template<class T>
I3D_DLLEXPORT void i3d::Erosion ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

Morphological Erosion.

template<class T>
I3D_DLLEXPORT void i3d::LocalErosion ( const Image3d< T > &  in,
Image3d< T > &  out,
const Image3d< BINARY > &  mask,
const Neighbourhood neib 
) [inline]

template<class T>
I3D_DLLEXPORT void i3d::Closing ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

Morphological Closing.

template<class T>
I3D_DLLEXPORT void i3d::LocalClosing ( const Image3d< T > &  in,
Image3d< T > &  out,
const Image3d< BINARY > &  mask,
const Neighbourhood neib 
) [inline]

template<class T>
I3D_DLLEXPORT void i3d::Closing ( Image3d< T > &  in,
const Neighbourhood neib 
) [inline]

Morphological Closing.

template<class T>
I3D_DLLEXPORT void i3d::Opening ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood neigh 
) [inline]

Morphological Opening.

template<class T>
I3D_DLLEXPORT void i3d::LocalOpening ( const Image3d< T > &  in,
Image3d< T > &  out,
const Image3d< BINARY > &  mask,
const Neighbourhood neib 
) [inline]

template<class T>
I3D_DLLEXPORT void i3d::Opening ( Image3d< T > &  in,
const Neighbourhood neib 
) [inline]

Morphological Opening.

template<class T>
I3D_DLLEXPORT void i3d::WhiteTopHat ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

Morphological WhiteTopHat.

template<class T>
I3D_DLLEXPORT void i3d::BlackTopHat ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

Morphological BlackTopHat.

template<class T>
I3D_DLLEXPORT void i3d::TopHat ( Image3d< T > &  in,
const Neighbourhood neib 
) [inline]

Morphological TopHat.

template<class T>
I3D_DLLEXPORT void i3d::HitOrMiss ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood b,
const Neighbourhood w 
) [inline]

Morphological HitOrMiss.

template<class T>
I3D_DLLEXPORT void i3d::Thinning ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood b,
const Neighbourhood w 
) [inline]

Morphological thinning.

template<class T>
I3D_DLLEXPORT void i3d::Thicking ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood b,
const Neighbourhood w 
) [inline]

Morphological thicking.

template<class T>
I3D_DLLEXPORT void i3d::DilationO ( const Image3d< T > &  in,
Image3d< T > &  out,
const int  radius_size 
) [inline]

Effective morphological operations with an approximation of a disk.

radius is in pixels Disk is approximated by octagon (polyhedron), uses decomposition of SE (alternating nb6 and nb 27)

by Pavel Matula, 2009

template<class T>
I3D_DLLEXPORT void i3d::ErosionO ( const Image3d< T > &  in,
Image3d< T > &  out,
const int  radius_size 
) [inline]

template<class T>
I3D_DLLEXPORT void i3d::ClosingO ( const Image3d< T > &  in,
Image3d< T > &  out,
const int  radius_size 
) [inline]

template<class T>
I3D_DLLEXPORT void i3d::OpeningO ( const Image3d< T > &  in,
Image3d< T > &  out,
const int  radius_size 
) [inline]

template<class T>
I3D_DLLEXPORT void i3d::WhiteTopHatO ( const Image3d< T > &  in,
Image3d< T > &  out,
const int  radius_size 
) [inline]

template<class T>
I3D_DLLEXPORT void i3d::BlackTopHatO ( const Image3d< T > &  in,
Image3d< T > &  out,
const int  radius_size 
) [inline]

template<class T>
I3D_DLLEXPORT void i3d::MaximaDynamic ( const Image3d< T > &  in,
Image3d< BINARY > &  out,
const T  dynamic 
) [inline]

Computes maximas of the given dymanic.

by Pavel Matula, 2009

I3D_DLLEXPORT void i3d::Dilation ( const Image3d< i3d::BINARY > &  in,
Image3d< i3d::BINARY > &  out,
const float  radius 
)

Effective morphological operations with disk structuring elements.

radius is in microns

I3D_DLLEXPORT void i3d::Erosion ( const Image3d< i3d::BINARY > &  in,
Image3d< i3d::BINARY > &  out,
const float  radius 
)

I3D_DLLEXPORT void i3d::Closing ( const Image3d< i3d::BINARY > &  in,
Image3d< i3d::BINARY > &  out,
const float  radius 
)

I3D_DLLEXPORT void i3d::Opening ( const Image3d< i3d::BINARY > &  in,
Image3d< i3d::BINARY > &  out,
const float  radius 
)

template<class T>
I3D_DLLEXPORT void i3d::Geodesic_dilation ( const Image3d< T > &  marker,
const Image3d< T > &  mask,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

Mask image must be larger than or equal to the marker image.

template<class T>
I3D_DLLEXPORT void i3d::Geodesic_erosion ( const Image3d< T > &  marker,
const Image3d< T > &  mask,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

Marker image must be larger than or equal to the mask image.

template<class T>
I3D_DLLEXPORT void i3d::h_Max ( const Image3d< T > &  in,
h,
Image3d< T > &  out 
) [inline]

Computes h-Maxima, suppress all maxima whose depth is smaller than h.

template<class T>
I3D_DLLEXPORT void i3d::h_Convex ( const Image3d< T > &  in,
h,
Image3d< T > &  out 
) [inline]

Compute h-Convex transformation.

template<class T>
I3D_DLLEXPORT void i3d::r_Max_bysweeping ( const Image3d< T > &  in,
Image3d< T > &  out 
) [inline]

TODO Comment.

template<class T>
I3D_DLLEXPORT void i3d::r_Max ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood neib,
const T  minVal = (T) 0 
) [inline]

Computes regional maxima - they will be marked with std::numeric_limits<T>::max(), nonmaxima with 0.

Warning:
For 4 and 6 neighbourhoods, the minVal is ignored and faster r_Max_bysweeping is used.

template<typename T>
I3D_DLLEXPORT void i3d::r_Min ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

Computes regional minima - they will be marked with std::numeric_limits<T>::max(), nonminima with 0.

template<class T>
I3D_DLLEXPORT void i3d::e_Max ( const Image3d< T > &  in,
h,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

Computes h-extended maxima, EMAX_h(f) = RMAX(HMAX_h(f)).

template<class T>
I3D_DLLEXPORT void i3d::impose_minima ( Image3d< T > &  in_out,
const Image3d< BINARY > &  mask_bin 
) [inline]

minima imposition where mask_bin == 1

template<class T>
I3D_DLLEXPORT void i3d::Fillhole ( const Image3d< T > &  in,
Image3d< T > &  out 
) [inline]

Holes filling algorithm computed using the morphological reconstruction by erosion.

template<class T, class F, class G>
I3D_DLLEXPORT void i3d::Reconstruction_by_DilEro ( const Image3d< T > &  marker,
const Image3d< T > &  mask,
Image3d< T > &  out,
const Neighbourhood neib,
func_f,
func_g 
) [inline]

This implementation does not work! Please use the versions without Neighbourhood instead.

template<class T, class F, class G>
I3D_DLLEXPORT void i3d::Reconstruction_by_DilEro ( const Image3d< T > &  marker,
const Image3d< T > &  mask,
Image3d< T > &  out,
func_f,
func_g 
) [inline]

General geodesic reconstruction function.

template<class T>
I3D_DLLEXPORT void i3d::Reconstruction_by_dilation ( const Image3d< T > &  marker,
const Image3d< T > &  mask,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

This implementation does not work! Please use the versions without Neighbourhood instead.

Mask image must be larger than or equal to the marker image.

template<class T>
I3D_DLLEXPORT void i3d::Reconstruction_by_dilation ( const Image3d< T > &  marker,
const Image3d< T > &  mask,
Image3d< T > &  out 
) [inline]

Mask image must be larger than or equal to the marker image.

template<class T>
I3D_DLLEXPORT void i3d::Reconstruction_by_erosion ( const Image3d< T > &  marker,
const Image3d< T > &  mask,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

This implementation does not work! Please use the versions without Neighbourhood instead.

Marker image must be larger than or equal to the mask image.

template<class T>
I3D_DLLEXPORT void i3d::Reconstruction_by_erosion ( const Image3d< T > &  marker,
const Image3d< T > &  mask,
Image3d< T > &  out 
) [inline]

Marker image must be larger than or equal to the mask image.

template<class T, class F>
I3D_DLLEXPORT void i3d::DilEro ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood neib,
function 
) [inline]

Todo:
Zatim pouzita pouze pri vypoctu dilatace a eroze, ale slo by ji vyuzit i jinde? Aplikuje funkci F v danem okoli.

template<class T, class F>
I3D_DLLEXPORT void i3d::LocalDilEro ( const Image3d< T > &  in,
Image3d< T > &  out,
Image3d< BINARY > &  ,
const Neighbourhood neib,
function 
) [inline]

template<class T1, class T2, class Pred>
I3D_DLLEXPORT void i3d::DiscreteDistance ( const Image3d< T1 > &  in,
Image3d< T2 > &  out,
const Neighbourhood neib,
Pred  p 
) [inline]

DiscreteDistance function needs 4 parameters:.

Parameters:
in input image
out output (filtered) image
neib neighbourhood applied to each voxel
p condition, which must be hold in each voxel so that this voxel could be plugged into the process of computation.

I3D_DLLEXPORT void i3d::Split ( const Neighbourhood n,
Neighbourhood n_forw,
Neighbourhood n_back 
)

dividing neighbourhood into two parts (backward and forward).

Todo:
Could be moved to neighbours.h?

template<class T>
I3D_DLLEXPORT bool i3d::Correspond ( std::vector< T * > &  b,
std::vector< T * > &  w 
) [inline]

returns true if color of all points in neighbourhoods corresponds to image.

template<class T>
I3D_DLLEXPORT void i3d::WatershedToboggan ( const Image3d< T > &  in,
Image3d< int > &  out,
int  connectivity,
bool  drawLines = false 
) [inline]

Morphological Watershed.

It uses Toboggan based approach implemented primarily by Lin et.al and published in "Comparison between immersion-based and toboggan-based watershed image segmentation" Yung-Chieh Lin; Yu-Pao Tsai; Yi-Ping Hung; Zen-Chung Shih, IEEE Transactions on Image Processing, 15, 3, March 2006

and altered for 3D by Martin Maska and Pavel Matula

This algorithm sometimes produces thick watershed lines. The result of the algorithm itself is very close to the Vincent-Soille algorithm.

Parameters:
in the input image
out the output labelled image, -1 is marking the watershed line, regions are marked beginning at 1 (0 is not used for anything)
connectivity is 4, 8, 6, 18, 26
drawLines whether to draw watershed lines everywhere or just in the ambiguous cases

template<class T>
I3D_DLLEXPORT void i3d::WatershedToboggan2D ( const Image3d< T > &  in,
Image3d< int > &  out,
int  connectivity 
) [inline]

Morphological Watershed.

It uses Toboggan based approach implemented by Lin et.al and published in "Comparison between immersion-based and toboggan-based watershed image segmentation" Yung-Chieh Lin; Yu-Pao Tsai; Yi-Ping Hung; Zen-Chung Shih, IEEE Transactions on Image Processing, 15, 3, March 2006

It can be called for 2D images (NumSlices() is equal to 1). InternalException is raised otherwise.

This algorithm sometimes produces thick watershed lines. The result of the algorithm itself is very close to the Vincent-Soille algorithm.

Parameters:
in the input image
out the output labelled image, -1 is marking the watershed line, regions are marked beginning at 1 (0 is not used for anything)
connectivity is 4 or 8

template<class T>
I3D_DLLEXPORT void i3d::WatershedLin ( const Image3d< T > &  in,
Image3d< int > &  out,
int  connectivity,
bool  drawLines = false 
) [inline]

Morphological Watershed.

It uses Watershed function implemented primarily by Lin et.al and published in "Comparison between immersion-based and toboggan-based watershed image segmentation" Yung-Chieh Lin; Yu-Pao Tsai; Yi-Ping Hung; Zen-Chung Shih, IEEE Transactions on Image Processing, 15, 3, March 2006

and altered for 3D by Martin Maska.

This algorithm sometimes produces thick watershed lines. The result of the algorithm itself is very close to the Vincent-Soille algorithm. Use WatershedToboggan to get the same results but in shorter time.

Warning:
Parameter drawLines has different default value than in WatershedToboggan.
Parameters:
in the input image
out the output labelled image, -1 is marking the watershed line, regions are marked beginning at 1 (0 is not used for anything)
connectivity is 4, 8, 6, 18, 26
drawLines whether to draw watershed lines everywhere or just in the ambiguous cases

template<class T>
I3D_DLLEXPORT void i3d::WatershedLin2D ( const Image3d< T > &  in,
Image3d< int > &  out,
int  connectivity 
) [inline]

Morphological Watershed.

It uses Watershed function implemented by Lin et.al and published in "Comparison between immersion-based and toboggan-based watershed image segmentation" Yung-Chieh Lin; Yu-Pao Tsai; Yi-Ping Hung; Zen-Chung Shih, IEEE Transactions on Image Processing, 15, 3, March 2006

It can be called for 2D images (NumSlices() is equal to 1). InternalException is raised otherwise.

Watershed lines are drawn only in the ambiguous cases. The result of the algorithm itself is very close to the Vincent-Soille algorithm. Use WatershedToboggan2D to get the same results but in shorter time.

Parameters:
in the input image
out the output labelled image, -1 is marking the watershed line, regions are marked beginning at 1 (0 is not used for anything)
connectivity is 4 or 8

template<typename T>
I3D_DLLEXPORT void i3d::WatershedMeyer ( const Image3d< T > &  input,
const Image3d< size_t > &  marker,
Image3d< size_t > &  output,
const Neighbourhood neighbourhood 
) [inline]

Morphological watershed algorithm according to Meyer.

This algorithm produces thin watershed lines.

Parameters:
input the input image
marker the marker image used for the start of the region growing (non-zero values should be used for the markers, zero otherwise)
output the output labelled image, 0 is marking the watershed line
neighbourhood the neighbourhood used for the computation

template<typename T>
I3D_DLLEXPORT void i3d::WatershedMeyer ( const Image3d< T > &  input,
Image3d< size_t > &  output,
const Neighbourhood neighbourhood 
) [inline]

Morphological watershed algorithm according to Meyer.

This algorithm produces thin watershed lines. This version uses all the regional minima as markers.

Parameters:
input the input image
output the output labelled image, 0 is marking the watershed line
neighbourhood the neighbourhood used for the computation

template<class T>
I3D_DLLEXPORT void i3d::WatershedCGS ( const Image3d< T > &  in,
Image3d< T > &  out,
int  connectivity 
) [inline]

Watershed constours geodesic saliency.

Morphological watershed that uses the concept of dynamics of contours presented by Najman and Schmitt in Laurent Najman, Michel Schmitt, "Geodesic Saliency of Watershed Contours and Hierarchical Segmentation," IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 18, no. 12, pp. 1163-1173, December, 1996.

Parameters:
in the input image
out the output labelled image
connectivity is 4, 8, 6, 18, 26

template<class T>
I3D_DLLEXPORT void i3d::Watershed ( const Image3d< T > &  in,
Image3d< T > &  out,
const Neighbourhood neib 
) [inline]

Morphological Watershed.

Warning:
This function converts image voxels to int internally.

This implementation has been outperformed by other implementations available, stop using it!


Generated on Mon Nov 30 22:19:01 2009 for i3dalgo by  doxygen 1.5.4