trans_to_rgb ( ImageInput1, ImageInput2, ImageInput3 : ImageRed, ImageGreen, ImageBlue : ColorSpace : )

Transform an image from an arbitrary color space to the RGB color space.

trans_to_rgb transforms an image from an arbitrary color space (ColorSpace) to the RGB color space. The three channels of the image are passed as three separate images on input and output.

The following transformations are supported:

  'yiq'
     |R|   |0.999   0.962   0.615|   |Y|
     |G| = |0.949  -0.220  -0.732| * |I|
     |B|   |0.999  -1.101   1.706|   |Q|

  'argyb'
     |R|   |1.00   1.29   0.22|   |A |
     |G| = |1.00  -0.71   0.22| * |Rg|
     |B|   |1.00   0.29  -1.78|   |Yb|

  'ciexyz'
     |R|   | 2.750  -1.149  -0.426|   |X|
     |G| = |-1.118   2.026   0.033| * |Y|
     |B|   | 0.138  -0.333   1.104|   |Z|

  'hls'
     Hi = integer(H * 6)
     Hf = fraction(H * 6)
     if (L <= 0.5)
        max = L * (S + 1)
     else
        max = L + S - (L * S)
     fi
     min = 2 * L - max
     if (S == 0)
        R = L
        G = L
        B = L
     else
       if (Hi == 0)
          R = max
          G = min + Hf * (max - min)
          B = min
       elif (Hi == 1)
          R = min + (1 - Hf) * (max - min)
          G = max
          B = min
       elif (Hi == 2)
          R = min
          G = max
          B = min + Hf * (max - min)
       elif (Hi == 3)
          R = min
          G = min + (1 - Hf) * (max - min)
          B = max
       elif (Hi == 4)
          R = min + Hf * (max - min)
          G = min
          B = max
       elif (Hi == 5)
          R = max
          G = min
          B = min + (1 - Hf) * (max - min)
       fi
     fi           

  'hsi'
     M1 = S * sin(H)
     M2 = S * cos(H)
     I1 = I / sqrt(3)
     |R|   | 2/sqrt(6)   0           1/sqrt(3)|   |M1|
     |G| = |-1/sqrt(6)   1/sqrt(2)   1/sqrt(3)| * |M2|
     |B|   |-1/sqrt(6)  -1/sqrt(2)   1/sqrt(3)|   |I1|

  'hsv'
     if (S == 0)
        if (H == 0)
           R = V
           G = V
           B = V
        else
           R = 0
           G = 0
           B = 0
        fi
     else
        Hi = integer(H)
        Hf = fraction(H)
        if (Hi == 0)
           R = V
           G = V * (1 - (S * (1 - Hf)))
           B = V * (1 - S)
        elif (Hi == 1)
           R = V * (1 - (S * Hf))
           G = V
           B = V * (1 - S)
        elif (Hi == 2)
           R = V * (1 - S)
           G = V
           B = V * (1 - (S * (1 - Hf)))
        elif (Hi == 3)
           R = V * (1 - S)
           G = V * (1 - (S * Hf))
           B = V
        elif (Hi == 4)
           R = V * (1 - (S * (1 - Hf)))
           G = V * (1 - S)
           B = V
        elif (Hi == 5)
           R = V
           G = V * (1 - S)
           B = V * (1 - (S * Hf))
        fi
     fi
If necessary, certain scalings are performed, e.g., for byte-images [0..1] -> [0..255]. In the explanation above all input and output values, including angles, are assumed to be in the range [0..1].


Parameters

ImageInput1 (input_object)
image(-array) -> object : byte / int4 / real
Input image (channel 1).

ImageInput2 (input_object)
image(-array) -> object : byte / int4 / real
Input image (channel 2).

ImageInput3 (input_object)
image(-array) -> object : byte / int4 / real
Input image (channel 3).

ImageRed (output_object)
image(-array) -> object : byte / int4 / real
Red channel.

ImageGreen (output_object)
image(-array) -> object : byte / int4 / real
Green channel.

ImageBlue (output_object)
image(-array) -> object : byte / int4 / real
Blue channel.

ColorSpace (input_control)
string -> string
Color space of the input image.
Default value: 'hsv'
List of values: 'hsi', 'yiq', 'argyb', 'ciexyz', 'hls', 'hsv'


Example
/* Tranformation from rgb to hsv and conversely */
read_picture(:Image:'tiff',0,0,'patras':Channels) >
disp_color(Image:::) >
decompose3(Image:Rimage,Gimage,Bimage::) >
trans_from_rgb(Rimage,Gimage,Bimage:Image1,Image2,Image3:'hsv':) >
trans_to_rgb(Image1,Image2,Image3:ImageRed,ImageGreen,ImageBlue:'hsv':) >
compose3(ImageRed,ImageGreen,ImageBlue:Multichannel::) >
disp_color(Multichannel:::).

Result

trans_to_rgb returns TRUE if all parameters are correct. If the input is empty the behaviour can be set via set_system(::'no_object_result',<Result>:). If necessary, an exception is raised.


Possible Predecessors

decompose3


Possible Successors

compose3, disp_color


See also

decompose3



Copyright © 1996-1997 MVTec Software GmbH