.TH IM_SHARPEN 3 "16 May 1995"
.SH NAME
im_sharpen \- simple coring edge enhancement
.SH SYNOPSIS
#include <vips/vips.h>

int 
.br
im_sharpen( in, out, mask_radius, x1, y2, y3, m1, m2 )
.br
IMAGE *in, *out;
.br
int mask_radius;
.br
double x1, y2, y3;
.br
double m1, m2;

.SH DESCRIPTION
This function selectively sharpens the L* channel of a LABPACK coded image. It
is suitable for preparing an image for printing, where edges need to be
boosted to compensate for blurring introduced by the half-tone process, and
also for giving any additional `crispening' required.

The function operates as:

  in    gaussian                                   out
  --+-> blur with ----> subtract --> LUT --> add ---->
    |   mask_radius        ^                  ^
    |                      |                  |
    +----------------------+                  |
    |                                         |
    +-----------------------------------------+

In other words, the L* channel is smoothed with a gaussian average function of
radius mask_radius and this smoothed image is subtracted from the
original L* to generate a high-frequency signal.

This high-frequency signal is passed through a look-up table specified by the
x1, y2, y3, m1 and m2 parameters and added back to the original L* channel to
generate the sharpened image.

The LUT is shaped as:

                      ^
                   y2 |- - - - - -----------
                      |         / 
                      |        / slope m2
                      |    .../    
              -x1     | ...   |    
  -------------------...---------------------->
              |   ... |      x1           
              |... slope m1
              /       |
             / m2     |
            /         |
           /          |
          /           |
         /            |
  ______/ _ _ _ _ _ _ | -y3
                      |

When trying to understand the meaning of these parameters, it is helpful to
imagine a cross-section through an image. Sharpening filters boost apparent
sharpness by performing the following transformation. Consider a cross-section
through a soft edge:

                      ^
                      |          ..........  
                      |      ....      
                      |   ...         
                      | ..           
                      |.           
  --------------------+------------------->
                     .|                        
                   .. |
                ...   |
            ....      |
  ..........          |
                      |

This becomes an enhanced edge, perhaps:

                      ^
                      |   ...    overshoot
                      |  .   .   
                      | .     ............  
                      | .              
                      |.           
                       .             
                      .            
  --------------------+------------------->
                      .                        
                     .|
                     .|
                    . |
  .............     . |
               .   .  |
    undershoot  ...   |
                      |

There are two features: the transition from black to white has become 
steeper, and there are positive and negative undershoots and overshoots.

As a general guide, some overshoot is good for printing (it helps exaggerate 
the edge), but not too much, as you will start to see strong white fringes.
Undershoot introduces black lines, which are less intrusive, so you can allow
more under- than over-shoot.

im_sharpen uses the x1 parameter to distinguish between low and high frequency
areas. Pixels which differ by less than x1 L* units from their local average
are sharpened by factor 1+m1, and pixels which differ by more than x1 are
sharpened by factor 1+m2. y2 and y3 set limits on the amount of positive and
negative sharpening we allow.

For printing, we recommend the following settings:

   mask_radius == 7
   x1 == 1.5
   y2 == 20         (don't brighten by more than 20 L*)
   y3 == 50         (can darken by up to 50 L*)

   m1 == 1          (some sharpening in flat areas)
   m2 == 2          (more sharpening in jaggy areas)

If you want more or less sharpening, we suggest you just change the m1 and m2
parameters. For an extreme sharpen, you might try:

   m1 == 2
   m2 == 4

And for a relatively gentle sharpen, perhaps:

   m1 == 0.5
   m2 == 1.5

If you want to adjust the x1 parameter, it can be helpful visualise its
effect by setting:

   m1 == -2
   m2 == 4

In other words, heavily blur flat areas, and heavily sharpen elsewhere. This
creates a terrible-looking image, but you will be able to see clearly what
parts of your image are being classified as flat. 

The y2 and y3 parameters need not usually be adjusted, unless you wish to
reduce the strength of the finges.

The mask_radius parameter changes the width of the fringe and can be adjusted
according to the output printing resolution. As an approximate guideline, use
3 for 4 pixels/mm (CRT display resolution), 5 for 8 pixels/mm, 7 for 12
pixels/mm and 9 for 16 pixels/mm (300 dpi == 12 pixels/mm). These figures
refer to the image raster, not the half-tone resolution.

.SH RETURN VALUE
The function returns 0 on success and -1 on error.
.SH SEE ALSO
im_conv(3), im_compass(3), im_fastcor(3).
.SH COPYRIGHT
National Gallery and Birkbeck College, 1995
.SH THANKS TO
Lindsay!
