NAME

     inverse_xformfilter - performs inverse filtering

SYNOPSIS

      #include "CVIPimage.h"
      #include "CVIPtransform.h"
      #include "CVIPxformfilter.h"
      #include "CVIPdef.h"
      #include "CVIParithlogic.h"

     Image *inverse_xformfilter(Image  *numP,  Image  *denP,  int
     choice, float cutoff)

      <numP> - pointer to the numerator, the degraded image
      <denP> - pointer to the  denominator,  the  inverse  filter
     (PSF)
      <choice> - 1 to let R(u,v) = 1, or 2 to let R(u,v) = 0
                      (R(u,v) = restoration filter, this is used
                      when the denominator = 0)
      <cutoff> - cutoff frequency

PATH

     $CVIPHOME/XFORMFILTER/InverseFilter.c

DESCRIPTION

     This function performs an inverse filter, a frequency domain
     filter defined:
                                     G(u,v)
                            F(u,v) = ------
                                     H(u,v)
     where F(u,v) is the Fourier transform of the restored image,
     G(u,v)  is  the Fourier transform of the degraded image, and
     H(u,v) is the Fourier transform of the degradation function.

TYPES AND CONSTANTS

     None

RETURN VALUES

     A filtered image

HISTORY

     History information recorded:

       parameter #1 = filter cutoff.
       parameter #2 = method 1: F(u,v)=G(u,v) when H(u,v)=0
                      method 2: F(u,v)=0 when H(u,v)=0

EXAMPLE

      #include <CVIPtoolkit.h>
      #include <CVIPimage.h>
      #include <CVIPdef.h>
      #include <CVIPconvert.h>
      #include <CVIPview.h>
      #define VIEWER "picture"
      #define VIDEO_APP "SunVideo &"

      void main()
      {
      Image *cvipImage,*cvipImage1;
      IMAGE_FORMAT format;
      char *inputfile,*outputfile;

      (void) setDisplay_Image(VIEWER,"default");
      print_CVIP("\n\t\tEnter the  Input File Name:  ");
      inputfile =(char *) getString_CVIP();
      format = getFormat_CVIP(inputfile);
      cvipImage = read_Image(inputfile,1);
      view_Image(cvipImage, inputfile);
      free(inputfile);
      /* the following call creates a gaussian mask of size
      3*3 */
      cvipImage1 = (Image *)h_image(3,3,3);
      /* the following call performs the inverse filter on the
      input image with the gaussian mask and the cutoff
      frequency equal to 32 (choice=1)*/
      cvipImage=(Image *)inverse_xformfilter(cvipImage,
      cvipImage1,1,32.0);
      cvipImage=(Image *)ifft_transform(cvipImage,256);
      print_CVIP("\n\t\tEnter the Output File Name:  ");
      outputfile = getString_CVIP();
      view_Image(cvipImage,outputfile);
      write_Image(cvipImage,outputfile,CVIP_NO,CVIP_NO,format,1);
      free(outputfile);
      }

SEE ALSO

     libxformfilter

AUTHOR

     Copyright (C) 1996 SIUE - by Scott E. Umbaugh, Arve  Kjoelen
     and Greg Hance.