<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html version="-//W3C//DTD XHTML 1.1//EN"
      xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/1999/xhtml
                          http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
  <meta name="google-site-verification" content="MxsMq6bdLOx0KSuz1MY6yG9ZTIJ7_7DVRfl5NCAT5Yg"/>
  <title>ImageMagick: MagickCore, C API for ImageMagick: Enhance an Image</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="Use ImageMagick to convert, edit, or compose bitmap images in a variety of formats.  In addition resize, rotate, shear, distort and transform images automagically."/>
  <meta name="application-url" content="http://www.imagemagick.org"/>
  <meta name="generator" content="PHP"/>
  <meta name="keywords" content="magickcore, c, api, for, imagemagick:, enhance, an, image, ImageMagick, PerlMagick, image processing, OpenMP, software development library, image, photo, software, Magick++, MagickWand"/>
  <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-2013 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="canonical" href="http://www.imagemagick.org" />
  <link rel="meta" type="application/rdf+xml" title="ICI" href="http://imagemagick.org/ici.rdf"/>
  <!-- Add jQuery library -->
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
  
  <!-- Optionaly include easing and/or mousewheel plugins -->
  <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.easing-1.3.pack.js"></script>
  <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.mousewheel-3.0.6.pack.js"></script>
  
  <!-- Add fancyBox -->
  <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/jquery.fancybox.css?v=2.0.4" type="text/css" media="screen" />
  <script type="text/javascript" src="http://www.imagemagick.org/fancybox/jquery.fancybox.pack.js?v=2.0.4"></script>
  
  <!-- Optionaly include button and/or thumbnail helpers -->
  <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-buttons.css?v=2.0.4" type="text/css" media="screen" />
  <script type="text/javascript" src="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-buttons.js?v=2.0.4"></script>
  
  <link rel="stylesheet" href="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-thumbs.css?v=2.0.4" type="text/css" media="screen" />
  <script type="text/javascript" src="http://www.imagemagick.org/fancybox/helpers/jquery.fancybox-thumbs.js?v=2.0.4"></script>
  <script type="text/javascript">
  	$(document).ready(function() {
  		$(".fancybox").fancybox();
  	});
  </script>
  <!-- ImageMagick style -->
  <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>
</head>

<body id="www-imagemagick-org">
<div class="titlebar">
<div style="margin: 17px auto; float: left;">
  <script type="text/javascript">
  <!--
    google_ad_client = "pub-3129977114552745";
    google_ad_slot = "5439289906";
    google_ad_width = 728;
    google_ad_height = 90;
  //-->
  </script>
  <script type="text/javascript"
    src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
  </script>
</div>
<a href="../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../discourse-server">
  <img src="../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../images/logo.jpg"
  alt="ImageMagick Logo"
  style="width: 123px; height: 118px; border: 0px; float: right;" /></a>
<a href="../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../index.html">
  <img src="../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../images/sprite.jpg"
  alt="ImageMagick Sprite"
  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="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: iOS" href="../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../www/binary-releases.html#iOS">iOS</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 rel="follow" title="Sponsors" href="../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../www/sponsors.html">Sponsors:</a>

  <a href="http://www.networkredux.com"> <img src="../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../images/networkredux.png" width="140" height="31" alt="[sponsor]" style="margin-top: 4px; margin-left: 4px; border: 0px; float: left;" /></a>
  <a href="http://www.dinodirect.com/ipads-tablets/"> <img src="../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../images/dino-direct.jpg" width="140" height="90" alt="[sponsor]" style="margin-top: 4px; margin-left: 4px; border: 0px; float: left;" /></a><!-- 201208010120 mickey@163... -->
<div class="sponsbox">
<div class="sponsor">
  <a rel="follow" title="Sponsor: The Fastest &amp; Easiest Way to Find Images" href="http://www.graphicsfactory.com">The Fastest &amp; Easiest Way to Find Images</a><!-- 201210010270 graphicsfac... -->
</div>
<div class="sponsor">
  <a rel="follow" title="Sponsor: VPS" href="http://www.interdominios.com/vps">VPS</a><!-- 201209010090 barsh@inter... -->
</div>
<div class="sponsor">
  <a rel="follow" title="Werbebanner Werbeplane" href="http://www.allesbanner.de">Werbebanner Werbeplane</a><!-- 201212010450 info@druck... -->
