ClassesClasses | | Operators

trans_to_rgbtrans_to_rgbTransToRgbTransToRgb (Operator)

Name

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

Signature

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

Herror trans_to_rgb(const Hobject ImageInput1, const Hobject ImageInput2, const Hobject ImageInput3, Hobject* ImageRed, Hobject* ImageGreen, Hobject* ImageBlue, const char* ColorSpace)

Herror T_trans_to_rgb(const Hobject ImageInput1, const Hobject ImageInput2, const Hobject ImageInput3, Hobject* ImageRed, Hobject* ImageGreen, Hobject* ImageBlue, const Htuple ColorSpace)

void TransToRgb(const HObject& ImageInput1, const HObject& ImageInput2, const HObject& ImageInput3, HObject* ImageRed, HObject* ImageGreen, HObject* ImageBlue, const HTuple& ColorSpace)

HImage HImage::TransToRgb(const HImage& ImageInput2, const HImage& ImageInput3, HImage* ImageGreen, HImage* ImageBlue, const HString& ColorSpace) const

HImage HImage::TransToRgb(const HImage& ImageInput2, const HImage& ImageInput3, HImage* ImageGreen, HImage* ImageBlue, const char* ColorSpace) const

static void HOperatorSet.TransToRgb(HObject imageInput1, HObject imageInput2, HObject imageInput3, out HObject imageRed, out HObject imageGreen, out HObject imageBlue, HTuple colorSpace)

HImage HImage.TransToRgb(HImage imageInput2, HImage imageInput3, out HImage imageGreen, out HImage imageBlue, string colorSpace)

Description

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

The operator trans_to_rgbtrans_to_rgbTransToRgbTransToRgbTransToRgb supports the image types byte, uint2, int4, and real. The domain of the input images must match the domain provided by a corresponding transformation with trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgbTransFromRgb. If not, the results of the transformation may not be reasonable.

This includes some scalings in the case of certain image types and transformations:

The following transformations are supported:

(All domains are based on RGB values scaled to [0; 1]. To obtain the domains for a certain image type, they must be multiplied with the maximum of the image type, e.g., 255 in the case of a byte image)

'yiq'

Domain:

'yuv'

Domain:

'argyb'

Domain:

'ciexyz'

Domain:

'cielab'

  Black point B: (Rb, Gb, Bb) = (0, 0, 0)
  White point W = (Rw, Gw, Bw), according to image type:
    byte:=(255, 255, 255), uint2:=(2^16-1, 2^16-1, 2^16-1),
    int4:=(2^31-1, 2^31-1, 2^31-1), real:=(1.0, 1.0, 1.0)

Domain:

(Scaled to the maximum gray value in the case of byte and uint2. In the case of int4 L and a are scaled to the maximum gray value, b is scaled to the minimum gray value, such that the origin stays at 0.)

'cielchab'

  Black point B: (Rb, Gb, Bb) = (0, 0, 0)
  White point W = (Rw, Gw, Bw), according to image type:
    byte:=(255, 255, 255), uint2:=(2^16-1, 2^16-1, 2^16-1),
    int4:=(2^31-1, 2^31-1, 2^31-1), real:=(1.0, 1.0, 1.0)

Domain:

(Scaled to the maximum gray value in the case of byte and uint2. In the case of int4, L and C are scaled to the maximum gray value, while h is given in seconds of arc.)

'cieluv'

  Black point B: (Rb, Gb, Bb) = (0, 0, 0)
  White point W = (Rw, Gw, Bw), according to image type:
    byte:=(255, 255, 255), uint2:=(2^16-1, 2^16-1, 2^16-1),
    int4:=(2^31-1, 2^31-1, 2^31-1), real:=(1.0, 1.0, 1.0)

Domain:

(Scaled to the maximum gray value in the case of byte and uint2. In the case of int4 L and u are scaled to the maximum gray value, v is scaled to the minimum gray value, such that the origin stays at 0.)

