## NAME

         Ypmean_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 *Ypmean_filter(Image *imageP, int mask_size, int p)
              <imageP> - pointer to Image structure.
              <mask_size> - size of the filtering window (3->3x3).
              <p> - filter order.

## PATH

         $CVIPHOME/SPATIALFILTER/spatial_filter.c

## DESCRIPTION

         Calculates the sum of the pixels in the filter window raised
         to  the power of p, then divided by N*N.  Returns this value
         raised to the  power  of  3/p.  Good  at  removing  positive
         outliers  for negative values of p and negative outliers for
         positive values of p.  Size  of  filter  should  be  an  odd
         integer limited from < 3 - 31 >, and order of filter is lim-
         ited from <-5 to +5>.

## TIPS

         Works well on images containing positive  outlier  noise  if
         the  parameter P is negative, and on images containing nega-
         tive outlier noise if the parameter P is positive.  P should
         remain small (3-3) for better performance.  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;

          (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 performs a non-linear mean
          filter in every 3 x 3 window */
          cvipImage = Ypmean_filter(cvipImage,3,2);
          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.