Convert image, increasing apparent color resolution by dithering
X = dither(RGB, map)
X = dither(RGB, map, Qm, Qe)
BW = dither(I)
X = dither(RGB, map, Qm, Qe) creates an indexed image from RGB, where Qm specifies the number of quantization bits to use along each color axis for the inverse color map, and Qe specifies the number of quantization bits to use for the color space error calculations. If Qe < Qm, dithering cannot be performed, and an undithered indexed image is returned in X. If you omit these parameters, dither uses the default values Qm = 5, Qe = 8.
RGB can be uint8, uint16, single, or double. I can be uint8, uint16, int16, single, or double. All other input arguments must be double. BW is logical. X is uint8, if it is an indexed image with 256 or fewer colors; otherwise, it is uint16.
Read and display the cameraman image. Display the image as a gray scale image using imagesc.
I = imread('cameraman.tif'); figure; imagesc(I); colormap(gray);
Apply dithering to get an indexed image as,
BW = dither(I); figure; imagesc(BW); colormap(gray);
 Floyd, R. W., and L. Steinberg, "An Adaptive Algorithm for Spatial Gray Scale," International Symposium Digest of Technical Papers, Society for Information Displays, 1975, p. 36.
 Lim, Jae S., Two-Dimensional Signal and Image Processing, Englewood Cliffs, NJ, Prentice Hall, 1990, pp. 469-476.