<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  <meta name="verify-v1" content="g222frIIxcQTrvDR3NBRUSKP3AnMNoqxOkIniCEkV7U="/>
  <title>ImageMagick: Color Reduction Utilizing Adaptive Spatial Subdivision</title>
  <meta http-equiv="Content-Language" content="en-US"/>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <meta http-equiv="Reply-to" content="magick-users@imagemagick.org"/>
  <meta name="Application-name" content="ImageMagick"/>
  <meta name="Description" content="ImageMagick is a software suite to create, edit, compose, or convert bitmap images in a variety of formats. Use ImageMagick to scale, rotate, shear, distort and transform images."/>
  <meta name="Application-url" content="http://www.imagemagick.org"/>
  <meta name="Generator" content="PHP"/>
  <meta name="Keywords" content="color, reduction, utilizing, adaptive, spatial, subdivision, ImageMagick, ImageMagic, MagickCore, MagickWand, PerlMagick, Magick++, RMagick, PythonMagick, JMagick, TclMagick, Image, Magick, Magic, Wand, ImageMagickObject, Swiss, Army, Knife, Image, Processing"/>
  <meta name="Rating" content="GENERAL"/>
  <meta name="Robots" content="INDEX, FOLLOW"/>
  <meta name="Generator" content="ImageMagick Studio LLC"/>
  <meta name="Author" content="ImageMagick Studio LLC"/>
  <meta name="Revisit-after" content="2 DAYS"/>
  <meta name="Resource-type" content="document"/>
  <meta name="Copyright" content="Copyright (c) 1999-2011 ImageMagick Studio LLC"/>
  <meta name="Distribution" content="Global"/>
  <link rel="icon" href="../images/wand.png"/>
  <link rel="shortcut icon" href="../images/wand.ico"  type="images/x-icon"/>
  <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>
  <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" />
  <style type="text/css" media="all">
    @import url("../www/magick.css");
  </style>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  <script type="text/javascript" src="../fancybox/jquery.fancybox-1.3.4.pack.js"></script>
  <link rel="stylesheet" type="text/css" href="../fancybox/jquery.fancybox-1.3.4.css" media="screen" />
  <script type="text/javascript">
    $(document).ready(function() {
      $("a[href$=.jpg],a[href$=.png],a[href$=.gif]").fancybox({
        'transitionIn'  : 'elastic',
        'transitionOut' : 'elastic',
        'overlayShow'   : false,
        'opacity'       : true
      });
    });
  </script>
</head>

<body id="www-imagemagick-org">
<div class="titlebar">
<a href="../index.html">
  <img src="../images/script.png" alt="[ImageMagick]"
  style="width: 350px; height: 60px; margin: 28px auto; float: left;" /></a>
<a href="http://www.networkredux.com">
  <img src="../images/networkredux.png" alt="[sponsor]"
  style="margin-top: 42px; border: 0px; float: left;" /></a>
<a href="http://www.imagemagick.org/discourse-server/">
  <img src="../images/logo.jpg" alt=""
  style="width: 123px; height: 118px; border: 0px; float: right;" /></a>
<a href="../index.html">
  <img src="../images/sprite.jpg" alt=""
  style="width: 114px; height: 118px; border: 0px; float: right;" /></a>
</div>

<div class="westbar">

<div class="menu">
  <a title="About ImageMagick" href="../index.html">About ImageMagick</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Binary Releases" href="../www/binary-releases.html">Binary Releases</a>
</div>
<div class="sub">
    <a title="Binary Release: Unix" href="../www/binary-releases.html#unix">Unix</a>
</div>
<div class="sub">
    <a title="Binary Release: MacOS X" href="../www/binary-releases.html#macosx">Mac OS X</a>
</div>
<div class="sub">
    <a title="Binary Release: Windows" href="../www/binary-releases.html#windows">Windows</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Command-line Tools" href="../www/command-line-tools.html">Command-line Tools</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Processing" href="../www/command-line-processing.html">Processing</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Options" href="../www/command-line-options.html">Options</a>
</div>
<div class="sub">
    <a title="Command-line Tools: Usage" href="http://www.imagemagick.org/Usage/">Usage</a>
</div>
<div class="menu">
  <a title="Program Interfaces" href="../www/api.html">Program Interfaces</a>
</div>
<div class="sub">
    <a title="Program Interface: MagickWand" href="../www/magick-wand.html">MagickWand</a>
