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..2[ 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..2[ 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.
Wertebereich: , ,
Es gilt zu beachten, dass , und nicht unabhängig voneinander sind.
Wertebereich:
Wertebereich: , ,
Wertebereich:
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.)
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.)
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.)
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.)
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: , ,
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: , ,
Wertebereich: , ,
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.
Default: '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