NAME

     huf_compress - performs lossless Huffman coding

SYNOPSIS

      #include <stdio.h>
      #include <stdlib.h>
      #include <time.h>
      #include <string.h>
      #include <sys/types.h>
      #include <sys/stat.h>
      #include "CVIPtoolkit.h"
      #include "CVIPconvert.h"
      #include "CVIPdef.h"
      #include "huffman.h"

     int huf_compress(Image *inputImage, char *filename)

      <filename> - pointer to a character array
      <inputImage> - pointer to the image

     Image *huf_decompress(char *filename)

      <filename> - pointer to a character array

PATH

     $CVIPHOME/COMPRESSION/huffman.c

DESCRIPTION

     huf_compress takes two parameters, they are a pointer to the
     input  image  structure,  and  the  file  name  to which the
     compressed image is to be stored.  The user doesn't have  to
     provide  the filename extension "huf". Even if the user for-
     gets to enter the extension or enters a wrong extension  the
     programme  takes  care  of it by appending or replacing with
     the correct extension("huf"). At the end of the compression,
     this  routine automatically writes to the working window the
     compression ratio. Series of steps are involved  in  huffman
     coding.  First the input image is read. Then the array table
     is built with the symbol(greylevel value) and  frequency  of
     occurence.  Then  a  binary  tree  is  built  from the array
     table(probability array). Using the  binary  tree  that  was
     built each symbol(greylevel value) is encoded and written to
     the user defined binary file.

     huf_decompress takes a pointer to the  character  array  and
     returns   a  pointer  to  the  image.  The  character  array
     represents the filename to be  decoded  with  the  extension
     "huf".  It  returns  a  pointer to the decoded image. During
     decompression process the encoded file is read. The  encoded
     file  size, symbol frequency, are extracted from the encoded
     file. A binary tree is built from the probability table that
     was  stored  in  the  encoded  file.  The  original image is
     recovered without any loss in information by parsing through
     the binary tree.

TYPES AND CONSTANTS

     None

RETURN VALUES

     huf_compress: 0 on success, -1 on failure

     huf_decompress: an uncompressed image pointer on success,  a
     NULL pointer on failure

HISTORY

     History information recorded: None

EXAMPLE

      #include <CVIPtoolkit.h>
      #include <CVIPimage.h>
      #include <CVIPdef.h>
      #include <CVIPconvert.h>
      #include <CVIPview.h>
      #include "huffman.h"
      #include <sys/types.h>
      #include <sys/stat.h>
      #define VIEWER "picture"
      #define VIDEO_APP "SunVideo &"

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

      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 huffman coding of
      the input image */
      huf_compress(cvipImage,"file1");
      /* the following call performs the huffman decoding
      of the "file1" */
      cvipImage=huf_decompress("file1");
      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

     libcompress

DIAGNOSTICS

     The Huffman coding and decoding algorithms was  designed  to
     work only on monochrome image(.pgm).

AUTHOR

     Implemented By: Mark Heffron SIUE

     Ported By     : Muthu kumar, SIUE

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