</div>
<div class="sub">
    <a title="Program Interface: MagickCore" href="../www/magick-core.html">MagickCore</a>
</div>
<div class="sub">
    <a title="Program Interface: PerlMagick" href="../www/perl-magick.html">PerlMagick</a>
</div>
<div class="sub">
    <a title="Program Interface: Magick++" href="../www/magick++.html">Magick++</a>
</div>
<div class="sep"></div>
<div  class="menu">
   <a title="Install from Source" href="../www/install-source.html">Install from Source</a>
</div>
<div class="sub">
    <a title="Install from Source: Unix" href="../www/install-source.html#unix">Unix</a>
</div>
<div class="sub">
    <a title="Install from Source: Windows" href="../www/install-source.html#windows">Windows</a>
 </div>
<div class="menu">
  <a title="Resources" href="../www/resources.html">Resources</a>
</div>
<div class="menu">
  <a title="Architecture" href="../www/architecture.html">Architecture</a>
</div>
<div class="menu">
  <a title="Download" href="../www/download.html">Download</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Search" href="../www/search.html">Search</a>
</div>
<div class="sep"></div>
<div class="menu">
  <a title="Site Map" href="../www/sitemap.html">Site Map</a>
</div>
<div  class="sub">
  <a title="Site Map: Links" href="../www/links.html">Links</a>
</div>
<div class="sep"></div>
<div  class="menu">
  <a title="Sponsors" href="../www/sponsors.html">Sponsors:</a>

<div class="sponsbox">
<div  class="sponsor">
  <a title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201106010240 -->
</div>
<div class="sponsor">
  <a title="Sponsor: Web Hosting" href="http://www.bodhost.com/hosting.shtml">Web Hosting</a><!-- 201104010090 -->
</div>
<div  class="sponsor">
  <a title="Sponsor: Image Converter" href="http://www.batchphoto.com">Image Converter</a><!-- 201103010900 Bits Coffee-->
</div>
<div  class="sponsor">
  <a title="Sponsor: Flyer drucken" href="http://www.online-druck.biz">Flyer drucken</a><!-- 201109010900 Floeter-->
</div>
<div  class="sponsor">
  <a title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 201110010720 -->
</div>
<div  class="sponsor">
   <a title="Sponsor: Notebook Reparatur Berlin" href="http://www.notebook-reparaturen-berlin.de">Notebook Reparatur Berlin</a><!-- 2011050100025 gabi.schulze-->
</div>
</div>
</div>
</div>

<div class="eastbar">
  <script type="text/javascript">
  <!--
    google_ad_client = "pub-3129977114552745";
    google_ad_slot = "0574824969";
    google_ad_width = 160;
    google_ad_height = 600;
  //-->
  </script>
  <script type="text/javascript"
    src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
  </script>
</div>

<div class="main">

<h1>ImageMagick Color Reduction</h1>
<p class="navigation-index">[<a href="#describe">Algorithm Description</a> &bull; <a href="#measure">Measuring Color Reduction Error</a>]</p>

<div class="doc-section">
<p>This document describes how ImageMagick performs color reduction on an image. To fully understand what follows, you should have a knowledge of basic imaging techniques and the tree data structure and terminology.</p>
</div>

<h2><a id="describe"></a>Algorithm Description</h2>
<div class="doc-section">

<p>For purposes of color allocation, an image is a set of <em>n</em> pixels, where each pixel is a point in RGB space. RGB space is a 3-dimensional vector space, and each pixel, <em>p(i)</em>, is defined by an ordered triple of red, green, and blue coordinates, (<em>r(i)</em>, <em>g(i)</em>, <em>b(i)</em>).</p>

<p>Each primary color component (<em>red</em>, <em>green</em>, or <em>blue</em>) represents an intensity which varies linearly from 0 to a maximum value, <em>Cmax</em>, which corresponds to full saturation of that color. Color allocation is defined over a domain consisting of the cube in RGB space with opposite vertices at (0, 0, 0) and (<em>Cmax</em>, <em>Cmax</em>, <em>Cmax</em>).  ImageMagick requires <em>Cmax</em>= <em>255</em>.</p>

<p>The algorithm maps this domain onto a tree in which each node represents a cube within that domain. In the following discussion, these cubes are defined by the coordinate of two opposite vertices: The vertex nearest the origin in RGB space and the vertex farthest from the origin.</p>