'cielchuv'

  Black point B: (Rb, Gb, Bb) = (0, 0, 0)
  White point W = (Rw, Gw, Bw), according to image type:
    byte:=(255, 255, 255), uint2:=(2^16-1, 2^16-1, 2^16-1),
    int4:=(2^31-1, 2^31-1, 2^31-1), real:=(1.0, 1.0, 1.0)

Domain:

(Scaled to the maximum gray value in the case of byte and uint2. In the case of int4, L and C are scaled to the maximum gray value, while h is given in seconds of arc.)

'hls'

  Hi := floor(H/rad(60))
  Hf := H/rad(60) - Hi
  if (L <= 0.5)
     Max := L * (S + 1)
  else
     Max := L + S - (L * S)
  endif
  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
    elseif (Hi == 1)
       R := Min + (1 - Hf) * (Max - Min)
       G := Max
       B := Min
    elseif (Hi == 2)
       R := Min
       G := Max
       B := Min + Hf * (Max - Min)
    elseif (Hi == 3)
       R := Min
       G := Min + (1 - Hf) * (Max - Min)
       B := Max
    elseif (Hi == 4)
       R := Min + Hf * (Max - Min)
       G := Min
       B := Max
    elseif (Hi == 5)
       R := Max
       G := Min
       B := Min + (1 - Hf) * (Max - Min)
    endif
  endif

Domain:

'hsi'

Range of values:

'hsv'

  if (S == 0)
     R := V
     G := V
     B := V
  else
     Hi := floor(H/rad(60))
     Hf := H/rad(60) - Hi
     if (Hi == 0)
        R := V
        G := V * (1 - (S * (1 - Hf)))
        B := V * (1 - S)
     elseif (Hi == 1)
        R := V * (1 - (S * Hf))
        G := V
        B := V * (1 - S)
     elseif (Hi == 2)
        R := V * (1 - S)
        G := V
        B := V * (1 - (S * (1 - Hf)))
     elseif (Hi == 3)
        R := V * (1 - S)
        G := V * (1 - (S * Hf))
        B := V
     elseif (Hi == 4)
        R := V * (1 - (S * (1 - Hf)))
        G := V * (1 - S)
        B := V
     elseif (Hi == 5)
        R := V
        G := V * (1 - S)
        B := V * (1 - (S * Hf))
     endif
  endif

Domain:

'ciexyz4'

Domain:

'lms'

Domain:

Attention

As the calculations are made with a different numerical precision, the OpenCL implementation of the cielab transformation for images of type int4 is slightly less accurate than the pure C version.

Execution Information

Parameters

ImageInput1ImageInput1ImageInput1ImageInput1imageInput1 (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / uint2 / int4 / real)

Input image (channel 1).

ImageInput2ImageInput2ImageInput2ImageInput2imageInput2 (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / uint2 / int4 / real)

Input image (channel 2).

ImageInput3ImageInput3ImageInput3ImageInput3imageInput3 (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / uint2 / int4 / real)

Input image (channel 3).

ImageRedImageRedImageRedImageRedimageRed (output_object)  singlechannelimage(-array) objectHImageHImageHobject * (byte / uint2 / int4 / real)

Red channel.

ImageGreenImageGreenImageGreenImageGreenimageGreen (output_object)  singlechannelimage(-array) objectHImageHImageHobject * (byte / uint2 / int4 / real)

Green channel.

ImageBlueImageBlueImageBlueImageBlueimageBlue (output_object)  singlechannelimage(-array) objectHImageHImageHobject * (byte / uint2 / int4 / real)

Blue channel.

