NAME

     colorxform - transforms an RGB image into a new color space

SYNOPSIS

      #include "CVIPdef.h"
      #include "CVIPcomplex.h"
      #include "CVIPtoolkit.h"
      #include "CVIPcolor.h"

     Image  *  colorxform(const  Image  *rgbImage,   COLOR_FORMAT
     newcspace, float *norm, float *refwhite, int dir)

      <rgbImage> - pointer to an Image structure (data type equal
     to or less precise than type CVIP_FLOAT)
      <newcspace> - desired color space
      <norm> - pointer to a normalization vector
      <refwhite> - pointer to reference white values (for LUV and
     LAB only)
      <dir> - direction of transform (1 => (RGB->newcspace)  else
     (newcspace->RGB)

PATH

     $CVIPHOME/COLOR/cxform.c

DESCRIPTION

     Transforms an RGB image into a new color space specified  by
     <newcspace>, one of...

      HSL - Hue/Saturation/Lightness,
      HSV - Hue/Saturation/Value,
      SCT - Spherical Coordinates Transform,
      CCT - Cylindrical Coordinates Transform,
      LAB - C.I.E. L*a*b* Color Coordinate System,
      LUV - C.I.E. L*u*v*  Color  Coordinate  System,
      XYZ - Chromaticity  Coordinate System.

     Each transform  requires  that  the  input  image  be   nor-
     malized  between  0 and 1. A pointer to a normalization vec-
     tor <norm> must be passed that contains a set of  values  to
     normalize the  image  bands  with. (e.g. norm[0] = norm[1] =
     norm[2] = 255.0). If <norm> is NULL then it will be  assumed
     that  the  input  image is already normalized. colorxform is
     capable of performing several inverse transforms as well. If
     <dir>  is  passed as any other value except for one then the
     inverse transform (<newcspace>->RGB)  will   be   performed.
     Currently the only inverse transforms that are supported are
     HSL->RGB  &  HSV->RGB.  If  either  a   L*a*b*   or   L*u*v*
     transform   is   requested   then  an  additional  parameter
     <refwhite> must be  passed  as  well  (e.g.   refwhite[0]  =
     refwhite[1]  = refwhite[2] = 1.0 ). All transforms will also
     be normalized to the range [0.0 ... 1.0] except  for  L*a*b*
     and  L*u*v*  whose  range will vary with different values of
     reference white.

TYPES AND CONSTANTS

     None

RETURN VALUES

     Pointer to transformed image

HISTORY

     History information recorded: None

EXAMPLE

      #include <CVIPtoolkit.h>
      #include <CVIPimage.h>
      #include <CVIPdef.h>
      #include <CVIPview.h>
      #include <CVIPconvert.h>
      #include <CVIPcomplex.h>
      #include <CVIPcolor.h>
      #define VIEWER "picture"
      #define VIDEO_APP "SunVideo &"

      void main()
      {
      Image *cvipImage;
      IMAGE_FORMAT format;
      char *inputfile,*outputfile;
      float norm[3]={255.0,255.0,255.0};
      float ref[3]={1.0,1.0,1.0};

      setDisplay_Image(VIEWER, "Default");
      /* The input image should be a COLOR one */
      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 transforms an RGB image into
      a new color space LUV */
      cvipImage=colorxform(cvipImage,LUV,norm,ref,1);
      print_CVIP("\n\t\tEnter the Output File Name:  ");
      outputfile = getString_CVIP();
      view_Image(cvipImage,outputfile);
      write_Image(cvipImage,outputfile,CVIP_NO,CVIP_NO,VIP,1);
      free(outputfile);
      }

SEE ALSO

     libcolor

AUTHOR

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