## NAME

         spectral_feature - calculates total power spectrum  in  each
         ring and sector over half image

## SYNOPSIS

          #include <math.h>
          #include "CVIPimage.h"
          #include "newfeature.h"

         POWER  *spectral_feature(Image  *  originalImage,  Image   *
         labeledImage, int no_of_rings, int no_of_sectors, int r, int
         c)

          <originalImage> - pointer to the original image
          <labeledImage> -  Pointer to the labeled image
          <no_of_rings> -   number of rings
          <no_of_sectors> - number of sectors
          < r > - row coordinate of a point on the labled image
          < c > - column coordinate of a point on the labled image

## PATH

         $CVIPHOME/FEATURE/spectral_feature.c

## DESCRIPTION

         Half of the frequency domain of the object  of  interest  is
         divided  into  <no_of_rings>  rings and <no_of_sectors> sec-
         tors, that is to say, all sectors have  equal  angles,  dis-
         tances  between  neighboring  rings are equal. The frequency
         domain is got by performing forward  FFT  on  image  of  the
         object  of  interest.  The object of interest is selected by
         the  point  of  coordinates  <r,c>  on  the  labeled  image.
         power_fft()  returns  dc_normalized  values  of  total power
         spectrum in each ring and sector. 'dc_normalized' means  all
         total  power  spectrums  are divided by the value of dc com-
         ponent (the value before divided by N*N). For dc  component,
         it  is divided by pow(N, 4) before returned to make it to be
         the power spectrum of the average value of all pixels in the
         object  image. N is equal to the image size of the object of
         interest(an N*N image).

## TYPES AND CONSTANTS

         POWER is defined in $CVIPHOME/include/newfeature.h

         If the original image is a color image, the first no_of_rings
         and no_of_sectors values pointed to by 'dc', 'sector', and
         values pointed to by those pointers are for band 1, and so on.

## RETURN VALUES

         A pointer to a structure  named  POWER  containing  spectral
         features data

## HISTORY

         History information recorded: None

## EXAMPLE

          #include "CVIPtoolkit.h"
          #include "CVIPobject.h"
          #include "CVIPconvert.h"
          #include <math.h>
          #include "ObjectContour.h"
          #include "newfeature.h"

          void main()
          {
             Image *inputImage, *labeledImage,*inputImage1;
             IMAGE_FORMAT format;
             char *inputfile, *outputfile;
             int rows, cols, r, c,k,i;
             POWER *PP;
             int bands,no_rings,no_sectors;

             setDisplay_Image("picture", "Default");

             print_CVIP("\nEnter the Input File Name:  ");
             inputfile = (char *) getString_CVIP();
             inputImage = read_Image(inputfile,1);
             view_Image(inputImage,inputfile);
             inputImage1=(Image *)duplicate_Image(inputImage);
             labeledImage = label(inputImage);
             rows = getNoOfRows_Image(labeledImage);
             cols = getNoOfCols_Image(labeledImage);
             bands = getNoOfBands_Image(labeledImage);
             print_CVIP("\nEnter the row coordinate of a point
             on the labled image: ");
             r = getInt_CVIP(10, 0, rows);
             print_CVIP("\nEnter the col coordinate of the point
             on the labled image: ");
             c = getInt_CVIP(10, 0, cols);
             print_CVIP("\nEnter the number of rings: ");
             no_rings = getInt_CVIP(10, 0,10);
             print_CVIP("\nEnter the number of sectors: ");
             no_sectors = getInt_CVIP(10, 0,10);
             PP=spectral_feature(inputImage1,labeledImage,
             no_rings,no_sectors,r,c);
             print_CVIP("The spectral features of the input image
             are:");
             for (k=0; k<bands; k++)
             {
                  print_CVIP("Spectral DC value band%d =%f",k,
                  (PP->dc)[k]);
                  for (i=0; i<PP->no_of_bands; i++)
                     print_CVIP("Ring%d=%f\n ",i+1,(PP->band)
                     [k*PP->no_of_bands + i]);

                  for (i=0; i<PP->no_of_sectors; i++)
                     print_CVIP("Sector%d=%f\n ",i,(PP->sector)
                     [k*PP->no_of_sectors + i]);
             }

             free(inputfile);
             free((char *)PP->dc);
             free((char *)PP->sector);
             free((char *)PP->band);
             free((char *)PP);
             free(inputImage);
             free(inputImage1);
             free(labeledImage);

           }

## DIAGNOSTICS

         The original image can  be  of  any  of  these  data  types:
         CVIP_BYTE,    CVIP_SHORT,   CVIP_INTEGER,   CVIP_FLOAT   and
         CVIP_DOUBLE.

## SEE ALSO

         libfeature

## AUTHOR

         Copyright (C) 1996 SIUE - by Scott E.  Umbaugh  and  Wenxing
         Li.