## 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.