<p>The tree's root node represents the entire domain, (0,0,0) through (<em>Cmax</em>, <em>Cmax</em>, <em>Cmax</em>). Each lower level in the tree is generated by subdividing one node's cube into eight smaller cubes of equal size. This corresponds to bisecting the parent cube with planes passing through the midpoints of each edge.</p>

<p>The basic algorithm operates in three phases:</p>

<ol>
  <li>Classification</li>
  <li>Reduction</li>
  <li>Assignment</li>
</ol>

<p><b>Classification</b></p>

<p>Classification builds a color description tree for the image. Reduction collapses the tree until the number it represents, at most, is the number of colors desired in the output image. Assignment defines the output image's color map and sets each pixel's color by reclassification in the reduced tree.  <em>Our goal is to minimize the numerical discrepancies between the original colors and quantized colors</em>. To learn more about quantization error, see <a href="#measure">Measuring Color Reduction Error</a>.</p>

<p>Classification begins by initializing a color description tree of sufficient depth to represent each possible input color in a leaf. However, it is impractical to generate a fully-formed color description tree in the classification phase for realistic values of <em>Cmax</em>. If color components in the input image are quantized to <em>k</em>-bit precision, so that <em>Cmax</em> = <em>2^k-1</em>, the tree would need <em>k</em> levels below the root node to allow representing each possible input color in a leaf.  This becomes prohibitive because the tree's total number of nodes:</p>

<pre class="text">
  total nodes = 1+Sum(8^i), i=1,k

  For k=8,
  nodes = 1 + (8^1+8^2+....+8^8)
        = 1 + 8(8^8 - 1)/(8 - 1)
        = 19,173,961
</pre>

<p>Therefore, to avoid building a fully populated tree, ImageMagick:</p>

<ol>
  <li>initializes data structures for nodes only as they are needed;</li>
  <li>chooses a maximum depth for the tree as a function of the desired number of colors in the output image (currently the <em>base-two</em> logarithm of <em>Cmax</em>).</li>
</ol>

<pre class="text">
  For Cmax=255,
  maximum tree depth = log<sub>2</sub>(256)
                     = 8
</pre>

<p>A tree of this depth generally allows the best representation of the source image with the fastest computational speed and the least amount of memory. However, the default depth is inappropriate for some images. Therefore, the caller can request a specific tree depth.</p>

<p>For each pixel in the input image, classification scans downward from the root of the color description tree. At each level of the tree, it identifies the single node which represents a cube in RGB space containing the pixels' color. It updates the following data for each such node:</p>

<dl class="doc">
<dt class="doc">n1</dt>
	<dd>number of pixels whose color is contained in the RGB cube which this node represents;</dd>
<dt class="doc">n2</dt>
  <dd>number of pixels whose color is not represented in a node at lower depth in the tree; initially, <em>n2=0</em> for all nodes except leaves of the tree.</dd>
<dt class="doc">Sr,Sg,Sb</dt>
  <dd>sums of the <em>red</em>, <em>green</em>, and <em>blue</em> component values for all pixels not classified at a lower depth. The combination of these sums and <em>n2</em> will ultimately characterize the mean color of a set of pixels represented by this node.</dd>
<dt class="doc">E</dt>
  <dd>the distance squared in RGB space between each pixel contained within a node and the nodes' center. This represents the quantization error for a node.</dd>
</dl>

<p><b>Reduction</b></p>

<p>Reduction repeatedly prunes the tree until the number of nodes with <em>n2</em> &gt; <em>0</em> is less than or equal to the maximum number of colors allowed in the output image. On any given iteration over the tree, it selects those nodes whose <em>E</em> value is minimal for pruning and merges their color statistics upward. It uses a pruning threshold, <em>Ep</em>, to govern node selection as follows:</p>

<pre class="text">
  Ep = 0
  while number of nodes with (n2 &gt; 0) &gt; required maximum number of colors
     prune all nodes such that E &lt;= Ep
     Set Ep  to minimum E in remaining nodes
</pre>

<p>This has the effect of minimizing any quantization error when merging two nodes together.</p>

<p>When a node to be pruned has offspring, the pruning procedure invokes itself recursively in order to prune the tree from the leaves upward. The values of <em>n2</em>, <em>Sr</em>, <em>Sg</em>, and <em>Sb</em> in a node being pruned are always added to the corresponding data in that node's parent. This retains the pruned node's color characteristics for later averaging.</p>

