trans_to_rgb
— Transformation von einem Farbraum nach RGB.
trans_to_rgb(ImageInput1, ImageInput2, ImageInput3 : ImageRed, ImageGreen, ImageBlue : ColorSpace : )
trans_to_rgb
transformiert ein Bild aus einem
angegebenen Farbraum (ColorSpace
) 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 ColorSpace
müssen so vorliegen, wie sie aus
einer Transformation mit trans_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:
Es wird vorausgesetzt, dass der Definitionsbereich der Farbraumgrößen bei byte- und uint2-Bildern generell auf den vollen Bereich von [0..255] bzw. [0..65535] abgebildet ist. Dies beinhaltet eine Verschiebung im Falle vorzeichenbehafteter Größen, so dass bei vorzeichenbehafteten Farbraumgrößen (z.B. bei CIELab) der Nullpunkt nicht unbedingt in der Mitte des Bereiches liegt.
Hue Werte werden durch Winkel im Bereich [0..2pi[ repräsentiert, welche für die jeweiligen Bildtypen unterschiedlich kodiert werden:
byte-Bilder bilden den Winkelbereich auf [0..255] ab.
uint2/int4-Bilder werden in Winkelminuten [0..21600[ kodiert, außer für 'cielchab' und 'cielchuv' für int4-Bilder, für die sie als Winkelsekunden [0..1296000[ kodiert werden.
real-Bilder werden im Bogenmaß [0..2pi[ kodiert, außer für 'cielchab' und ISO 11664-5:2009 'cielchuv' für die die Normen ISO 11664-4:2008 und vorschreiben, dass der Hue in Grad angegeben wird.
Sättigungswerte (Saturation) werden in Prozent angegeben, welche für die jeweiligen Bildtypen unterschiedlich kodiert werden:
byte-Bilder bilden die Sättigung auf [0..255] ab.
uint2/int4-Bilder bilden die Sättigung auf [0..10000] ab.
real-Bilder bilden die Sättigung auf [0..1] ab.
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.
Es gilt zu beachten, dass , und nicht unabhängig voneinander sind.
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)
(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.)
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)
(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.)
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)
(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.)
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)
(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.)
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
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
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.
ImageInput1
(input_object) singlechannelimage(-array) →
object (byte / uint2 / int4 / real)
Eingabebild (1. Kanal).
ImageInput2
(input_object) singlechannelimage(-array) →
object (byte / uint2 / int4 / real)
Eingabebild (2. Kanal).
ImageInput3
(input_object) singlechannelimage(-array) →
object (byte / uint2 / int4 / real)
Eingabebild (3. Kanal).
ImageRed
(output_object) singlechannelimage(-array) →
object (byte / uint2 / int4 / real)
Rot-Kanal.
ImageGreen
(output_object) singlechannelimage(-array) →
object (byte / uint2 / int4 / real)
Grün-Kanal.
ImageBlue
(output_object) singlechannelimage(-array) →
object (byte / uint2 / int4 / real)
Blau-Kanal.
ColorSpace
(input_control) string →
(string)
Gewünschte Farbtransformation.
Defaultwert: 'hsv'
Werteliste: 'argyb' , 'cielab' , 'cielchab' , 'cielchuv' , 'cieluv' , 'ciexyz' , 'ciexyz4' , 'hls' , 'hsi' , 'hsv' , 'lms' , 'yiq' , 'yuv'
Werteliste (für Compute Devices): 'cielab' , 'cielchab' , 'cieluv' , 'cielchuv' , 'hsv' , 'hsi'
* 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)
trans_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>:)
festlegen.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
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.
Foundation