.TH IM_SIMILARITY_AREA 3 "13 January 1992"
.SH NAME
im_similarity_area, im_similarity \- apply a similarity transform to an image
.SH SYNOPSIS
.B #include <vips/vips.h>

int im_similarity_area(in, out, s, a, dx, dy, x, y, w, h)
.br
.B IMAGE *in, *out;
.br
.B double s, a, dx, dy;
.br
.B int x, y;
.br
.B int w, h;

int im_similarity(in, out, s, a, dx, dy)
.br
.B IMAGE *in, *out;
.br
.B double s, a, dx, dy;

.SH DESCRIPTION
.B im_similarity_area()
applies a similarity transformation on the image held by the IMAGE descriptor
in and puts the result at the location pointed by the IMAGE descriptor out. in
many have any number of bands, be any size, and have any non-complex type.

The transformation is described by s, a, dx, dy.  The point (x,y) in the input
is mapped onto point (X,Y) in the output by

	X = s * x - a * y + dx
	Y = a * x + s * y + dy

s and a do not correspond to scale and angle of the transformation; the actual
scale and angle are given by the equations:

	scale = sqrt(s*s + a*a) 
	angle = arctan(s/a).

The area of the output image given by x, y, w, h is generated. (0,0) is 
the position of the transformed top-left-hand corner of the input image.
Function im_similarity_area resamples the transformed image using bilinear
interpolation.

im_similarity works exactly as im_similarity_area, but calculates x, y, w, h
for you such that the rectangle described just encloses all of the transformed
input pixels.
.SH RETURN VALUE
The functions return 0 on success and -1 on error.
.SH BUGS
As with most resamplers, im_similarity performs poorly at the edges of
images.
.SH SEE\ ALSO
similarity(1), similarity_area(1)
.SH AUTHORS
N. Dessipris -\ 13/01/1992
.br
J.Ph. Laurent -\ 12/12/92
.br
J. Cupitt -\ 22/02/93
