NAME
Butterworth_Band_Pass - performs Butterworth band pass
filtering
SYNOPSIS
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "CVIPdef.h"
#include "CVIPimage.h"
Image *Butterworth_Band_Pass(Image *in_Image, int
block_size, int dc, int inner, int outer, int order)
<in_Image> - pointer to an Image structure
<block_size> - desired block size
<dc> - drop(0) or retain(1) dc component
<inner> - inner cutoff frequency
<outer> - outer cutoff frequency
<order> - filter order
PATH
$CVIPHOME/XFORMFILTER/filter.c
DESCRIPTION
This function performs two-dimensional Butterworth bandpass
filtering in transform domain on input image. The filter
transfer function of order <order> is:
H(u,v) = -[ {1 / (1+ pow(k, 2*f_order))} -1]
where k = D(u,v)W/[pow(D(u,v), 2) - pow(D0, 2)]
D(u, v) is the distance from the origin, W the width of the
band, and D0 is the center of the band. W is calculated
using the inner and outer cut-off frequencies specified. The
frequency components within the band enclosed by inner and
outer cut-off frequencies are not attenuated. All other fre-
quency components outside the band are attenuated according
to the transfer function. The band is a 1/4 of a circular
band if the dc component is on the upper left-hand corner of
its transform plane. If dc equals 1, the dc component will
be retained, if dc equals, the dc component will be dropped.
TYPES AND CONSTANTS
None
RETURN VALUES
A filtered image
HISTORY
History information recorded: None
DIAGNOSTICS
The Butterworth_Band_Pass filter will work for both real-
valued and imaginary-valued transform. If the origin of the
transform is on the center of its frequency plane (shifted),
the cutoff frequencies can range from 1 to blocksize/2 and
the Butterworth_Band_Pass function can be called directly
with correct parameters. If the origin of the transform is
on the upper left-hand corner of its frequency plane,
nonfft_xformfilter() must be used to call
Butterworth_Band_Pass() with filtertype = 6. The cutoff
frequencies in this case can range from 1 to blocksize since
a block is treated as a quarter of a regular block with its
origin on the center. If bpf_setup() is to be used to call
Butterworth_Band_Pass(), the transform must be setup and
recognized by bpf_setup(), otherwise the setup program
automatically assumes the transform's dc component is on
the center (dcpos=1).
EXAMPLE
#include <CVIPtoolkit.h>
#include <CVIPimage.h>
#include <CVIPdef.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 the fft_transform on the
input image with the block size equal to 256 */
cvipImage=fft_transform(cvipImage,256);
/* the following call performs the butterworth band pass
filtering of order 2 on the transformed image with the
lower cut off equal to 0 and the higher cut off equal
to 64 */
cvipImage = Butterworth_Band_Pass(cvipImage,256,1,0,64,2);
/* the following call performs the inverse fft_transform in
the filtered image with the block size equal to 256 */
cvipImage = ifft_transform(cvipImage,256);
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);
}
SEE ALSO
libxformfilter
AUTHOR
Copyright (C) 1996 SIUE - by Scott E. Umbaugh and Simon Low.