NAME
mmse_filter - Adaptive Minimum Mean Squared Error Filter
SYNOPSIS
#include <math.h>
#include "CVIPimage.h"
Image * mmse_filter(Image * inputImage, float noise_var,
unsigned int kernel_size)
<inputImage> - pointer to an Image
<noise_var> - noise variance of input image
<kernel_size> - kernel size (an odd number)
PATH
$CVIPHOME/SPATIALFILTER/mmse_filter.c
DESCRIPTION
The mmse_filter makes use of the local variance to determine
if a mean filter is to be applied to the local region of an
image. It works best for short tail additive type noise.
The adaptive MMSE filter is based on the following equation:
(sigma_n)^2 / \
MMSE = d(r,c) - ------------ | d(r,c) - ml(r,c) |
(sigma_l)^2 \ /
where ml is the local mean, sigma_n is the noise variance,
and sigma_l is the local variance.
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 adaptive mean squared
error filter operation with the kernel size equal to 3
and the noise variance equal to 100 */
cvipImage = mmse_filter(cvipImage,100,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);
}
RETURN VALUES
Pointer to the processed image
BUGS
none
SEE ALSO
libspatialfilter
AUTHOR
Copyright (C) 1996 SIUE - by Scott Umbaugh and Wenxing Li.