<p>For each node, <em>n2</em> pixels exist for which that node represents the smallest volume in RGB space containing those pixel's colors. When <em>n2</em> &gt; <em>0</em> the node will uniquely define a color in the output image. At the beginning of reduction, <em>n2</em> = <em>0</em> for all nodes except the leaves of the tree which represent colors present in the input image.</p>

<p>The other pixel count, <em>n1</em>, indicates the total number of colors within the cubic volume which the node represents. This includes <em>n1</em> - <em>n2</em> pixels whose colors should be defined by nodes at a lower level in the tree.</p>

<p><b>Assignment</b></p>

<p>Assignment generates the output image from the pruned tree. The output image consists of two parts:</p>
<ol>
  <li>A color map, which is an array of color descriptions (RGB triples) for each color present in the output image.</li>

  <li>A pixel array, which represents each pixel as an index into the color map array.</li>
</ol>

<p>First, the assignment phase makes one pass over the pruned color description tree to establish the image's color map. For each node with <em>n2</em> &gt; <em>0</em>, it divides <em>Sr</em>, <em>Sg</em>, and <em>Sb</em> by <em>n2</em>. This produces the mean color of all pixels that classify no lower than this node. Each of these colors becomes an entry in the color map.</p>

<p>Finally, the assignment phase reclassifies each pixel in the pruned tree to identify the deepest node containing the pixel's color. The pixel's value in the pixel array becomes the index of this node's mean color in the color map.</p>

<p>Empirical evidence suggests that the distances in color spaces such as YUV, or YIQ correspond to perceptual color differences more closely than do distances in RGB space.  These color spaces may give better results when color reducing an image. Here the algorithm is as described except each pixel is a point in the alternate color space. For convenience, the color components are normalized to the range 0 to a maximum value, <em>Cmax</em>. The color reduction can then proceed as described.</p>

</div>

<h2><a id="measure"></a>Measuring Color Reduction Error</h2>
<div class="doc-section">

<p>Depending on the image, the color reduction error may be obvious or invisible. Images with high spatial frequencies (such as hair or grass) will show error much less than pictures with large smoothly shaded areas (such as faces). This because the high-frequency contour edges introduced by the color reduction process are masked by the high frequencies in the image.</p>

<p>To measure the difference between the original and color reduced images (the total color reduction error), ImageMagick sums over all pixels in an image the distance squared in RGB space between each original pixel value and its color reduced value. ImageMagick prints several error measurements including the mean error per pixel, the normalized mean error, and the normalized maximum error.</p>

<p>The normalized error measurement can be used to compare images.  In general, the closer the mean error is to zero the more the quantized image resembles the source image. Ideally, the error should be perceptually-based, since the human eye is the final judge of quantization quality.</p>

<p>These errors are measured and printed when the <a href="../www/command-line-options.html#colors">-colors</a> and <a href="../www/command-line-options.html#verbose">-verbose</a> options are specified on the <a href="../www/convert.html">convert</a> command line:</p>

<dl class="doc">
<dt class="doc">mean error per pixel</dt>
  <dd>is the mean error for any single pixel in the image.</dd>
<dt class="doc">normalized mean square error</dt>
  <dd>is the normalized mean square quantization error for any single pixel in the image. This distance measure is normalized to a range between 0 and 1. It is independent of the range of red, green, and blue values in the image.</dd>
<dt class="doc">normalized maximum square error</dt>
  <dd>is the largest normalized square quantization error for any single pixel in the image. This distance measure is normalized to a range between of red, green, and blue values in the image.</dd>
</dl>

</div>


</div>

<div id="linkbar">
    <span id="linkbar-west">&nbsp;</span>
    <span id="linkbar-center">
      <a href="http://www.imagemagick.org/discourse-server/">Discourse Server</a> &bull;
      <a href="http://www.imagemagick.org/MagickStudio/scripts/MagickStudio.cgi">Studio</a>
    </span>
    <span id="linkbar-east">&nbsp;</span>
  </div>
  <div class="footer">
    <span id="footer-west">&copy; 1999-2011 ImageMagick Studio LLC</span>
    <span id="footer-east"> <a href="http://www.imagemagick.org/script/contact.php">Contact the Wizards</a></span>
  </div>
  <div style="clear: both; margin: 0; width: 100%; "></div>
  <script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-17690367-1']);
    _gaq.push(['_trackPageview']);

    (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
  </script>
</body>
</html>
