NAME
Butterworth_High - performs Butterworth highpass filtering
SYNOPSIS
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "CVIPdef.h"
#include "CVIPimage.h"
Image *Butterworth_High(Image *in_Image, int block_size, int
dc, int cutoff, int order)
<in_Image> - pointer to an Image structure
<block_size> - desired block size
<dc> - drop(0) or retain(1) dc component
<cutoff> - cutoff frequency
<order> - filter order
PATH
$CVIPHOME/XFORMFILTER/filter.c
DESCRIPTION
Butterworth_High() performs two-dimensional butterworth
highpass filtering in transform domain on input image. The
parameter cutoff defines the cut-off frequency locus at
points for which the filter transfer function H(u,v) is at
0.7071 of its maximum value. All components inside the cir-
cle (or 1/4 circle if dc component is on the upper-left-hand
corner of its transform plane) of radius "cutoff" are
attenuated according to the transition from passband to
stopband, depending on the degree of filter order f_order.
All frequencies component outside the circle (or 1/4 cir-
cle) are passed with no attenuation. If dc equals 1, the
dc component will be retained, if dc = 0, dc componenet
will be dropped.
TYPES AND CONSTANTS
None
RETURN VALUES
A filtered image
HISTORY
History information recorded: None
DIAGNOSTICS
The Butterworth_High 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 frequency can range from 1 to blocksize/2 and the
Butterworth_High 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_High()
with filtertype=4. The cutoff frequency 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
hpf_setup() is to be used to call Butterworth_High(), the
transform must be setup and recognized by hpf_setup(), oth-
erwise 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=(Image *)fft_transform(cvipImage,256);
/* the following call performs the butterworth high
pass filtering of order 2 on the transformed image with
the cut off frequency equal to 64 */
cvipImage = (Image *)Butterworth_High(cvipImage,256,
1,64,2);
/* the following call performs the inverse fft_transform
in the filtered image with the block size equal
to 256 */
cvipImage = (Image *)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.