| Operatoren |
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.
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.
Eingabebild (1. Kanal).
Eingabebild (2. Kanal).
Eingabebild (3. Kanal).
Rot-Kanal.
Grün-Kanal.
Blau-Kanal.
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
| Operatoren |