Notes on halftone approximations Billy Biggs <vektor@dumbterm.net> Wed Aug 13 22:34:06 EDT 2003 At CCCG03 I saw an interesting talk by Tetsuo Asano on halftone algorithms that caught my attention. My first remark after searching for dithering examples was that many images appear too bright. The following is a comparison of images dithered using raw R'G'B' against images using values gamma corrected for an sRGB display device. These images were dithered using a simple 8x8 Bayer matrix with values between 1 and 64. Each value in the matrix is tested against the scaled input channel value, if the image value is higher, we dither to 1, otherwise we dither to 0. The 8x8 matrix is tiled over the image. The matrix is as follows: [ 1 33 9 41 3 35 11 43 ] [ 49 17 57 25 51 19 59 27 ] [ 13 45 5 37 15 47 7 39 ] [ 61 29 53 21 63 31 55 23 ] [ 4 36 12 44 2 34 10 42 ] [ 52 20 60 28 50 18 58 26 ] [ 16 48 8 40 14 46 6 38 ] [ 64 32 56 24 62 30 54 22 ] For applications which need results without a complexity penalty, it is sufficient to change our matrix to compensate for gamma directly. While I have not done an analysis to measure the error, I decided to increase the precision of the dither matrix from 1-64 valued to using values from 1 to 255. The corrected matrix is as follows: [ 34 190 105 209 61 195 115 214 ] [ 227 141 242 168 231 148 246 174 ] [ 124 218 79 200 133 223 93 205 ] [ 250 179 235 155 253 185 239 162 ] [ 71 198 120 216 49 193 110 212 ] [ 233 152 248 177 229 145 244 171 ] [ 137 225 99 207 129 220 86 202 ] [ 255 188 240 165 251 182 237 158 ] This matrix is applied on each colour component individually to return a 3-bit per pixel image, one bit for each of red, green and blue. First, we compare the original image to our 8-coloured dithered version. Original and dithered image using the gamma corrected light intensity Next, we show a dithered image that uses the original matrix. Original and dithered image using the non-gamma corrected voltage values