## NAME

         harmonic_filter -  a non-linear mean filter which is  better
         at removing gaussian type noise and preserving edge features
         than the mean filter. Good at removing positive outliers.

## SYNOPSIS

          #include <CVIPtoolkit.h>
          #include <CVIPdef.h>
          #include <CVIPspfltr.h>
          #include <float.h>

         Image *harmonic_filter(Image *imageP, int mask_size)
               <imageP> - pointer to Image structure.
               <mask_size> - size of the filtering window  (e.g.,  3-
         >3x3).

## PATH

         $CVIPHOME/SPATIALFILTER/spatial_filter.c

## OPTIONS

         None.

## DESCRIPTION

         Returns a value equal to N*N divided by the inverse  of  the
         sum  of  the  pixels in the filter window.  The filter  size
         should be an odd integer limited from < 3 - 31>.

## TIPS

         Works best on short tailed types of noise such  as  Gaussian
         noise.  Keep the filter mask small to minimize blurring.

## DIAGNOSTICS

         Returns a pointer to the modified Image  structure  on  suc-
         cess.  Returns a NULL pointer if the input Image datatype is
         not CVIP_BYTE and can't be cast to CVIP_FLOAT.

## EXAMPLE

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

          void main()
          {
          Image *cvipImage;
          IMAGE_FORMAT format;
          char *inputfile,*outputfile;
          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 performs a harmonic filter
          operation with the mask size equal to 3 */
          cvipImage = harmonic_filter(cvipImage,3);
          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);
          }

## BUGS

         None

## AUTHOR

         Copyright (C) 1992, 1996 SIUE - by Scott E. Umbaugh and John
         A Creighton.