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.