## NAME

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

## SYNOPSIS

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

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

## PATH

         $CVIPHOME/SPATIALFILTER/spatial_filter.c

## OPTIONS

         None.

## DESCRIPTION

         Returns the product of all the pixels in the  filter  window
         raised  to  the power of 3/N*N.  Size of filter should be an
         odd integer limited from < 3 - 31 >. A zero pixel value will
         result in the filtered value being zero.

## TIPS

         Works best on images containing short  tailed  noise.   Keep
         filter mask size small to reduce 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 geometric filter
          operation with the mask size equal to 3 */
          cvipImage = geometric_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.