Apply a clustered dot ordered dither to a grayscale image, converting
it to a bilevel image in the process.
Works with
GrayIntegerImage
objects
as input and
BilevelImage
objects
as output.
Resolution of both must be the same.
Use one of the predefined dither matrices or have one compiled from
a
spot function (given by an object of a class implementing
SpotFunction
).
There are a couple of classes implementing that spot function interface
in the dithering package.
If no matrix is specified,
process()
creates a default matrix
by calling
setOrder3DitherMatrix()
.
Usage example
ClusteredDotDither dither = new ClusteredDotDither();
dither.setInputImage(image); // some GrayIntegerImage
dither.setDitherMatrix(8, 8, new DiamondSpotFunction());
dither.process();
PixelImage ditheredImage = dither.getOutputImage();
Credits
The predefined dither matrices were taken from
Netpbm's
pgmtopbm
program (the matrices are stored in the
file
dithers.h
).
I learned about spot functions and their use from Austin Donnelly's
GIMP plugin
newsprint - it has extensive comments, and the
newsprint website
explains the
theoretical background.
setDefaults
private void setDefaults()
setDitherMatrix
public void setDitherMatrix(int width,
int height,
int[] data)
Sets the dither matrix to be used in this operation.
width
- number of entries in horizontal directionheight
- number of entries in vertical directiondata
- matrix entries, in order top to bottom, and in each row left to right
setDitherMatrix
public void setDitherMatrix(int width,
int height,
SpotFunction f)
Creates and sets a dither matrix of user-defined size and
compiles it from a spot function.
Creates a matrix from the spot function and calls
setDitherMatrix(int,int,int[])
.
width
- width of matrix, must be one or largerheight
- height of matrix, must be one or largerf
- the spot function to be used for compiling the matrix
setOrder3DitherMatrix
public void setOrder3DitherMatrix()
Sets a 6 times 6 elements matrix to be used for dithering.
setOrder4DitherMatrix
public void setOrder4DitherMatrix()
Sets an 8 times 8 elements matrix to be used for dithering.
setOrder8DitherMatrix
public void setOrder8DitherMatrix()
Sets a 16 times 16 elements matrix to be used for dithering.