trans_to_rgbtrans_to_rgbTransToRgbTransToRgb (Operator)

Name

trans_to_rgbtrans_to_rgbTransToRgbTransToRgb — 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)

Beschreibung

trans_to_rgbtrans_to_rgbTransToRgbTransToRgbTransToRgb transformiert ein Bild aus einem angegebenen Farbraum (ColorSpaceColorSpaceColorSpaceColorSpacecolorSpace) 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 ColorSpaceColorSpaceColorSpaceColorSpacecolorSpace müssen so vorliegen, wie sie aus einer Transformation mit trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgbTransFromRgb 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'

Definitionsbereich:

'yuv'

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

Definitionsbereich:

'argyb'

Definitionsbereich:

'ciexyz'

Definitionsbereich:

'cielab'

Schwarzpunkt B: (Rb, Gb, Bb) = (0, 0, 0) Weißpunkt W = (Rw, Gw, Bw), je nach Bildtyp: 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)

Definitionsbereich:

(Für byte/uint2-Bildtypen auf den maximalen Grauwert skaliert. Im Falle von int4-Bildtypen sind L und a auf den maximalen Grauwert und b auf den minimalen Grauwert skaliert, so dass der Nullpunkt erhalten bleibt.)

'cielchab'

Schwarzpunkt B: (Rb, Gb, Bb) = (0, 0, 0) Weißpunkt W = (Rw, Gw, Bw), je nach Bildtyp: 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)

Definitionsbereich:

(Für byte/uint2-Bildtypen auf den maximalen Grauwert skaliert. Im Fall von int4-Bildtypen sind L und C auf den maximalen Grauwert skaliert und h wird in Winkelsekunden angegeben.)

'cieluv'

Schwarzpunkt B: (Rb, Gb, Bb) = (0, 0, 0) Weißpunkt W = (Rw, Gw, Bw), je nach Bildtyp: 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)

Definitionsbereich:

(Für byte/uint2-Bildtypen auf den maximalen Grauwert skaliert. Im Falle von int4-Bildtypen sind L und u auf den maximalen Grauwert und v auf den minimalen Grauwert skaliert, so dass der Nullpunkt erhalten bleibt.)

'cielchuv'

Schwarzpunkt B: (Rb, Gb, Bb) = (0, 0, 0) Weißpunkt W = (Rw, Gw, Bw), je nach Bildtyp: 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)

Definitionsbereich:

(Für byte/uint2-Bildtypen auf den maximalen Grauwert skaliert. Im Fall von int4-Bildtypen sind L und C auf den maximalen Grauwert skaliert und h 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

Definitionsbereich:

'hsi'

Definitionsbereich:

'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

Definitionsbereich:

'ciexyz4'

Definitionsbereich:

'lms'

Definitionsbereich:

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

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

Eingabebild (1. Kanal).

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

Eingabebild (2. Kanal).

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

Eingabebild (3. Kanal).

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

Rot-Kanal.

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

Grün-Kanal.

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

Blau-Kanal.

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

Gewünschte Farbtransformation.

Defaultwert: '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)

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_rgbTransToRgbTransToRgbTransToRgb 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>)SetSystem("no_object_result", <Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

decompose3decompose3Decompose3Decompose3Decompose3

Nachfolger

compose3compose3Compose3Compose3Compose3, disp_colordisp_colorDispColorDispColorDispColor

Alternativen

linear_trans_colorlinear_trans_colorLinearTransColorLinearTransColorLinearTransColor

Siehe auch

decompose3decompose3Decompose3Decompose3Decompose3

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