| Operatoren |
trans_from_rgb — Transformation vom RGB- in einen anderen Farbraum.
trans_from_rgb(ImageRed, ImageGreen, ImageBlue : ImageResult1, ImageResult2, ImageResult3 : ColorSpace : )
trans_from_rgb transformiert ein Bild von RGB in den angegebenen Farbraum (ColorSpace). Die drei Kanäle werden als drei getrennte Bilder sowohl ein- als auch ausgegeben.
Die Bildtypen byte, uint2, int4 und real werden unterstützt. Dabei sollten int4-Bilder keine negativen Werte enthalten und real-Bilder nur Werte zwischen 0 und 1. Andernfalls sind die Ergebnisse der Transformationen möglicherweise nicht sinnvoll.
Entsprechend des Datentyps der beteiligten Bilder werden noch Skalierungen vorgenommen, wenn eine der folgende Bedingungen zutrifft:
Der Wertebereich der Farbraumgrößen wird bei byte- und uint2-Bildern generell auf den vollen Bereich von [0..255] bzw. [0..65535] abgebildet. Bei vorzeichenbehafteten Farbraumgrößen (z.B. bei CIELab) liegt aus diesem Grund der Nullpunkt nicht in der Mitte des Bereiches.
Hue Werte werden durch Winkel im Bereich von [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 'cielchuv' für die die Normen ISO 11664-4:2008 und ISO 11664-5:2009 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.
Folgende Transformationen werden unterstützt:
(Die angegebenen Wertebereiche beziehen sich auf eine Skalierung der RGB Werte auf das Intervall [0; 1]. Der Wertebereich für die jeweiligen Bildtypen ergibt sich durch Multiplikation mit deren Maximalwerten, z.B. 255 für byte-Bilder)
Min := min([R, G, B])
Max := max([R, G, B])
L := (Min + Max) / 2
if (Max == Min)
H := 0
S := 0
else
if (L > 0.5)
S := (Max - Min) / (2 - Max - Min)
else
S := (Max - Min) / (Max + Min)
endif
if (R == Max)
H := ((G - B) / (Max - Min)) * rad(60)
elseif (G == Max)
H := (2 + (B - R) / (Max - Min)) * rad(60)
elseif (B == Max)
H := (4 + (R - G) / (Max - Min)) * rad(60)
endif
endif
Min := min([R, G, B])
Max := max([R, G, B])
V := Max
if (Max == Min)
S := 0
H := 0
else
S := (Max - Min) / Max
if (R == Max)
H := ((G - B) / (Max - Min)) * rad(60)
elseif (G == Max)
H := (2 + (B - R) / (Max - Min)) * rad(60)
elseif (B == Max)
H := (4 + (R - G) / (Max - Min)) * rad(60)
endif
endif
Min := min([R, G, B])
Max := max([R, G, B])
I := (R + G + B) / 3
if (I == 0)
H := 0
S := 1
else
S := 1 - Min / I
if (S == 0)
H := 0
else
X := (R + R - G - B) / 2
Y := (R - G) * (R - G) + (R - B) * (G - B)
Z := sqrt(Y)
if (Z == 0)
H := 0
else
H := acos(X/ Z)
endif
if (B > G)
H := rad(360) - H
endif
endif
endif
f(t) = t^(1/3), t > (24/116)^3
f(t) = (841/108)*t + 16/116, sonst.
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.)
f(t) = t^(1/3), t > (24/116)^3
f(t) = (841/108)*t + 16/116, sonst.
h_ab liegt zwischen 0° und 90° falls a und b positiv sind,
zwischen 90° und 180° falls negativ ist und b positiv ist,
zwischen 180° und 270° falls a und b negativ sind und
zwischen 270° und 360° falls a positiv ist und b negativ ist.
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.)
f(t) = t^(1/3), t > (24/116)^3
f(t) = (841/108)*t + 16/116, sonst.
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.)
f(t) = t^(1/3), t > (24/116)^3
f(t) = (841/108)*t + 16/116, sonst.
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.)
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 (Rot-Kanal).
Eingabebild (Grün-Kanal).
Eingabebild (Blau-Kanal).
Farbtransformiertes Ausgabebild (Kanal 1).
Farbtransformiertes Ausgabebild (Kanal 2).
Farbtransformiertes Ausgabebild (Kanal 3).
Gewünschte Farbtransformation.
Defaultwert: 'hsv'
Werteliste: 'argyb', 'cielab', 'cielchab', 'cielchuv', 'cieluv', 'ciexyz', 'ciexyz2', 'ciexyz3', 'ciexyz4', 'hls', 'hsi', 'hsv', 'i1i2i3', 'ihs', '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_from_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.
linear_trans_color, rgb1_to_gray, rgb3_to_gray
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 |