taubinFilter edit page

shrinkage free smoothing of grain boundaries

Description

A Laplacian is a low pass filter with gain 1-lambda*k, which is smaller than one everywhere except at k = 0. Iterating it therefore shrinks every convex region, without bound - a grain smoothed long enough disappears.

Taubin's fix is to follow each smoothing pass by a slightly larger unshrinking pass with a negative step mu, so that the gain over the pair is (1-lambda*k)(1-mu*k). With mu chosen a little below -lambda this product is approximately one over the low frequencies, i.e. the shape is smoothed while the area is given back.

This is approximate, not exact - the areas do move, just not systematically in one direction.

Reference: G. Taubin, A signal processing approach to fair surface design, SIGGRAPH 1995.

Syntax

grains = smoothBoundary(grains,taubinFilter)
F = taubinFilter;
F.iter = 10;
grains = smoothBoundary(grains,F)

Class Properties

iter number of shrink/unshrink pairs (default: 5)
lambda the smoothing step (default: 0.5)
mu the unshrinking step, negative and slightly larger in modulus than lambda (default: -0.53)

See also

grain2d.smoothBoundary boundaryFilter laplaceFilter curvatureFilter