trans_to_rgbtrans_to_rgbTransToRgbTransToRgbtrans_to_rgb (Operator)

Name

trans_to_rgbtrans_to_rgbTransToRgbTransToRgbtrans_to_rgb — Transformation von einem Farbraum nach RGB.

Signatur

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

HImage HImage::TransToRgb(const HImage& ImageInput2, const HImage& ImageInput3, HImage* ImageGreen, HImage* ImageBlue, const wchar_t* ColorSpace) const   ( Nur Windows)

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)

def trans_to_rgb(image_input_1: HObject, image_input_2: HObject, image_input_3: HObject, color_space: str) -> Tuple[HObject, HObject, HObject]

Beschreibung

trans_to_rgbtrans_to_rgbTransToRgbTransToRgbtrans_to_rgb transformiert ein Bild aus einem angegebenen Farbraum (ColorSpaceColorSpaceColorSpacecolorSpacecolor_space) nach RGB. Die drei Kanäle werden als drei getrennte Bilder sowohl ein- als auch ausgegeben.

Die Bildtypen byte, uint2, int4 und real werden unterstützt. Die Werte im angegebenen Farbraum ColorSpaceColorSpaceColorSpacecolorSpacecolor_space müssen so vorliegen, wie sie aus einer Transformation mit trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgbtrans_from_rgb entstanden wären. Andernfalls sind die Ergebnisse der Transformationen möglicherweise nicht sinnvoll.

Dies beinhaltet Skalierungen im Falle bestimmter Transformationen und/oder Bildtypen:

Unterstützt werden die unten folgenden Transformationen. Dabei gilt zu beachten, dass die angegebenen Wertebereiche sich auf eine Skalierung der RGB Werte auf das Intervall [0;1] beziehen. Der Wertebereich für die jeweiligen Bildtypen ergibt sich durch Skalierung mit den entsprechenden Wertebereichen. Aufgrund verschiedener Genauigkeiten können die mit den unten angegebenen Gleichungen erhaltenen Werte leicht von den Resultaten des Operators abweichen.

'yiq'

Wertebereich: , ,

'yuv'

Es gilt zu beachten, dass , und nicht unabhängig voneinander sind.

Wertebereich:

'argyb'

Wertebereich: , ,

'ciexyz'

Wertebereich:

'cielab'

Schwarzpunkt B: ( , , ) = (0, 0, 0)

Weißpunkt W (je nach Bildtyp):

  • byte: ( , , ) = (255, 255, 255)

  • uint2: ( , , ) = ( , , )

  • int4: ( , , ) = ( , , )

  • real: ( , , ) = (1.0, 1.0, 1.0)

Wertebereich: , , (byte und uint2: auf den maximalen Grauwert skaliert. int4: auf den maximalen Grauwert skaliert, und auf den minimalen Grauwert skaliert, so dass der Nullpunkt erhalten bleibt.)

'cielchab'

Schwarzpunkt B: ( , , ) = (0, 0, 0)

Weißpunkt W (je nach Bildtyp):

  • byte: ( , , ) = (255, 255, 255)

  • uint2: ( , , ) = ( , , )

  • int4: ( , , ) = ( , , )

  • real: ( , , ) = (1.0, 1.0, 1.0)

Wertebereich: , , (byte: auf den maximalen Grauwert skaliert. uint2: und werden auf den maximalen Grauwert skaliert, wird in Winkelminuten angegeben. int4: und werden auf den maximalen Grauwert skaliert, und wird in Winkelsekunden angegeben.)

'cieluv'

Schwarzpunkt B: ( , , ) = (0, 0, 0)

Weißpunkt W (je nach Bildtyp):

  • byte: ( , , ) = (255, 255, 255)

  • uint2: ( , , ) = ( , , )

  • int4: ( , , ) = ( , , )

  • real: ( , , ) = (1.0, 1.0, 1.0)

Wertebereich: , , (byte und uint2: auf den maximalen Grauwert skaliert. int4: auf den maximalen Grauwert skaliert, und werden auf den minimalen Grauwert skaliert, so dass der Nullpunkt erhalten bleibt.)

'cielchuv'

Schwarzpunkt B: ( , , ) = (0, 0, 0)

Weißpunkt W (je nach Bildtyp):

  • byte: ( , , ) = (255, 255, 255)

  • uint2: ( , , ) = ( , , )

  • int4: ( , , ) = ( , , )

  • real: ( , , ) = (1.0, 1.0, 1.0)

Wertebereich: , , (byte: auf den maximalen Grauwert skaliert. uint2: und werden auf den maximalen Grauwert skaliert, wird in Winkelminuten angegeben. int4: und werden auf den maximalen Grauwert skaliert, wird in Winkelsekunden angegeben.)

'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
  
Wertebereich: , ,

'hsi'

Wertebereich: , ,

'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
  
Wertebereich: , ,

'ciexyz4'

Wertebereich: , ,

'lms'

Wertebereich: , ,

Achtung

Die OpenCL-Implementierung der cielab-Transformation für int4-Bilder ist aufgrund der abweichenden numerischen Präzision bei der Berechnung etwas ungenauer als die reine C Variante.

Ausführungsinformationen

Parameter

ImageInput1ImageInput1ImageInput1imageInput1image_input_1 (input_object)  singlechannelimage(-array) objectHImageHObjectHObjectHobject (byte / uint2 / int4 / real)

Eingabebild (1. Kanal).

ImageInput2ImageInput2ImageInput2imageInput2image_input_2 (input_object)  singlechannelimage(-array) objectHImageHObjectHObjectHobject (byte / uint2 / int4 / real)

Eingabebild (2. Kanal).

ImageInput3ImageInput3ImageInput3imageInput3image_input_3 (input_object)  singlechannelimage(-array) objectHImageHObjectHObjectHobject (byte / uint2 / int4 / real)

Eingabebild (3. Kanal).

ImageRedImageRedImageRedimageRedimage_red (output_object)  singlechannelimage(-array) objectHImageHObjectHObjectHobject * (byte / uint2 / int4 / real)

Rot-Kanal.

ImageGreenImageGreenImageGreenimageGreenimage_green (output_object)  singlechannelimage(-array) objectHImageHObjectHObjectHobject * (byte / uint2 / int4 / real)

Grün-Kanal.

ImageBlueImageBlueImageBlueimageBlueimage_blue (output_object)  singlechannelimage(-array) objectHImageHObjectHObjectHobject * (byte / uint2 / int4 / real)

Blau-Kanal.

ColorSpaceColorSpaceColorSpacecolorSpacecolor_space (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Gewünschte Farbtransformation.

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

Werteliste: '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"

Werteliste (für 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"

Beispiel (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)

Beispiel (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);

Beispiel (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)

Beispiel (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)

Ergebnis

trans_to_rgbtrans_to_rgbTransToRgbTransToRgbtrans_to_rgb liefert den Wert 2 ( H_MSG_TRUE) , falls die Parameter korrekt sind. Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system(::'no_object_result', <Result>:)set_system("no_object_result", <Result>)SetSystem("no_object_result", <Result>)SetSystem("no_object_result", <Result>)set_system("no_object_result", <Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

decompose3decompose3Decompose3Decompose3decompose3

Nachfolger

compose3compose3Compose3Compose3compose3, disp_colordisp_colorDispColorDispColordisp_color

Alternativen

linear_trans_colorlinear_trans_colorLinearTransColorLinearTransColorlinear_trans_color

Siehe auch

decompose3decompose3Decompose3Decompose3decompose3, trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgbtrans_from_rgb

Literatur

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.

Modul

Foundation