NAME

     fuzzyc_segment - image segmentation based on fuzzy c-means

SYNOPSIS

      #include "CVIPtoolkit.h"
      #include "fuzzyc.h"
      #include "CVIPdef.h"

     Image *fuzzyc_segment(Image *srcImage, float variance)

      <srcImage> - pointer to Image structure
      <variance> - value for Gaussian kernal variance

PATH

     $CVIPHOME/SEGMENTATION/fuzzyc.c

DESCRIPTION

     Color image segmentation based on thresholding and the fuzzy
     c-means can be divided into two stages: coarse and fine seg-
     mentation.  The coarse segmentation is  intended  to  reduce
     the  computational burden required for the fine segmentation
     - the fuzzy c-means. In coarse segmentation,  a  scale-space
     filter  is used to analyze the histograms of the three color
     components. It determines the number of valid  classes   and
     assigns  classified pixels to these classes according to the
     threshold value (safety margins).  The   fine   segmentation
     uses fuzzy c-means to assign the remaining unclassified pix-
     els to their closest class. Histogram   analysis  using  the
     scale-space  filter  in coarse segmentation stage is a tech-
     nique that  involves generating a multiscale  description of
     histogram  by  convolving  it  with a series of Gaussians of
     gradually increasing width, and marking  the   location  and
     direction  of the sign change of zero-crossing in its second
     derivatives. The parameter (x,  tau)-space  is known  to  be
     the  scale-space where tau is the scale constant.  The scale
     constant tau is inversely  proportional to  the  number   of
     peaks and valleys that can be extracted from the histograms.
     The importance of this fact is that if prior  knowledge   is
     known about a particular type of image, tau can be set to be
     a constant to  obtain  the  desired  number  of   peaks  and
     values,  and  the  process can be made unsupervised. The tau
     value that will give satisfactory  result  in  most  of  the
     color  space  used  in  an  experiment is 5. After histogram
     analysis, valid classes will  be  determined  according   to
     the  safety  margin  (Usually  5%  - 20%) specified by user.
     Classified pixels will be assigned to their valid   classes,
     and  the  other  pixels  will be tagged as unclassified.  In
     this implementation, they will appear as white pixels  (255)
     on  the  image. The larger the safety margin, the more accu-
     rate the result of the  segmentation   will  be,   and   the
     more   computational  efforts  it  will  need when using the
     fuzzy c-means in fine stage.  In  fine  segmentation  stage,
     the fuzzy membership of the unclassified pixels will be cal-
     culated and assigned to the class where they have  the  max-
     imum  membership  value.  The last parameter the user has to
     decide when  using  the program  is the display color of the
     result  image.   The  user has the option of using the means
     value for each valid class or the predefined colors for  the
     segmented regions.

TYPES AND CONSTANTS


RETURN VALUES

     Pointer to an Image structure on success, and  NULL  pointer
     on failure.

EXAMPLE

      #include "CVIPtoolkit.h"
      #include "CVIPdef.h"
      #include "CVIPconvert.h"
      #include "fuzzyc.h"

           void main()
           {
           Image *cvipImage;
           IMAGE_FORMAT format;
           char *inputfile, *outputfile;

           setDisplay_Image("picture", "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);
           cvipImage = (Image *) fuzzyc_segment(cvipImage,  4.0);
               /* Four color example */
           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(inputfile);
           free(outputfile);
           }

BUGS

     None at this time

SEE ALSO

     libsegment

AUTHOR

     Copyright (C) 1995 SIUE - by Scott Umbaugh and Greg Hance.