## NAME

         perimeter - calculates a binary object's perimeter

## SYNOPSIS

          #include <math.h>
          #include "ObjectContour.h"

         int perimeter(Image * labeledImage, int r, int c)

          <labeledImage> -  pointer to a labeled image
          < r > - row coordinate of a point on the labled image
          < c > - column coordinate of a point on the labled image

## PATH

         $CVIPHOME/FEATURE/binary_feature.c

## DESCRIPTION

         We define the perimeter of an object to be the length of the
         outer edge of the object. This function first finds the max-
         imum and minimum values of the object of interest's row  and
         column. The length of the outer edge is then found by build-
         ing   chain   code   for   that   object   using    function
         build_ChainCode(). Chain code is a representation of a boun-
         dary as a connected sequence of  straight-line  segments  of
         specified  length  and  direction.  In build_ChainCode(), 8-
         connectivity of the segments is used, and the length of  the
         straight-line  segments  is the  distance between two neigh-
         boring pixels. By building chain code for  the  object,  the
         number  of  pixels  on the outer edge of the object is found
         and that is the perimeter of the object.

         The   function   build_ChainCode()   can   be    found    in
         $CVIPHOME/Object/ObjectContour.c.

## TYPES AND CONSTANTS

         None

## RETURN VALUES

         A value of type int: perimeter of the object

## HISTORY

         History information recorded: None

## EXAMPLE

          #include <math.h>
          #include "ObjectContour.h"
          #include "CVIPconvert.h"

          void main() {
             Image *inputImage, *labeledImage;
             IMAGE_FORMAT format;
             char *inputfile, *outputfile;
             int rows, cols, r, c;
             int result;

             setDisplay_Image("picture", "Default");

             print_CVIP("\nEnter the Input File Name:  ");
             inputfile = (char *) getString_CVIP();
             inputImage = read_Image(inputfile, 1);
             view_Image(inputImage,inputfile);

             labeledImage = label(inputImage);

             rows = getNoOfRows_Image(labeledImage);
             cols = getNoOfCols_Image(labeledImage);

             print_CVIP("\nEnter the row coordinate of any  pixel  on
         the labled image: ");
             r = getInt_CVIP(10, 0, rows);
             print_CVIP("\nEnter the col coordinate of any  pixel  on
         the labled image: ");
             c = getInt_CVIP(10, 0, cols);

             result = perimeter(labeledImage, r, c);
             print_CVIP("The perimeter of the object (r,  c)  =  %d",
         result );
             print_CVIP("\n");

             free(inputfile);
           }

## DIAGNOSTICS

         The labeled image can only of data type CVIP_INTEGER

## AUTHOR

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