<?php header("Content-Type: text/html; charset=utf-8"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <meta name="GENERATOR" content="vim" />
   <meta name="Author" content="sam@zoy.org (Sam Hocevar)" />
   <meta name="Description" content="Libcaca study: the science behind colour ASCII art" />
   <meta name="Keywords" content="libcaca, ASCII, ASCII ART, console, text mode, ncurses, slang, AAlib, dithering, thresholding" />
   <title>Libcaca study: the science behind colour ASCII art</title>
   <link rel="icon" type="image/x-icon" href="/favicon.ico" />
   <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
   <link rel="stylesheet" type="text/css" href="/main.css" />
</head>

<body>

<?php include($_SERVER["DOCUMENT_ROOT"]."/header.inc"); ?>

<p> <span style="color: #aa0000; font-weight: bold;">Warning</span>: this
document is still work in progress. Feel free to send comments but do not
consider it final material. </p>

<!--<div style="float: left;">
   <a href=""></a>
</div>-->
<div style="float: right;">
   <a href="part1.html">&gt;&gt;&gt; Colour quantisation</a>
</div>

<br style="clear: both;" />

<h2> Libcaca study: the science behind colour ASCII art </h2>

<p> This document is an attempt at extending the leverage of skilled
resources by uncovering and addressing the challenges the industry faces
today in the area of colour ASCII art generation. </p>

<p> Seriously, guys. If you think that what libcaca does is easy, you either
don’t know what you are talking about, or we want you in the team. </p>

<h3> Foreword </h3>

<p> Meet Lena. She will guide us through this document, because the
seriousness of a scientific document in the area of computer graphics can
be measured by the number of times Lena appears in it. She truly is the
<i>Mona Lisa</i> of image processing. [2] </p>

<p style="text-align: center;">
  <img src="lena256.png" width="256" height="256"
       class="inline" alt="Lena (256×256)" />
  <img src="gradient256.png" width="64" height="256"
       class="inline" alt="colour gradient (64×256)" />
  <img src="lena256bw.png" width="256" height="256"
       class="inline" alt="Lena (256×256BW)" />
  <img src="gradient256bw.png" width="32" height="256"
       class="inline" alt="greyscale gradient (32×256)" />
</p>

<p> This document makes a lot of assumptions, such as the fact that input
images are made of pixels that have either one (grey level) or three (red,
green and blue) values uniformly spread between 0 and 1 (with regards to
human contrast perception). Real life is more complicated than that, but
that is beyond the scope of this document for now. </p>

<h3> Table of contents </h3>

<ul>
  <li> <a href="part1.html">1. Colour quantisation</a>
    <ul>
      <li> 1.1. Black and white thresholding </li>
      <li> 1.2. Greyscale thresholding </li>
      <li> 1.3. Dynamic thresholding </li>
      <li> 1.4. Random dithering </li>
    </ul>
  </li>
  <li> <a href="part2.html">2. Halftoning</a>
    <ul>
      <li> 2.1. Halftoning patterns </li>
      <li> 2.2. Screen artifacts </li>
      <li> 2.3. Ordered dithering </li>
      <li> 2.4. Random ordered dithering </li>
      <li> 2.5. Non-rectangular dither tiles </li>
      <li> 2.6. Supercell dithering </li>
      <li> 2.7. Void and cluster method </li>
    </ul>
  </li>
  <li> <a href="part3.html">3. Error diffusion</a>
    <ul>
      <li> 3.1. Floyd-Steinberg and JaJuNi error diffusion </li>
      <li> 3.2. Floyd-Steinberg derivatives </li>
      <li> 3.3. Changing image parsing direction </li>
      <li> 3.4. Variable coefficients error diffusion </li>
      <li> 3.5. Block error diffusion </li>
      <li> 3.6. Sub-block error diffusion </li>
      <li> 3.7. Direct binary search </li>
    </ul>
  </li>
  <li> <a href="part4.html">4. Model-based dithering</a>
    <ul>
      <li> 4.1. Gaussian human visual system model </li>
      <li> 4.2. Direct binary search </li>
      <li> 4.3 Comparing dithering algorithms </li>
    </ul>
  </li>
  <li> <a href="part5.html">5. Greyscale dithering</a>
    <ul>
      <li> 5.1. Introducing gamma </li>
      <li> 5.2. Gamma correction </li>
      <li> 5.3. Greyscale sub-block error diffusion </li>
    </ul>
  </li>
  <li> <a href="part6.html">6. Colour dithering</a>
    <ul>
      <li> 6.1. Separate-space dithering </li>
      <li> 6.2. Accounting for other dimensions </li>
      <li> 6.3. Reducing visual artifacts </li>
      <li> 6.4. Colour sub-block error diffusion </li>
    </ul>
  </li>
  <li> <a href="part7.html">7. Photographic mosaics</a>
    <ul>
      <li> 7.1. Image classification </li>
      <li> 7.2. Error diffusion </li>
      <li> 7.3. Colour ASCII art </li>
    </ul>
  </li>
  <li> <a href="biblio.html">Bibliography</a> </li>
  <li> <a href="source.html">Source code</a> </li>
</ul>

<!--<div style="float: left;">
   <a href=""></a>
</div>-->
<div style="float: right;">
   <a href="part1.html">&gt;&gt;&gt; 1. Colour quantisation</a>
</div>

<?php $rev = '$Id$';
      include($_SERVER['DOCUMENT_ROOT'].'/footer.inc'); ?>

</body>
</html>
