Alpha trimmed mean filter. (0.0
Optimal estimation smoothing. (1.0
Edge enhancement. (-0.1
pnmnlfilt - non-linear filters: smooth, alpha trim mean, optimal estimation smoothing, edge enhancement.
pnmnlfilt alpha radius [''pnmfile''?
This is something of a swiss army knife filter. It has 3
distinct operating modes. In all of the modes each pixel in
the image is examined and processed according to it and its
surrounding pixels values. Rather than using the 9 pixels in
a 3x3 block, 7 hexagonal area samples are taken, the size of
the hexagons being controlled by the radius parameter. A
radius value of 0.3333 means that the 7 hexagons exactly fit
into the center pixel (ie. there will be no filtering
effect). A radius value of 1.0 means that the 7 hexagons
exactly fit a 3x3 pixel array.
Alpha trimmed mean filter. (0.0 !!
The value of the center pixel will be replaced by the mean
of the 7 hexagon values, but the 7 values are sorted by size
and the top and bottom alpha portion of the 7 are excluded
from the mean. This implies that an alpha value of 0.0 gives
the same sort of output as a normal convolution (ie.
averaging or smoothing filter), where radius will determine
An alpha value of 0.5 will cause the median value of the 7
hexagons to be used to replace the center pixel value. This
sort of filter is good for eliminating
Optimal estimation smoothing. (1.0 !!
This type of filter applies a smoothing filter adaptively
over the image. For each pixel the variance of the
surrounding hexagon values is calculated, and the amount of
smoothing is made inversely proportional to it. The idea is
that if the variance is small then it is due to noise in the
image, while if the variance is large, it is because of
Edge enhancement. (-0.1 !!
This is the opposite type of filter to the smoothing filter.
It enhances edges. The alpha parameter controls the amount
of edge enhancement, from subtle (-0.1) to blatant (-0.9).
The radius parameter controls the effective radius as usual,
but useful values are between 0.5 and 0.9. Try starting with
values of alpha = 0.3, radius = 0.8
The various modes of pnmnlfilt can be used one after
the other to get the desired result. For instance to turn a
monochrome dithered image into a grayscale image you could
try one or two passes of the smoothing filter, followed by a
pass of the optimal estimation filter, then some subtle edge
enhancement. Note that using edge enhancement is only likely
to be useful after one of the non-linear filters (alpha
trimmed mean or optimal estimation filter), as edge
enhancement is the direct opposite of
For reducing color quantization noise in images (ie. turning
.gif files back into 24 bit files) you could try a pass of
the optimal estimation filter (alpha 1.2, radius 1.0), a
pass of the median filter (alpha 0.5, radius 0.55), and
possibly a pass of the edge enhancement filter. Several
passes of the optimal estimation filter with declining alpha
values are more effective than a single pass with a large
alpha value. As usual, there is a tradeoff between filtering
effectiveness and loosing detail. Experimentation is
The alpha-trimmed mean filter is based on the description in
The optimal estimation filter is taken from an article
The edge enhancement details are from pgmenhance(1), which
is taken from Philip R. Thompson's
pgmenhance(1), pnmconvol(1), pnm(5)
Integers and tables may overflow if PPM_MAXMAXVAL is greater
Graeme W. Gill firstname.lastname@example.org