it from grayscale error diffusion? IEEE Signal
Processing Magazine, 20:51–58.
Floyd, R. W. and Steinberg, L. (1976). An Adaptive
Algorithm for Spatial Greyscale. Proceedings of the
Society for Information Display, 17(2):75–77.
Gonzalez, R. C. and Woods, R. E. (2001). Digital Image
Processing. Addison-Wesley Longman Publishing
Co., Inc., Boston, MA, USA, 2nd edition.
Haneishi, H., Suzuki, T., Shimoyama, N., and Miyake, Y.
(1996). Color digital halftoning taking colorimetric
color reproduction into account. J. Electronic
Imaging, 5(1):97–106.
Kang, H. R. (1999). Digital Color Halftoning. Society
of Photo-Optical Instrumentation Engineers (SPIE),
Bellingham, WA, USA, 1st edition.
Kim, S. Y., Maciejewski, R., Isenberg, T., Andrews, W. M.,
Chen, W., Sousa, M. C., and Ebert, D. S. (2009).
Stippling by example. In NPAR09, pages 41–50.
ACM.
Knox, K. T. and Eschbach, R. (1993). Threshold
modulation in error diffusion. J. Electronic Imaging,
2(3):185–192.
Li, P. and Allebach, J. P. (2001). Tone-dependent error
diffusion. In Society of Photo-Optical Instrumentation
Engineers (SPIE) Conference Series, volume 4663,
pages 310–321.
Ostromoukhov, V. (2001). A simple and efficient error-
diffusion algorithm. In SIGGRAPH01, pages 567–
572. ACM.
Press, W. H., Teukolsky, S. A., Vetterling, W. T., and
Flannery, B. P. (1992). Numerical Recipes in C: The
Art of Scientific Computing. Cambridge University
Press, New York, NY, USA, 2nd edition.
Rodrłguez, J. B., Arce, G. R., and Lau, D. L. (2008).
Blue-noise multitone dithering. IEEE Transactions on
Image Processing, 17(8):1368–1382.
Swaminarayan, S. and Prasad, L. (2006). Rapid automated
polygonal image decomposition. In Applied Imagery
and Pattern Recognition Workshop, 2006., pages 28–
28. IEEE.
Ulichney, R. A. (1988). Dithering with blue noise.
Proceedings of the IEEE, 76:56–79.
Wei, L.-Y. (2010). Multi-class blue noise sampling. ACM
Transactions on Graphics (TOG), 29(4):79.
Wei, L.-y. (2012). Private communication.
Weissbach, S. and Wyrowski, F. (1992). Error diffusion
procedure: theory and applications in optical signal
processing. Applied Optics, 31:2518–2534.
Zhou, B. and Fang, X. (2003). Improving mid-tone quality
of variable-coefficient error diffusion using threshold
modulation. ACM Trans. Graph., 22(3):437–444.
APPENDIX: Pseudo Code of MCED
Alg.1 is the pseudo-code for the framework of
MCED, and the main functions are explained as
follows:
GetDisplacement() evaluates t
i
by accessing the
lookup table (Fig.6) we described in Section 4.2.
GetCoe f f icient() and GetStandardT hreshold()
are functions for finding appropriate diffusion coef-
ficients and threshold for the standard ED.
Quantize() compares pixel value to the threshold
and returns 0 if below, 1 otherwise. (Eq.1)
HaveCon f lict() returns TRUE if more than one
sampling points from different classes situate at the
current position, and NoCon f lict() indicates only one
class sampled at the position.
FindMaxClass() finds the class whose sum of
densities at all the spatial positions is the maximum.
DistributeError() distributes the quantization er-
rors to neighboring pixels according to the error filter.
Algorithm 1: Multi-Class Error-Diffusion.
1: for each spatial position (x,y) do
2: p
0
(x,y) ←
n
∑
i=1
p
i
(x,y)
3:
4: for each spatial position (x,y) do
5: // The first step Q
i
6: for each class i := 0 to n do
7: t
i
(x,y) ← GetDisplacement(p
0
(x,y), p
i
(x,y))
8: a
(i)
jk
← GetCoe f f icient(p
i
(x,y))
9: u
i
(x,y) ← GetStandardT hreshold(p
i
(x,y))
10: u
i
(x,y) ← u
i
(x,y) + t
i
(x,y)
11: for each class i := 0 to n do
12: c
0
i
← Q(p
i
(x,y) + b
i
(x,y),u
i
(x,y)) // Eq.1
13:
14: // The second step E
i
15: if c
0
0
(x,y) = 1 then
16: if HaveCon f lict() then // i.e.:
∑
i6=0
c
0
i
> 1
17: c
0
(x,y) ← 1
18: e
0
(x,y) ← p
0
(x,y) − c
0
(x,y)
19: minclass ← FindMaxClass()
20: for each class i := 1 to n do
21: if i = minclass then // i.e.:s
i
= TRU E
22: c
i
(x,y) ← 1
23: else
24: c
i
(x,y) ← 0
25: e
i
(x,y) ← p
i
(x,y) − c
i
(x,y)
26: else if NoCon f lict() then // i.e.:
∑
i6=0
c
0
i
= 1
27: for each class i := 0 to n do
28: c
i
(x,y) ← c
0
i
29: e
i
(x,y) ← p
i
(x,y) − c
i
(x,y)
30: else // No class sampled:
∑
i6=0
c
0
i
= 0
31: for each class i := 0 to n do
32: c
i
(x,y) ← 0
33: e
i
(x,y) ← p
i
(x,y) − c
i
(x,y)
34: else // When c
0
0
= 0
35: for each class i := 0 to n do
36: c
i
(x,y) ← 0
37: e
i
(x,y) ← p
i
(x,y) − c
i
(x,y)
38:
39: for each class i := 0 to n do
40: DistributeError(i,x,y,e
i
(x,y),a
(i)
jk
)
GRAPP 2016 - International Conference on Computer Graphics Theory and Applications
38