trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgb (Operator)

Name

trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgb — Transformation vom RGB- in einen anderen Farbraum.

Signatur

trans_from_rgb(ImageRed, ImageGreen, ImageBlue : ImageResult1, ImageResult2, ImageResult3 : ColorSpace : )

Herror trans_from_rgb(const Hobject ImageRed, const Hobject ImageGreen, const Hobject ImageBlue, Hobject* ImageResult1, Hobject* ImageResult2, Hobject* ImageResult3, const char* ColorSpace)

Herror T_trans_from_rgb(const Hobject ImageRed, const Hobject ImageGreen, const Hobject ImageBlue, Hobject* ImageResult1, Hobject* ImageResult2, Hobject* ImageResult3, const Htuple ColorSpace)

void TransFromRgb(const HObject& ImageRed, const HObject& ImageGreen, const HObject& ImageBlue, HObject* ImageResult1, HObject* ImageResult2, HObject* ImageResult3, const HTuple& ColorSpace)

HImage HImage::TransFromRgb(const HImage& ImageGreen, const HImage& ImageBlue, HImage* ImageResult2, HImage* ImageResult3, const HString& ColorSpace) const

HImage HImage::TransFromRgb(const HImage& ImageGreen, const HImage& ImageBlue, HImage* ImageResult2, HImage* ImageResult3, const char* ColorSpace) const

HImage HImage::TransFromRgb(const HImage& ImageGreen, const HImage& ImageBlue, HImage* ImageResult2, HImage* ImageResult3, const wchar_t* ColorSpace) const   (Nur Windows)

static void HOperatorSet.TransFromRgb(HObject imageRed, HObject imageGreen, HObject imageBlue, out HObject imageResult1, out HObject imageResult2, out HObject imageResult3, HTuple colorSpace)

HImage HImage.TransFromRgb(HImage imageGreen, HImage imageBlue, out HImage imageResult2, out HImage imageResult3, string colorSpace)

Beschreibung

trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgbTransFromRgb transformiert ein Bild von RGB in den angegebenen Farbraum (ColorSpaceColorSpaceColorSpaceColorSpacecolorSpace). 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 real-Bilder nur Werte zwischen 0 und 1 erhalten. 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:

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'

Wertebereich:

'yuv'

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

Wertebereich:

'argyb'

Wertebereich:

'ciexyz'

Die verwendeten Grundfarben entsprechen sRGB bzw. der CIE Rec. 709. Als Weißpunkt wird D65 verwendet.

Verwendete Grundfarben (x, y, z):

Wertebereich:

'hls'

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

Wertebereich:

'hsi'

Wertebereich:

'hsv'

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

Wertebereich:

'ihs'

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

Wertebereich:

'cielab'

mit

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)

Wertebereich:

(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'

mit

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)

Wertebereich:

(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'

mit

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)

Wertebereich:

(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'

mit

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)

Wertebereich:

(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.)

'i1i2i3'

Wertebereich:

'ciexyz2'

Wertebereich:

'ciexyz3'

Wertebereich:

'ciexyz4'

Verwendete Grundfarben (x, y, z):

Wertebereich:

'lms'

Dies stellt konzeptuell eine Transformation von RGB nach CIE XYZ (siehe 'ciexyz'"ciexyz""ciexyz""ciexyz""ciexyz" oben) gefolgt von einer Transformation von CIE XYZ nach LMS dar.

Wertebereich:

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

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

Eingabebild (Rot-Kanal).

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

Eingabebild (Grün-Kanal).

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

Eingabebild (Blau-Kanal).

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

Farbtransformiertes Ausgabebild (Kanal 1).

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

Farbtransformiertes Ausgabebild (Kanal 2).

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

Farbtransformiertes Ausgabebild (Kanal 3).

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", 'ciexyz2'"ciexyz2""ciexyz2""ciexyz2""ciexyz2", 'ciexyz3'"ciexyz3""ciexyz3""ciexyz3""ciexyz3", 'ciexyz4'"ciexyz4""ciexyz4""ciexyz4""ciexyz4", 'hls'"hls""hls""hls""hls", 'hsi'"hsi""hsi""hsi""hsi", 'hsv'"hsv""hsv""hsv""hsv", 'i1i2i3'"i1i2i3""i1i2i3""i1i2i3""i1i2i3", 'ihs'"ihs""ihs""ihs""ihs", '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_from_rgbtrans_from_rgbTransFromRgbTransFromRgbTransFromRgb 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

Alternativen

linear_trans_colorlinear_trans_colorLinearTransColorLinearTransColorLinearTransColor, rgb1_to_grayrgb1_to_grayRgb1ToGrayRgb1ToGrayRgb1ToGray, rgb3_to_grayrgb3_to_grayRgb3ToGrayRgb3ToGrayRgb3ToGray

Siehe auch

trans_to_rgbtrans_to_rgbTransToRgbTransToRgbTransToRgb

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