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