SYNOPSIS

DESCRIPTION

This program is part of Netpbm(1).
pamditherbw dithers a grayscale image. Dithering means turning each
shade of gray into a pattern of black and white pixels that, from a
distance, look the same as the gray.
The input should be a PGM image or a PAM image of tuple type GRAYSCALE.
However, pamditherbw doesn’t check, so if you feed it e.g. a PPM image,
it will produce arbitrary results (actually, it just takes the first
channel of whatever you give it and treats it as if it represented gray
levels).
The output is a PAM with tuple type BLACKANDWHITE. You can turn this
into a PBM (if you need to use it with an older program doesn’t under-
stand PAM) with pamtopnm.
To do the opposite of dithering, you can usually just scale the image
down and then back up again with pamscale, possibly smoothing or blur-
ring the result with pnmsmooth or pnmconvol. Or use the special case
program pbmtopgm.
To dither a color image (to reduce the number of pixel colors), use
ppmdither.

OPTIONS

The default quantization method is boustrophedonic Floyd-Steinberg
error diffusion (-floyd or -fs).
Also available are simple thresholding (-threshold); Bayer’s ordered
dither (-dither8) with a 16x16 matrix; and three different sizes of
45-degree clustered-dot dither (-cluster3, -cluster4, -cluster8).
A space filling curve halftoning method using the Hilbert curve is also
available (-hilbert).
Floyd-Steinberg will almost always give the best looking results; how-
ever, looking good is not always what you want. For instance, thresh-
olding can be used in a pipeline with the pnmconvol tool, for tasks
like edge and peak detection. And clustered-dot dithering gives a
newspaper-ish look, a useful special effect.
The -value option alters the thresholding value for Floyd-Steinberg and
simple thresholding. It should be a real number between 0 and 1.
Above 0.5 means darker images; below 0.5 means lighter.
The Hilbert curve method is useful for processing images before display
on devices that do not render individual pixels distinctly (like laser
printers). This dithering method can give better results than the
dithering usually done by the laser printers themselves. The -clump
option alters the number of pixels in a clump. This is usually an
integer between 2 and 100 (default 5). Smaller clump sizes smear the
image less and are less grainy, but seem to loose some grey scale lin-
earity. Typically a PGM image will have to be scaled to fit on a laser
printer page (2400 x 3000 pixels for an A4 300 dpi page), and then
dithered to a PBM image before being converted to a postscript file. A
printing pipeline might look something like:
pamscale -xysize 2400 3000 image.pgm | pamditherbw -hilbert | pamtopnm | pnmtops -scale 0.25 > image.ps
All options can be abbreviated to their shortest unique prefix.

REFERENCES

The only reference you need for this stuff is ’Digital Halftoning’ by
Robert Ulichney, MIT Press, ISBN 0-262-21009-6.
The Hilbert curve space filling method is taken from ’Digital Halfton-
ing with Space Filling Curves’ by Luiz Velho, Computer Graphics Volume
25, Number 4, proceedings of SIGRAPH ’91, page 81. ISBN 0-89791-436-8

SEE ALSO

HISTORY

pamditherbw was new in Netpbm 10.23 (July 2004), but is essentially the
same program as pgmtopbm that has existed practically since the begin-
ning. pamditherbw differs from its predecessor in that it properly
deals with gamma adjustment and that it accepts PAM input in addition
to PGM and PBM and produces PAM output.
pamditherbw obsoletes pgmtopbm.