1.1.2 Halftone Approximation

If we cannot display all the required intensity levels (e.g. on a printer) we need a trick using the spatial integration that our eyes performs: In normal light the eye can only detect about one arc minute ($ 1/60$ degree). This is called VISUAL ACUITY. Thus instead of gray dots a small black disk with radius varying according to the blackness $ 1-I$ is printed. Usually, for newspaper 60-80 and for magazines 150-200 different radiuses are used. This process is called HALFTONING.

Figure: Halftoning
\includegraphics[]{teapot-halftone}

For computers this is implemented as CLUSTERED-DOT ORDERED DITHERING, e.g. the following patterns are used for each pixel of intensity $ 0\dots 9$:

Figure:
\begin{figure}\begin{picture}(3,4)
\put(0,1){\line(1,0){3}}
\put(0,2){\line(1,0)...
...(2.5,2.5){\circle*{1}}
\put(1.5,0.7){\makebox(0,0){4}}
\end{picture}\end{figure}

Figure: Clustered-dot ordered dithering
\begin{figure}\begin{picture}(3,4)
\put(0,1){\line(1,0){3}}
\put(0,2){\line(1,0)...
...(1.5,3.5){\circle*{1}}
\put(1.5,0.7){\makebox(0,0){9}}
\end{picture}\end{figure}

Figure: Clustered-dot ordered dithering
\includegraphics[]{teapot-small-9}

This can be described by a dither matrix

$\displaystyle \begin{pmatrix}
6 & 8 & 4 \\
1 & 0 & 3 \\
5 & 2 & 7 \\
\end{pmatrix}$

saying that in order to display intensity $ I$ one should turn on all those pixels whose value in this matrix is less than $ I$. It is chosen in such a way, that visual artifacts are avoided: For high-quality reproduction we need an $ 8\times 8$ (64 gray levels) or even a $ 10\times 10$ matrix and thus quite a hight resolution.

If such a high resolution is not available one can use ERROR DIFFUSION: There we use fewer intensity levels than desired, but we distribute the errors $ I - I_i$ to the neighboring pixels with the following weights:

$\displaystyle \xymatrix{
&\bullet\ar@{->}[0,1] \ar@{->}[1,1] \ar@{->}[1,0] \ar@{->}[1,-1] &7/16 \\
3/16 &5/16 &1/16 \\
}$

Figure: 8 colors with Floyd-Steinberg error diffusion
\includegraphics[]{teapot-fs}

A similar trick can be used for enlarging a picture by taking interpolation values to neighboring pixels as intermediate values. E.g. for doubling the size of the picture one inserts new rows and columns and takes as new values

$\displaystyle I_{2i,2j}'$ $\displaystyle :=I_{i,j}$ $\displaystyle I_{2i+1,2j}'$ $\displaystyle :=\frac12(I_{i,j}+I_{i+1,j})$    
$\displaystyle I_{2i,2j+1}'$ $\displaystyle :=\frac12(I_{2i,j}+I_{2i,j+1})\qquad$ $\displaystyle I_{2i+1,2j+1}'$ $\displaystyle :=\frac14(I_{i,j}+I_{i,j+1}+I_{i+1,j}+I_{i+1,j+1})$    

This way one avoids that small square-size pixels can be seen. Disadvantage is that some blurring occurs.

Figure: Enlarged versus enlarged with diffusion
\includegraphics[width=0.45\textwidth]{teapot-3x}      \includegraphics[width=0.45\textwidth]{teapot-3xs}

Andreas Kriegl 2003-07-23