.TH TONE 3 "10 May 1991"
.SH NAME
im_tone_build, im_tone_map, im_tone_analyse, im_tone_build_range \- tone-curve adjustment of LAB
images
.SH SYNOPSIS

int 
.br
im_tone_build_range( 
.br
   int in_max, int out_max,
.br
   IMAGE *lut, 
.br
   double Lb, double Lw,
.br
   double Ps, double Pm, double Ph,
.br
   double S, double M, double H )

int 
.br
im_tone_build( 
.br
   IMAGE *lut, 
.br
   double Lb, double Lw,
.br
   double Ps, double Pm, double Ph,
.br
   double S, double M, double H )

int 
.br
im_tone_analyse( 
.br
   IMAGE *in, 
.br
   IMAGE *lut, 
.br
   double Ps, double Pm, double Ph,
.br
   double S, double M, double H )

int 
.br
im_tone_map( IMAGE *in, IMAGE *out, IMAGE *lut )

.SH DESCRIPTION
Various functions relating to tone curve adjustment. Example tone curve:

 repro L* out
     ^ 
     |
 100 | . . . . . . . . . . . . . . . .*      
     |                              * .                              
  Lw | . . . . . . . . . . . . . .*   .                    
     |                          * .   .                           
     |                        /*  .   .                         
     |                      / *   .   .                       
     |                    / .*    .   .                     
     |              * * /* *.     .   .                   
     |           * *  /     .     .   .                 
     |         *    / .     .     .   .               
     |        *   /   .     .     .   .             
     |       *  /     .     .     .   .           
     |      * / .     .     .     .   .         
     |     */   .     .     .     .   .       
  Lb | . .*     .     .     .     .   .     
     |  * .     .     .     .     .   .   
     |*   .     .     .     .     .   . 
   0 +--------------------------------------->
     0    Lb    Ls    Lm    Lh    Lw  100   L* in

.B im_tone_build_range(3)
generates a tone curve for the adjustment of image levels. The curve is
an unsigned 16-bit image with (in_max + 1) entries, each in the range [0,
out_max].

The parameters are
expressed as 0-100, as in LAB colour space, but you specify the scaling for the
input and output images with the in_max and out_max parameters.

Parameters:

    Lb  - black point
    Lw  - white point	

Both in L* units, ie. in the range [0,100]. These should be set by histogram
analysis of the image to be transformed to 0.1% and 99.9% of the full range of
the image. See im_tone_analyse() below.
 
    Ps  - shadow point
    Pm  - mid-tone point
    Ph  - highlight point
 
All in [0,1], meaning max of shadow section of curve should be positioned
at Lb+Ps(Lw-Lb), etc. Suggested values: Ps, Pm, Ph should be 0.2, 0.5 and 0.8.
Ps is limited to the range [0.1,0.3], Pm to the range [0.4,0.6] and Ph to
[0.7,0.9].
 
    S  - shadow adjustment factor (+/- 15)
    M  - mid-tone adjustment factor (+/- 30)
    H  - highlight adjustment factor (+/- 15)

These are the principal parameters, controlling the brightness in the shadow,
mid-tone and highlight areas. Suggested values:

    0, 0,  0   - no change to input image
    5, 0, -2   - boost shadows a little, depress highlights slightly

.B im_tone_build(3)
is a convenience function that calls 
.B im_tone_build_range(3)
with ranges suitable for tone correcting a LABQ image to a LABS image.

Use 
.B im_ismonotonic(3) 
to check that the slope of your tone curve is always >0,
use 
.B im_histplot(3) 
to graph the curve, use 
.B im_tone_map(3) 
to apply your curve to an image.

.B im_tone_map(3)
map just the L channel of a LabQ or LabS image through a tone
curve.

.B im_tone_analyse(3)
find the histogram of a LabS or LabQ image and use that to
set the Ln and Lw parameters of 
.B im_tone_build(3). 
All other parameters as above.

Example:

  example% im_tone_analyse $VIPSHOME/pics/master.v /tmp/lut.v \
     0.2 0.5 0.8 6.3 0.8 -3
  example% im_ismonotonic /tmp/lut.v
  255
  example% im_tone_map $VIPSHOME/pics/master.v /tmp/master2.v /tmp/lut.v

.SH RETURN VALUE
All functions returns 0 on success and -1 on error.
.SH SEE ALSO
im_histplot(3), im_ismonotonic(3).
.SH COPYRIGHT
1995, National Gallery 
.SH AUTHORS
J. Cupitt
