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
       filtered (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,  contour2,
              contour3,  contrast1,  min,  max,  median, max-min,
              user-morpho.  Find their descriptions below.

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

Algorithm
       In  image processing, there are numerous ways to filter an
       image. This collection of filters all remain in  the  spa-
       tial  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 -p or --val option,  provid-
              ing  a  single value which defines the kernel half-
              size. Example:  calling  a  flat  filter  with  the
              option -p 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 indi-
       cate the eclipse process modifications.

       The output file naming scheme is:  *.fits  becomes  *.fil-
       ter.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 --val 10 m51.fits

See Also
       fft, ccube