</div>
<div class="sponsor">
  <a rel="follow" title="Entertainment News &amp; Photos" href="http://www.zimbio.com">Entertainment News &amp; Photos</a><!-- 201211010540 bd@zimb... -->
</div>
<div class="sponsor">
  <a rel="follow" title="Sponsor: LED24" href="http://led24.de/">LED24</a><!-- 201207010270 info@led24... -->
</div>
<div class="sponsor">
  <a rel="follow" title="Sponsor: Best Website Hosting" href="http://www.top-cheap-web-hosting.com">Best Website Hosting</a><!-- 201304010090 eunge.liu-->
</div>
<div class="sponsor">
  <a rel="follow" title="Android Tablet" href="http://www.dinodirect.com/ipads-tablets/">Android Tablet</a><!-- 201208010120 mickey@163... -->
</div>
<div class="sponsor">
  <a rel="follow" title="Sponsor: Web Site Hosting" href="http://webhostinggeeks.com">Web Site Hosting</a><!-- 201302010900 funds@enmob... -->
</div>
<div class="sponsor">
   <a rel="follow" title="Sponsor: Premium Quality Stock Photos" href="http://www.f1online.pro/en/">Premium Quality Stock Photos</a><!-- 2012080100540 ... -->
</div>
<div class="sponsor">
   <a rel="follow" title="Sponsor: Druckerei" href="http://print24.com/de/">Druckerei</a><!-- 2012070100250 ... -->
</div>
<div class="sponsor">
  <a rel="follow" title="Sponsor: Managed Server" href="http://www.robhost.de">Managed Server</a><!-- 201210010720 klikics... -->
</div>
<div class="sponsor">
  <a rel="follow" title="Sponsor: Druckerei" href="http://www.allesdruck.de">Druckerei</a><!-- 201303011500 r.leo -->
</div>
<div class="sponsor">
   <a rel="follow" title="Sponsor: Notebook Reparatur" href="http://www.notebook-reparaturen-berlin.de">Notebook Reparatur</a><!-- 2012080100300 atlas-multimedia-->
</div>
<div class="sponsor">
   <a rel="follow" title="Sponsor: Fototapete - Tapetendruck" href="http://www.druck-expert.com/Fototapete-Tapetendruck,category,8830.html">Fototapete - Tapetendruck</a><!-- 2012100100155 info@druck-->
</div>
</div>
</div>
</div>

<div class="eastbar">
  <div class="g-plusone" id="gplusone"></div>
  <script type="text/javascript">
    window.___gcfg = {
      lang: 'en-US'
    };

    (function() {
      var po = document.createElement('script');
      po.type = 'text/javascript'; po.async = true;
      po.src = 'https://apis.google.com/js/plusone.js';
      var script = document.getElementsByTagName('script')[0];
      script.parentNode.insertBefore(po, script);
    })();
    var gplusone = document.getElementById("gplusone");
    gplusone.setAttribute("data-size","medium");
    gplusone.setAttribute("data-count","false");
  </script>
</div>

<div class="main">

<h1>Module enhance Methods</h1>
<p class="navigation-index">[<a href="enhance.html#AutoGammaImage">AutoGammaImage</a> &bull; <a href="enhance.html#AutoLevelImage">AutoLevelImage</a> &bull; <a href="enhance.html#BrightnessContrastImage">BrightnessContrastImage</a> &bull; <a href="enhance.html#ColorDecisionListImage">ColorDecisionListImage</a> &bull; <a href="enhance.html#ClutImage">ClutImage</a> &bull; <a href="enhance.html#ContrastImage">ContrastImage</a> &bull; <a href="enhance.html#ContrastStretchImage">ContrastStretchImage</a> &bull; <a href="enhance.html#EnhanceImage">EnhanceImage</a> &bull; <a href="enhance.html#EqualizeImage">EqualizeImage</a> &bull; <a href="enhance.html#GammaImage">GammaImage</a> &bull; <a href="enhance.html#HaldClutImage">HaldClutImage</a> &bull; <a href="enhance.html#LevelImage">LevelImage</a> &bull; <a href="enhance.html#LevelizeImage">LevelizeImage</a> &bull; <a href="enhance.html#LevelizeImageChannel">LevelizeImageChannel</a> &bull; <a href="enhance.html#LevelImageColor">LevelImageColor</a> &bull; <a href="enhance.html#LinearStretchImage">LinearStretchImage</a> &bull; <a href="enhance.html#ModulateImage">ModulateImage</a> &bull; <a href="enhance.html#NegateImage">NegateImage</a> &bull; <a href="enhance.html#The NormalizeImage">The NormalizeImage</a> &bull; <a href="enhance.html#SigmoidalContrastImage">SigmoidalContrastImage</a>]</p>

<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="AutoGammaImage">AutoGammaImage</a></h2>
<div class="doc-section">

<p>AutoGammaImage() extract the 'mean' from the image and adjust the image to try make set its gamma appropriatally.</p>

<p>The format of the AutoGammaImage method is:</p>

<pre class="code">
  MagickBooleanType AutoGammaImage(Image *image)
  MagickBooleanType AutoGammaImageChannel(Image *image,
    const ChannelType channel)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>The image to auto-level</p>

<h5>channel</h5>
<p>The channels to auto-level.  If the special 'SyncChannels' flag is set all given channels is adjusted in the same way using the mean average of those channels.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="AutoLevelImage">AutoLevelImage</a></h2>
<div class="doc-section">

<p>AutoLevelImage() adjusts the levels of a particular image channel by scaling the minimum and maximum values to the full quantum range.</p>

<p>The format of the LevelImage method is:</p>

<pre class="code">
  MagickBooleanType AutoLevelImage(Image *image)
  MagickBooleanType AutoLevelImageChannel(Image *image,
    const ChannelType channel)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>The image to auto-level</p>

<h5>channel</h5>
<p>The channels to auto-level.  If the special 'SyncChannels' flag is set the min/max/mean value of all given channels is used for all given channels, to all channels in the same way.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="BrightnessContrastImage">BrightnessContrastImage</a></h2>
<div class="doc-section">

<p>BrightnessContrastImage() changes the brightness and/or contrast of an image.  It converts the brightness and contrast parameters into slope and intercept and calls a polynomical function to apply to the image.</p>

<p>The format of the BrightnessContrastImage method is:</p>

<pre class="code">
  MagickBooleanType BrightnessContrastImage(Image *image,
    const double brightness,const double contrast)
  MagickBooleanType BrightnessContrastImageChannel(Image *image,
    const ChannelType channel,const double brightness,
    const double contrast)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>channel</h5>
<p>the channel.</p>

<h5>brightness</h5>
<p>the brightness percent (-100 .. 100).</p>

<h5>contrast</h5>
<p>the contrast percent (-100 .. 100).</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="ColorDecisionListImage">ColorDecisionListImage</a></h2>
<div class="doc-section">

<p>ColorDecisionListImage() accepts a lightweight Color Correction Collection (CCC) file which solely contains one or more color corrections and applies the correction to the image.  Here is a sample CCC file:</p>

<pre class="text">
      <ColorCorrectionCollection xmlns="urn:ASC:CDL:v1.2">
      <ColorCorrection id="cc03345">
            <SOPNode>
                 <Slope> 0.9 1.2 0.5 </Slope>
                 <Offset> 0.4 -0.5 0.6 </Offset>
                 <Power> 1.0 0.8 1.5 </Power>
            </SOPNode>
            <SATNode>
                 <Saturation> 0.85 </Saturation>
            </SATNode>
      </ColorCorrection>
      </ColorCorrectionCollection>
</pre>

<p>which includes the slop, offset, and power for each of the RGB channels as well as the saturation.</p>

<p>The format of the ColorDecisionListImage method is:</p>

<pre class="code">
  MagickBooleanType ColorDecisionListImage(Image *image,
    const char *color_correction_collection)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>color_correction_collection</h5>
<p>the color correction collection in XML.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="ClutImage">ClutImage</a></h2>
<div class="doc-section">

<p>ClutImage() replaces each color value in the given image, by using it as an index to lookup a replacement color value in a Color Look UP Table in the form of an image.  The values are extracted along a diagonal of the CLUT image so either a horizontal or vertial gradient image can be used.</p>

<p>Typically this is used to either re-color a gray-scale image according to a color gradient in the CLUT image, or to perform a freeform histogram (level) adjustment according to the (typically gray-scale) gradient in the CLUT image.</p>

<p>When the 'channel' mask includes the matte/alpha transparency channel but one image has no such channel it is assumed that that image is a simple gray-scale image that will effect the alpha channel values, either for gray-scale coloring (with transparent or semi-transparent colors), or a histogram adjustment of existing alpha channel values.   If both images have matte channels, direct and normal indexing is applied, which is rarely used.</p>

<p>The format of the ClutImage method is:</p>

<pre class="code">
  MagickBooleanType ClutImage(Image *image,Image *clut_image)
  MagickBooleanType ClutImageChannel(Image *image,
    const ChannelType channel,Image *clut_image)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image, which is replaced by indexed CLUT values</p>

<h5>clut_image</h5>
<p>the color lookup table image for replacement color values.</p>

<h5>channel</h5>
<p>the channel.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="ContrastImage">ContrastImage</a></h2>
<div class="doc-section">

<p>ContrastImage() enhances the intensity differences between the lighter and darker elements of the image.  Set sharpen to a MagickTrue to increase the image contrast otherwise the contrast is reduced.</p>

<p>The format of the ContrastImage method is:</p>

<pre class="code">
  MagickBooleanType ContrastImage(Image *image,
    const MagickBooleanType sharpen)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>sharpen</h5>
<p>Increase or decrease image contrast.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="ContrastStretchImage">ContrastStretchImage</a></h2>
<div class="doc-section">

<p>ContrastStretchImage() is a simple image enhancement technique that attempts to improve the contrast in an image by `stretching' the range of intensity values it contains to span a desired range of values. It differs from the more sophisticated histogram equalization in that it can only apply a linear scaling function to the image pixel values.  As a result the `enhancement' is less harsh.</p>

<p>The format of the ContrastStretchImage method is:</p>

<pre class="code">
  MagickBooleanType ContrastStretchImage(Image *image,
    const char *levels)
  MagickBooleanType ContrastStretchImageChannel(Image *image,
    const size_t channel,const double black_point,
    const double white_point)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>channel</h5>
<p>the channel.</p>

<h5>black_point</h5>
<p>the black point.</p>

<h5>white_point</h5>
<p>the white point.</p>

<h5>levels</h5>
<p>Specify the levels where the black and white points have the range of 0 to number-of-pixels (e.g. 1, 10x90, etc.).</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="EnhanceImage">EnhanceImage</a></h2>
<div class="doc-section">

<p>EnhanceImage() applies a digital filter that improves the quality of a noisy image.</p>

<p>The format of the EnhanceImage method is:</p>

<pre class="code">
  Image *EnhanceImage(const Image *image,ExceptionInfo *exception)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>exception</h5>
<p>return any errors or warnings in this structure.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="EqualizeImage">EqualizeImage</a></h2>
<div class="doc-section">

<p>EqualizeImage() applies a histogram equalization to the image.</p>

<p>The format of the EqualizeImage method is:</p>

<pre class="code">
  MagickBooleanType EqualizeImage(Image *image)
  MagickBooleanType EqualizeImageChannel(Image *image,
    const ChannelType channel)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>channel</h5>
<p>the channel.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="GammaImage">GammaImage</a></h2>
<div class="doc-section">

<p>GammaImage() gamma-corrects a particular image channel.  The same image viewed on different devices will have perceptual differences in the way the image's intensities are represented on the screen.  Specify individual gamma levels for the red, green, and blue channels, or adjust all three with the gamma parameter.  Values typically range from 0.8 to 2.3.</p>

<p>You can also reduce the influence of a particular channel with a gamma value of 0.</p>

<p>The format of the GammaImage method is:</p>

<pre class="code">
  MagickBooleanType GammaImage(Image *image,const char *level)
  MagickBooleanType GammaImageChannel(Image *image,
    const ChannelType channel,const double gamma)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>channel</h5>
<p>the channel.</p>

<h5>level</h5>
<p>the image gamma as a string (e.g. 1.6,1.2,1.0).</p>

<h5>gamma</h5>
<p>the image gamma.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="HaldClutImage">HaldClutImage</a></h2>
<div class="doc-section">

<p>HaldClutImage() applies a Hald color lookup table to the image.  A Hald color lookup table is a 3-dimensional color cube mapped to 2 dimensions. Create it with the HALD coder.  You can apply any color transformation to the Hald image and then use this method to apply the transform to the image.</p>

<p>The format of the HaldClutImage method is:</p>

<pre class="code">
  MagickBooleanType HaldClutImage(Image *image,Image *hald_image)
  MagickBooleanType HaldClutImageChannel(Image *image,
    const ChannelType channel,Image *hald_image)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image, which is replaced by indexed CLUT values</p>

