The filter is aimed to perform image smoothing, but keeping sharp edges. This makes it applicable to additive noise removal and smoothing objects' interiors, but not applicable for spikes (salt and pepper noise) removal.
The next calculations are done for each pixel:
w(x, y) = exp( -1 * (Gx^2 + Gy^2) / (2 * factor^2) ) Gx(x, y) = (I(x + 1, y) - I(x - 1, y)) / 2 Gy(x, y) = (I(x, y + 1) - I(x, y - 1)) / 2
, where
Description of the filter was found in "An Edge Detection Technique Using the Facet Model and Parameterized Relaxation Labeling" by Ioannis Matalas, Student Member, IEEE, Ralph Benjamin, and Richard Kitney.
The filter accepts 8 bpp grayscale images and 24 bpp color images for processing.
Sample usage:
// create filter AdaptiveSmoothing filter = new AdaptiveSmoothing( ); // apply the filter filter.ApplyInPlace( image );
Initial image:
Result image: