NAME

     homomorphic - performs homomorphic  filtering  on  an  input
     image

SYNOPSIS

     #include "CVIPimage.h"
     #include "CVIPtransform.h"
     #include "CVIPxformfilter.h"
     #include <limits.h>

     Image*  homomorphic(Image *cvipImage,float upper, float lower,int cutoff)

      <cvipImage> - pointer to an Image
      <upper> - upper limit, > 1
      <lower> - lower limit, < 1
      <cutoff> - cutoff frequency

DESCRIPTION

     Homomorphic filtering  is  used  to  reduce  the  effect  of
     illumination  variations  in  a  scene while emphasizing the
     reflectance components. This function has a  setup  routine,
     called  by  CVIPtools,  to allow the user to input the upper
     and lower limits and cutoff frequency  of  the  filter.  The
     upper limit should be greater than 1; the lower limit should
     be less than 1. Typical values range between 2.0 and 0.5.

     There is another function, get_function, that will return  a
     floating point array containing the distribution of a filter
     mask created using a sine wave.

  PATH
      $CVIPHOME/XFORMFILTER/homomorphic.c

  TYPES AND CONSTANTS
     static float*  get_function(int size,int cutoff);

EXAMPLE

     The following is a brief example of the use  of  homomorphic
     filtering:

      #include "CVIPimage.h"
      #include "CVIPtransform.h"
      #include "CVIPxformfilter.h"
      #include <limits.h>

      void main()
      {
       Image *cvipImage;
       IMAGE_FORMAT format;
       char *inputfile, *outputfile;
       float uppercut, lowercut;
       int cutoff;

       setDisplay_Image("picture", "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);
       print_CVIP("\n\t\tEnter the upper gain (1.0-3.0):  ");
       uppercut = (float)getFloat_CVIP(1.0, 3.0);
       print_CVIP("\n\t\tEnter the lower gain (.5 - 1.0):  ");
       lowercut = (float)getFloat_CVIP(0.5, 1.0);
       print_CVIP("\n\t\tEnter the cutoff frequency (32-128):  ");
       cutoff = (int)getInt_CVIP(10, 32, 128);
       cvipImage = homomorphic(cvipImage, uppercut, lowercut, cutoff);
       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(inputfile);
       free(outputfile);
      }

BUGS

     None.

SEE ALSO


AUTHOR

     Copyright (C) 1995 SIUE - by Kun Luo and Scott Umbaugh.