NAME

     bilinear_interp - shrinks or enlarges an image

SYNOPSIS

      #include <stdio.h>
      #include <CVIPimage.h>
      #include <CVIPdef.h>
      #include "bilinear.h"

     Image *bilinear_interp(Image *inImg, float factor)

      <inImg> - pointer to an Image structure
      <factor> - factor > 1 to enlarge, factor < 1 to shrink

PATH

     $CVIPHOME/GEOMETRY/bilinear.c

DESCRIPTION

     This function shrinks or enlarges an  image  using  bilinear
     interpolation  to calculate the gray-level value of new pix-
     els. This technique provides a smooth appearance, especially
     when enlarging an image. The newly-created pixel values  are
     linearly interpolated from formerly  adjacent  pixels,  thus
     producing even transitions.

TYPES AND CONSTANTS

      #define LOOP_BILINEAR(type,row,Mcol,int_map,delta_map,_Dptr, _Nptr) {
          type **_Rowp=(type **)(_Dptr);
          type *NEWP=(type *)(_Nptr);
          int rI;   for(rI=0; rI < (int)Mcol ; rI++) {
               *NEWP++=BILINEAR((float)delta_map[row],(float)delta_map[rI],
                    _Rowp[(int)int_map[row]][(int)int_map[rI]],
                    _Rowp[(int)int_map[row]][(int)int_map[rI+1]],
                    _Rowp[(int)int_map[row+1]][(int)int_map[rI]],
                    _Rowp[(int)int_map[row+1]][(int)int_map[rI+1]], type);
          }

RETURN VALUES

     A scaled image

HISTORY

     History information recorded: None

EXAMPLE

       #include <CVIPtoolkit.h>
       #include <CVIPdef.h>
       #include <CVIPimage.h>
       #include <CVIPconvert.h>
       #include <CVIPimage.h>
       #include "bilinear.h"
       #include <stdio.h>

      void main()
      {

      Image *cvipImage;
      IMAGE_FORMAT format;
      char *inputfile, *outputfile;
      float factor;
      setDisplay_Image("RamViewer", "Default");

      print_CVIP("\n\t\tEnter the Input File Name:  ");
      inputfile =(char *) getString_CVIP();
      format = getFormat_CVIP(inputfile);
      cvipImage = read_Image(inputfile, 1);

      print_CVIP("\n");
      print_CVIP("\n\t\tEnter a scaling factor (from 0.1 to 3.0):
     ");
      factor = getFloat_CVIP( 0.1, 3.0 );

      cvipImage = bilinear_interp(cvipImage, factor)
      fflush(stdin);

      print_CVIP("\n\t\tEnter the Output File Name:  ");
      outputfile = getString_CVIP();
      write_Image(cvipImage,outputfile,CVIP_NO,CVIP_NO,format,1);
      display_Image(outputfile,format);
      free(inputfile);
      free(outputfile);
      }

BUGS

     The function cannot accept the value '0.3'; it causes a pro-
     gram crash.

SEE ALSO

     libgeometry

AUTHOR

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