ColorSpaceColorSpaceColorSpaceColorSpacecolorSpace (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Color space of the input image.

Default value: 'hsv' "hsv" "hsv" "hsv" "hsv"

List of values: 'argyb'"argyb""argyb""argyb""argyb", 'cielab'"cielab""cielab""cielab""cielab", 'cielchab'"cielchab""cielchab""cielchab""cielchab", 'cielchuv'"cielchuv""cielchuv""cielchuv""cielchuv", 'cieluv'"cieluv""cieluv""cieluv""cieluv", 'ciexyz'"ciexyz""ciexyz""ciexyz""ciexyz", 'ciexyz4'"ciexyz4""ciexyz4""ciexyz4""ciexyz4", 'hls'"hls""hls""hls""hls", 'hsi'"hsi""hsi""hsi""hsi", 'hsv'"hsv""hsv""hsv""hsv", 'lms'"lms""lms""lms""lms", 'yiq'"yiq""yiq""yiq""yiq", 'yuv'"yuv""yuv""yuv""yuv"

List of values (for compute devices): 'cielab'"cielab""cielab""cielab""cielab", 'cielchab'"cielchab""cielchab""cielchab""cielchab", 'cieluv'"cieluv""cieluv""cieluv""cieluv", 'cielchuv'"cielchuv""cielchuv""cielchuv""cielchuv", 'hsv'"hsv""hsv""hsv""hsv", 'hsi'"hsi""hsi""hsi""hsi"

Example (HDevelop)

* Transformation from rgb to hsv and conversely
read_image(Image,'patras')
dev_display(Image)
decompose3(Image, Image1, Image2, Image3)
trans_from_rgb(Image1,Image2,Image3,ImageH,ImageS,ImageV,'hsv')
trans_to_rgb(ImageH,ImageS,ImageV,ImageR,ImageG,ImageB,'hsv')
compose3(ImageR,ImageG,ImageB,Multichannel)
dev_display(Multichannel)

Example (C)

/* Transformation from rgb to hsv and conversely */
read_image(Image,"patras") ;
disp_color(Image,WindowHandle) ;
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,WindowHandle);

Example (HDevelop)

* Transformation from rgb to hsv and conversely
read_image(Image,'patras')
dev_display(Image)
decompose3(Image, Image1, Image2, Image3)
trans_from_rgb(Image1,Image2,Image3,ImageH,ImageS,ImageV,'hsv')
trans_to_rgb(ImageH,ImageS,ImageV,ImageR,ImageG,ImageB,'hsv')
compose3(ImageR,ImageG,ImageB,Multichannel)
dev_display(Multichannel)

Example (HDevelop)

* Transformation from rgb to hsv and conversely
read_image(Image,'patras')
dev_display(Image)
decompose3(Image, Image1, Image2, Image3)
trans_from_rgb(Image1,Image2,Image3,ImageH,ImageS,ImageV,'hsv')
trans_to_rgb(ImageH,ImageS,ImageV,ImageR,ImageG,ImageB,'hsv')
compose3(ImageR,ImageG,ImageB,Multichannel)
dev_display(Multichannel)

Example (HDevelop)

* Transformation from rgb to hsv and conversely
read_image(Image,'patras')
dev_display(Image)
decompose3(Image, Image1, Image2, Image3)
trans_from_rgb(Image1,Image2,Image3,ImageH,ImageS,ImageV,'hsv')
trans_to_rgb(ImageH,ImageS,ImageV,ImageR,ImageG,ImageB,'hsv')
compose3(ImageR,ImageG,ImageB,Multichannel)
dev_display(Multichannel)

Result

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

Possible Predecessors

decompose3decompose3Decompose3Decompose3Decompose3

Possible Successors

compose3compose3Compose3Compose3Compose3, disp_colordisp_colorDispColorDispColorDispColor

Alternatives

linear_trans_colorlinear_trans_colorLinearTransColorLinearTransColorLinearTransColor

See also

decompose3decompose3Decompose3Decompose3Decompose3

References

ITU-R BT.470-6: “Conventional Television Systems”, 1998.
ISO 11664-4:2008: “Colorimetry --- Part 4: CIE 1976 L*a*b* Colour space”, 2008.
ISO 11664-5:2009: “Colorimetry --- Part 5: CIE 1976 L*u*v* Colour space and u',v' uniform chromaticity scale diagram”, 2009.

Module

Foundation


ClassesClasses | | Operators