NAME
     filt - apply a digital filter in spatial domain

SYNOPSIS
     filt [parameters] <in> [out]

DESCRIPTION
     filt is a cube filter in image domain. Choose  the  kind  of
     filter  you want to apply, the resulting cube will be a fil-
     tered (plane by plane) version of the input cube.

PARAMETERS
     -f name or --filter name
          Choose the filter  to  apply.  Supported  filters  are:
          user-linear, dx, dy, d2x, d2y, contour1, contour3, con-
          trast1, min, max, median, max-min, Find their  descrip-
          tions below.

     -p 'f1 ... f9'or --val 'f1 ... f9'
          To be used with filters 'user-linear' or 'user-morpho',
          to  provide 9 values to define the filter. All 9 values
          are given enclosed in single quotes, separated  by  one
          or more blank characters.

     -k hsor --khsize hs
          To be used only with the flat filter. hs is  the  half-
          size  of  the  kernel (1 for a 3x3 kernel, 2 for a 5x5,
          ...).

ALGORITHM
     In image processing, there are numerous ways  to  filter  an
     image.  This collection of filters all remain in the spatial
     domain. The basic idea is to convolve the image with  a  3x3
     or  5x5  kernel.  For bigger kernels, it is often less time-
     consuming to go to Fourier space with an FFT.
     If we describe a 3x3 neighborhood as :

     pix1 pix2 pix3
     pix4 pix5 pix6
     pix7 pix8 pix9

     The new pixel will be a linear combination of pix1 to  pix9.
     The combination is then normalized by dividing by the sum of
     all coeficients, except for NULL sums where no normalization
     is applied.

     new = a1.pix1 + a2.pix2 + ... + a9.pix9
     ('.' denoting multiplication).

     An example is a low-pass filter defined  by  the  set  of  9
     coefficients :
     1 1 1
     1 1 1
     1 1 1

     The derivative in x axis can be computed by applying :

     -1   0    1
     -1   0    1
     -1   0    1

     And so on. See image processing books for more details about
     digital  filtering  in  spatial  domain  !   If you choose a
     user-defined filter, you get prompted for 9 values, that are
     the coefficients described above.

     For morphological filters, the idea remains the same, except
     that pix1 to pix9 are sorted before combination, that is :

     new = a1.min(pix1, .., pix9) + ... + a9.max(pix1, ..., pix9)

     The well-known median filter is then simply described by the
     coefficients :
     0  0  0   0  1  0   0  0  0
     That is, each pixel is replaced by the median value  of  its
     neighborhood.  Due to this necessary sorting on every pixel,
     morphological filters are usually very computer-intensive.

IMPLEMENTED FILTERS
     user-linear
          Enter 9 values for a 3x3 linear filter, through the  -p
          or --val option.

     mean3
          All coefficients equal to 1

     dx   X derivative. Filter coefficients are:

     -1 0 1
     -1 0 1
     -1 0 1

     dy   Y derivative. Filter coefficients are:
          -1 -1 -1
           0  0  0
           1  1  1

     d2x  X second derivative. Filter coefficients are:
           1 -2  1
           1 -2  1
           1 -2  1

     d2y  Y second derivative. Filter coefficients are:

           1  1  1
          -2 -2 -2
           1  1  1

     contour1
          Contour detector. Filter coefficients are:
           1  0 -1
           0  0  0
          -1  0  1

     contour2
          Another contour detector. Filter coefficients are:
          -1  0  1
           2  0 -2
          -1  0  1

     contour3
          Yet another contour detector. Filter coefficients are:
          -1  2 -1
           0  0  0
           1 -2  1

     contrast1
          Contrast enhancement. Filter coefficients are:
           1  1  1
           1  4  1
           1  1  1

     mean5
          Low-pass (smearing) filter. All coefficients are set to
          1 on a 5x5 neighborhood.

     min  Morphologival minimum. Filter  coefficients  are  (from
          min to max) :
          1 0 0   0 0 0   0 0 0

     max  Morphological maximum. Filter  coefficients  are  (from
          min to max) :
          0 0 0   0 0 0   0 0 1

     median
          Morphological median. Filter coefficients are (from min
          to max) :
          0 0 0   0 1 0   0 0 0

     max-min
          Morphological max-min. Filter  coefficients  are  (from
          min to max) :
          -1 0 0   0 0 0   0 0 1

     user-morpho
          Provide  9  values  for  a  3x3  morphological  filter,
          through the -p or --val option.

     flat This filter applies an NxN convolution  with  a  matrix
          filled  with ones only.  This is a low-pass filter. The
          size of the  convolution  kernel  to  use  can  be  set
          through  the  -k or --khsize option. Example: calling a
          flat filter with the option -k 2 will filter the  image
          with  a 5x5 kernel containing only ones everywhere. The
          computation time increases tremendously with the kernel
          size, it is not recommended to use too large kernels.

FILES
     Input files shall all comply with FITS format.

     The original FITS header  of the input  FITS  file  is  con-
     served  along,  except  for  the following keywords:  NAXIS,
     NAXISn, BITPIX, BSCALE, BZERO,  which  are  related  to  the
     newly created file.

     HISTORY keywords are appended to the FITS header to indicate
     the eclipse process modifications.

     The  output  file   naming   scheme   is:   *.fits   becomes
     *.filter.fits.

EXAMPLES
     To apply an x derivative to a file named 'in.fits', do:
     filt --filter dx in.fits
     the created output file is named 'in.dx.fits'.

     To apply a median filter to a file named 'm51.fits', do:
     filt --filter median m51.fits
     the created output file is named 'm51.median.fits'/

     To apply a user-defined morphological filter to 'sofi.fits':
     filt --filter user-morpho --val  '1  0  0  0  1  0  0  0  1'
     sofi.fits

     To apply a flat low-pass filter with a  21x21  kernel  to  a
     file named 'm51.fits', do:
     filt --filter flat --khsize 10 m51.fits

SEE ALSO
     fft, ccube