[ VIGRA Homepage | Class Index | Function Index | File Index | Main Page ]
![]() |
Non-linear Diffusion | ![]() |
---|
Classes | |
class | DiffusivityFunctor |
Diffusivity functor for non-linear diffusion. More... | |
Functions | |
template<...> void | nonlinearDiffusion (SrcIterator sul, SrcIterator slr, SrcAccessor as, DestIterator dul, DestAccessor ad, DiffusivityFunc const &weight, double scale) |
Perform edge-preserving smoothing at the given scale. |
Detailed Description |
void nonlinearDiffusion (...) |
Perform edge-preserving smoothing at the given scale. The algorithm solves the non-linear diffusion equation
![]()
where t is the time, x is the location vector, u( x , t) is the smoothed image at time t, and g(.) is the location dependent diffusivity. At time zero, the image u( x , 0) is simply the original image. The time is propotional to the square of the scale parameter: J. Weickert: "Recursive Separable Schemes for Nonlinear Diffusion Filters", in: B. ter Haar Romeny, L. Florack, J. Koenderingk, M. Viergever (eds.): 1st Intl. Conf. on Scale-Space Theory in Computer Vision 1997, Springer LNCS 1252
The source value type must be a linear space with internal addition, scalar multiplication, and NumericTraits defined. The value_type of the DiffusivityFunctor must be the scalar field over wich the source value type's linear space is defined.
In addition to Declarations: pass arguments explicitly: namespace vigra { template <class SrcIterator, class SrcAccessor, class DestIterator, class DestAccessor, class DiffusivityFunctor> void nonlinearDiffusion(SrcIterator sul, SrcIterator slr, SrcAccessor as, DestIterator dul, DestAccessor ad, DiffusivityFunctor const & weight, double scale); } use argument objects in conjuction with Argument Object Factories: namespace vigra { template <class SrcIterator, class SrcAccessor, class DestIterator, class DestAccessor, class DiffusivityFunctor> void nonlinearDiffusion( triple<SrcIterator, SrcIterator, SrcAccessor> src, pair<DestIterator, DestAccessor> dest, DiffusivityFunctor const & weight, double scale); } Usage: #include "vigra/nonlineardiffusion.hxx"
FImage src(w,h), dest(w,h); float edge_threshold, scale; ... nonlinearDiffusion(srcImageRange(src), destImage(dest), DiffusivityFunctor<float>(edge_threshold), scale); Required Interface:
|
© Ullrich Köthe (koethe@informatik.uni-hamburg.de) |
html generated using doxygen and Python
|