<h5>hald_image</h5>
<p>the color lookup table image for replacement color values.</p>

<h5>channel</h5>
<p>the channel.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="LevelImage">LevelImage</a></h2>
<div class="doc-section">

<p>LevelImage() adjusts the levels of a particular image channel by scaling the colors falling between specified white and black points to the full available quantum range.</p>

<p>The parameters provided represent the black, and white points.  The black point specifies the darkest color in the image. Colors darker than the black point are set to zero.  White point specifies the lightest color in the image.  Colors brighter than the white point are set to the maximum quantum value.</p>

<p>If a '!' flag is given, map black and white colors to the given levels rather than mapping those levels to black and white.  See LevelizeImageChannel() and LevelizeImageChannel(), below.</p>

<p>Gamma specifies a gamma correction to apply to the image.</p>

<p>The format of the LevelImage method is:</p>

<pre class="code">
  MagickBooleanType LevelImage(Image *image,const char *levels)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>levels</h5>
<p>Specify the levels where the black and white points have the range of 0-QuantumRange, and gamma has the range 0-10 (e.g. 10x90+2). A '!' flag inverts the re-mapping.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="LevelizeImage">LevelizeImage</a></h2>
<div class="doc-section">

<p>LevelizeImage() applies the normal level operation to the image, spreading out the values between the black and white points over the entire range of values.  Gamma correction is also applied after the values has been mapped.</p>

<p>It is typically used to improve image contrast, or to provide a controlled linear threshold for the image. If the black and white points are set to the minimum and maximum values found in the image, the image can be normalized.  or by swapping black and white values, negate the image.</p>

<p>The format of the LevelizeImage method is:</p>

<pre class="code">
  MagickBooleanType LevelizeImage(Image *image,const double black_point,
    const double white_point,const double gamma)
  MagickBooleanType LevelizeImageChannel(Image *image,
    const ChannelType channel,const double black_point,
    const double white_point,const double gamma)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>channel</h5>
<p>the channel.</p>

<h5>black_point</h5>
<p>The level which is to be mapped to zero (black)</p>

<h5>white_point</h5>
<p>The level which is to be mapped to QuantiumRange (white)</p>

<h5>gamma</h5>
<p>adjust gamma by this factor before mapping values. use 1.0 for purely linear stretching of image color values</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="LevelizeImageChannel">LevelizeImageChannel</a></h2>
<div class="doc-section">

<p>LevelizeImageChannel() applies the reversed LevelImage() operation to just the specific channels specified.  It compresses the full range of color values, so that they lie between the given black and white points. Gamma is applied before the values are mapped.</p>

<p>LevelizeImageChannel() can be called with by using a +level command line API option, or using a '!' on a -level or LevelImage() geometry string.</p>

<p>It can be used for example de-contrast a greyscale image to the exact levels specified.  Or by using specific levels for each channel of an image you can convert a gray-scale image to any linear color gradient, according to those levels.</p>

<p>The format of the LevelizeImageChannel method is:</p>

<pre class="code">
  MagickBooleanType LevelizeImageChannel(Image *image,
    const ChannelType channel,const char *levels)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>channel</h5>
<p>the channel.</p>

<h5>black_point</h5>
<p>The level to map zero (black) to.</p>

<h5>white_point</h5>
<p>The level to map QuantiumRange (white) to.</p>

<h5>gamma</h5>
<p>adjust gamma by this factor before mapping values.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="LevelImageColor">LevelImageColor</a></h2>
<div class="doc-section">

<p>LevelImageColor() maps the given color to "black" and "white" values, linearly spreading out the colors, and level values on a channel by channel bases, as per LevelImage().  The given colors allows you to specify different level ranges for each of the color channels separately.</p>

<p>If the boolean 'invert' is set true the image values will modifyed in the reverse direction. That is any existing "black" and "white" colors in the image will become the color values given, with all other values compressed appropriatally.  This effectivally maps a greyscale gradient into the given color gradient.</p>

<p>The format of the LevelColorsImageChannel method is:</p>

<pre class="code">
      MagickBooleanType LevelColorsImage(Image *image,
  const MagickPixelPacket *black_color,
  const MagickPixelPacket *white_color,const MagickBooleanType invert)
      MagickBooleanType LevelColorsImageChannel(Image *image,
  const ChannelType channel,const MagickPixelPacket *black_color,
  const MagickPixelPacket *white_color,const MagickBooleanType invert)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>channel</h5>
