NAME
     warping -  resample  a  frame  according  to  a  geometrical
     transformation

SYNOPSIS
     warping [parameters] [options] <in> [out]

DESCRIPTION
     warping is used to resample  images  according  to  a  given
     geometrical  transformation.  Supported  transformations for
     the moment are:

     Integer
     Integer  transformations  account  for   translations   with
     integer offsets and rotations of multiples of 90 degrees. No
     resampling is performed in these cases, only  pixel  shifts.
     Integer  transformations  are  declared  on the command-line
     exactly as linear transformations. The command  will  decide
     to  go  to integer pixel shifts if it notices that the input
     parameters are actually integer.

     Linear
     Linear  transforms  are  covering  translations,  rotations,
     scale  changes  (zoom).  It is also possible to provide your
     own expression of a linear transform as two linear polynomi-
     als of x and y. Notice that the transform is then direct: it
     transforms pixels from the original image into pixels in the
     warped image.

     Polynomial
     General polynomial transformations are of any  degree  in  x
     and  y.   Provide  on the command-line the degrees for x, y,
     and the associated coefficient. It is  possible  to  specify
     only  a x or y transformation. The other direction transfor-
     mation will then be Id.  Notice that the transform  is  then
     reversed  (opposite  of linear): it transforms pixels in the
     warped image back into pixels in the original image.
     If you are trying to fit detector distorsions, it is usually
     enough  to  use  low-order  polynomials  (up to 3rd degree),
     because higher orders would introduce oscillations,  produc-
     ing  undesirable  rippling in the warped image. See the ade-
     quate litterature about detector distorsions.
     For distortion corrections, it is possible to use in  option
     the  TFITS  files  produced by the ISAAC calibration recipes
     'isaacp arc' and 'isaacp startrace'  and  that  contain  the
     distortion polynomials.

     Resampling is done with kernel-based interpolations. Several
     kernels  are  offered: sinc, square sinc, Lanczos2, Hamming,
     Hann, and tanh (a  hyperbolic  tangent  based  window).  The
     default  kernel  is tanh, see the adequate litterature about
     interpolation kernels to learn  more.  The  command  has  an
     option  that only "shows" the kernels it has available, pro-
     ducing the interpolation window on stdout.  By  re-directing
     this  output  to a text file, it should be easy to visualize
     them with any plotting tool such as gnuplot.

PARAMETERS
     Linear transforms (includes integer transforms)

     -t or --translate tx ty
          provides tx and  ty  for  a  translation  vector.  This
          option  can  be  combined with a rotation (-r) and/or a
          scaling (-s) option.

     -r or --rotate angle
          provides an angle for the rotation, in  degrees.  Nega-
          tive  angles  are  accepted. The rotation center is the
          center of the image.

     -s or --scale factor
          provides a scaling factor. This  factor  needs  not  be
          integer, i.e. a scaling by a factor 1.4142 is possible.

     -T or --transform 'p1 p2 p3 p4 p5 p6'
          If you know the expression of  a  linear  transform  to
          apply,  you can provide it through this option. Provide
          6 parameters p1...p6.  Enclose the parameters in simple
          quotes.  They are defined as a forward affine transform
          from the input image to the output image. If (x,y)  are
          coordinates in the input image and (u,v) coordinates in
          the output image, then:
          u = p1.x + p2.y + p3
          v = p4.x + p5.y + p6

     For example, to apply a scale change of a  factor  2  and  a
     translation   vector   of   (+100,-50),  both  commands  are
     equivalent:

     > warping -s 2 -t '100 -50' image.fits
     > warping -T '2 0 100 0 2 -50' image.fits
     Providing a linear transform allows also other image  defor-
     mations than just rotation, scale and translation.

     Polynomial transforms

     Polynomial transforms need be expressed in a  reversed  way:
     if (u,v) are the coordinates of a pixel in the warped image,
     and (x,y) in the original image, the polynomial needs to  be
     expressed as:
     x = Px(u,v)
     y = Py(u,v)
     Provide the two polynomial expressions through the -u and -v
     options.  The  polynomial  format on the command-line is the
     following:

     A polynomial is given by triplets of values. The first value
     indicates the degree for u, the second one the degree for v,
     and the third value is the multiplicative  coefficient.  For
     example, 3.u^2.v is written as:
     2 1 3
     Another example: the polynomial is 3 + 4.u^2 + v
     The expression is:
     0 0 3 2 0 4 0 1 1

     -u or --polyu du dv c0 ... du dv cn
          Provides the coefficients for Px(u,v).

     -v or --polyv du dv c0 ... du dv cn
          Provides the coefficients for Py(u,v)

     -A or --arcfile file.tfits
          The specified file is a table with  the  2d  polynomial
          that  was created by is_spec_arc and that describes the
          slit curvature distortion

     -S or --sttrfile file.tfits
          The specified file is a table with  the  2d  polynomial
          that   was   created   by  is_spec_startrace  and  that
          describes the startrace distortion

     Resampling kernels

     -k or --kernel name
          Choose the interpolation kernel used  to  resample  the
          image. Possible choices are:

     sinc      - "ideal" filter (for infinite signals)
     sinc2     - square sinc
     lanczos   - Lanczos function (2nd order)
     hamming   - Hamming function
     hann      - Hann function
     tanh      - Hyperbolic tangent
     default   - default is tanh kernel

     If you do not know what these  functions  refer  to,  it  is
     recommended  not  to  modify  them.  See documentation about
     image warping to learn more about these kernels.

     -w or --write
          This option will have a kernel generated  then  printed
          out  to stdout. No further processing will be done. The
          output data can be redirected to a file, and/or plotted
          by any graphical 2d plotter (e.g. gnuplot).
          Example:
          > warping -k hamming -w > hamming.dat

     --sub
          Flag to simply perform a subsampling of the input image

ALGORITHM
     Resampling is done by applying a resampling kernel in  image
     space,  over  the 16 closest neighbors. The algorithm is the
     following:

     For each pixel position in the resulting image, compute  the
     position of the source pixel in the original image, interpo-
     late its value over the 16 closest neighbors with the chosen
     kernel.  Pixel  positions  falling out of the original image
     are assigned a null value.

FILES
     Input files shall all comply with FITS format.

BUGS
     The interpolation over 16 neighbors implies  border  effects
     which  are  not handled. Interpolation artifacts can be seen
     close to high spatial frequencies (especially  on  bad  pix-
     els).

     Only images shall be warped, not data cubes. This  extension
     may be implemented in a future release.

     In linear transforms: applying only  a  rotation  turns  the
     image  around  its  center. If you try to combine a rotation
     and a scaling or a translation, rotation is then done  rela-
     tive  to  the pixel (0,0), i.e.  the lower left pixel of the
     image.

     Radial transforms are not implemented yet.