.TH IM_LRMOSAIC 3 "13 May 1991"
.SH NAME
im_lrmosaic, im_tbmosaic \- mosaic two images using a zero order procedure
.SH SYNOPSIS
#include <vips/vips.h>

int 
.br
im_lrmosaic( IMAGE *ref, IMAGE *sec, IMAGE *out, 
.br
	int bandno, 
.br
	int xref, int yref, int xsec, int ysec, 
.br
	int halfcorrelation, int halfarea,
.br
	int balancetype,
.br
	int mwidth )

int 
.br
im_tbmosaic( IMAGE *ref, IMAGE *sec, IMAGE *out, 
.br
	int bandno, 
.br
	int xref, int yref, int xsec, int ysec, 
.br
	int halfcorrelation, int halfarea,
.br
	int balancetype,
.br
	int mwidth )

.SH DESCRIPTION
im_lrmosaic() and im_tbmosaic() are used to mosaic two images (left-right and
top-bottom respectively).  Both input images are held by the IMAGE descriptors
reference and secondary whereas the output is written on the IMAGE descriptor
out.

In order to carry out mosaicing, the coordinates of one tie point are
required.  The tie point is expected to be in the overlapping area and has
coordinates (xref, yref) on the reference image and (xsec, ysec) on the
secondary image. The tie-point is not used as a start point for the search,
but is used to specify the overlap of the two images. 

The functions split the overlap area into three parts (top, middle and bottom;
or left, middle and right) and search the reference image in each part for the
20 best high contrast points. These 60 points are then searched for in the
secondary image, giving a set of 60 possible corrected vectors.

A straight line is fitted through the 60 vectors, and points discarded which
lie a significant distance from the line. The line is then refitted to the
remaining points, and the process repeated until either all remaining points
lie on a straight line, or too many points have been discarded.

If a good straight line fit is found, ref and sec are joined. If no fit was
found, the functions fail with an error message. Note that these functions 
detect rotation: if the straight line found requires sec to be rotated, they
also fail with an error message.

Each function requires three more parameters:

halfcorrelationsize - sets the size of the fragments of ref 
   for which the function searches sec. The actual window
   will be of size 2*halfcorrelationsize+1. We recommend a
   value of 5.

halfareasize - sets the size of the area of sec that is
   searched. The actual area searched will be of size
   2*halfareasize+1. We recommend a value of 14.

balancetype - sets the style of the balancing the functions 
   perform. Balancing finds the average value of pixels in
   the overlap area, and scales the left and right images
   (or top and bottom images) so as to make the images
   match in average overlap. Possible values are:

      0 - means do no balancing.

      1 - means keep the left image unadjusted and adjust 
      the contrast of the right image to match the left.

      2 - means keep the right image unadjusted and scale 
      the left image to match it.

      3 - means adjust the contrast of both the left and 
      right images to bring both averages to a middle
      value. The middle value chosen is weighted by the
      number of pixels in each image: large images will be
      adjusted less than small images.

Balancing is useful for mosaicing frames from photographic or video sources
where exact colour control is impossible and exposure varies from frame to
frame.  Balancing is only allowed for uncoded uchar images.

The final "mwidth" parameter sets the maximum blend width, see im_lrmerge(3).

See also im_global_balance() for a better way of balancing large mosaics.

.SH RETURN VALUE
All functions return 0 on success and -1 on error.
.SH SEE ALSO
im_lrmerge(3), im_tbmerge(3), im_global_balance(3).