<p>the channel.</p>

<h5>black_color</h5>
<p>The color to map black to/from</p>

<h5>white_point</h5>
<p>The color to map white to/from</p>

<h5>invert</h5>
<p>if true map the colors (levelize), rather than from (level)</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="LinearStretchImage">LinearStretchImage</a></h2>
<div class="doc-section">

<p>LinearStretchImage() discards any pixels below the black point and above the white point and levels the remaining pixels.</p>

<p>The format of the LinearStretchImage method is:</p>

<pre class="code">
  MagickBooleanType LinearStretchImage(Image *image,
    const double black_point,const double white_point)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>black_point</h5>
<p>the black point.</p>

<h5>white_point</h5>
<p>the white point.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="ModulateImage">ModulateImage</a></h2>
<div class="doc-section">

<p>ModulateImage() lets you control the brightness, saturation, and hue of an image.  Modulate represents the brightness, saturation, and hue as one parameter (e.g. 90,150,100).  If the image colorspace is HSL, the modulation is lightness, saturation, and hue.  And if the colorspace is HWB, use blackness, whiteness, and hue.</p>

<p>The format of the ModulateImage method is:</p>

<pre class="code">
  MagickBooleanType ModulateImage(Image *image,const char *modulate)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>modulate</h5>
<p>Define the percent change in brightness, saturation, and hue.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="NegateImage">NegateImage</a></h2>
<div class="doc-section">

<p>NegateImage() negates the colors in the reference image.  The grayscale option means that only grayscale values within the image are negated.</p>

<p>The format of the NegateImageChannel method is:</p>

<pre class="code">
  MagickBooleanType NegateImage(Image *image,
    const MagickBooleanType grayscale)
  MagickBooleanType NegateImageChannel(Image *image,
    const ChannelType channel,const MagickBooleanType grayscale)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>channel</h5>
<p>the channel.</p>

<h5>grayscale</h5>
<p>If MagickTrue, only negate grayscale pixels within the image.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="The_NormalizeImage">The NormalizeImage</a></h2>
<div class="doc-section">

<p>The NormalizeImage() method enhances the contrast of a color image by mapping the darkest 2 percent of all pixel to black and the brightest 1 percent to white.</p>

<p>The format of the NormalizeImage method is:</p>

<pre class="code">
  MagickBooleanType NormalizeImage(Image *image)
  MagickBooleanType NormalizeImageChannel(Image *image,
    const ChannelType channel)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>channel</h5>
<p>the channel.</p>

 </div>
<h2><a href="http://www.imagemagick.org/api/MagickCore/enhance_8c.html" id="SigmoidalContrastImage">SigmoidalContrastImage</a></h2>
<div class="doc-section">

<p>SigmoidalContrastImage() adjusts the contrast of an image with a non-linear sigmoidal contrast algorithm.  Increase the contrast of the image using a sigmoidal transfer function without saturating highlights or shadows. Contrast indicates how much to increase the contrast (0 is none; 3 is typical; 20 is pushing it); mid-point indicates where midtones fall in the resultant image (0 is white; 50 is middle-gray; 100 is black).  Set sharpen to MagickTrue to increase the image contrast otherwise the contrast is reduced.</p>

<p>The format of the SigmoidalContrastImage method is:</p>

<pre class="code">
  MagickBooleanType SigmoidalContrastImage(Image *image,
    const MagickBooleanType sharpen,const char *levels)
  MagickBooleanType SigmoidalContrastImageChannel(Image *image,
    const ChannelType channel,const MagickBooleanType sharpen,
    const double contrast,const double midpoint)
</pre>

<p>A description of each parameter follows:</p>

<h5>image</h5>
<p>the image.</p>

<h5>channel</h5>
<p>the channel.</p>

<h5>sharpen</h5>
<p>Increase or decrease image contrast.</p>

<h5>alpha</h5>
<p>strength of the contrast, the larger the number the more 'threshold-like' it becomes.</p>

<h5>beta</h5>
<p>midpoint of the function as a color value 0 to QuantumRange.</p>

 </div>

</div>

<div id="linkbar">
    <span id="linkbar-west">&nbsp;</span>
    <span id="linkbar-center">
      <a href="../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../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-2013 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>
