trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgbtrans_from_rgb (算子)

名称

trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgbtrans_from_rgb — 将图像从 RGB 色彩空间变换到任意色彩空间。

签名

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   ( Windows only)

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)

def trans_from_rgb(image_red: HObject, image_green: HObject, image_blue: HObject, color_space: str) -> Tuple[HObject, HObject, HObject]

描述

trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgbTransFromRgbtrans_from_rgb transforms an image from the RGB color space to an arbitrary color space (ColorSpaceColorSpaceColorSpaceColorSpacecolorSpacecolor_space). The three channels of the image are passed as three separate images on input and output.

算子 trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgbTransFromRgbtrans_from_rgb supports the image types byte, uint2, int4, and real. In the case of real images, all values should lay within 0 and 1. If not, the results of the transformation may not be reasonable.

Certain scalings are performed accordingly to the image type:

Supported are the transformations listed below. Note, all domains are based on RGB values scaled to [0; 1]. To obtain the domain of a certain image type, they must be scaled accordingly with the value range. Due to different precision the values obtained using the given equations may slightly differ from the values returned by the operator.

'yiq'

Range of values:

'yuv'

Note, this implies that , , and are not independent of each other.

Range of values:

'argyb'

Range of values:

'ciexyz'

The primary colors used correspond to sRGB respectively CIE Rec. 709. D65 is used as white point.

Used primary colors (x, y, z):

Range of values:

'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

Range of values:

'hsi'

Range of values:

'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

Range of values:

'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

Range of values:

'cielab'

where

f(t) = t^(1/3), t > (24/116)^3 f(t) = (841/108)*t + 16/116, otherwise. Black point B: (Rb, Gb, Bb) = (0, 0, 0) White point W = (Rw, Gw, Bw), according to image type: 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)

Range of values:

(Scaled to the maximum gray value in the case of byte and uint2. In the case of int4 L and a are scaled to the maximum gray value, b is scaled to the minimum gray value, such that the origin stays at 0.)

'cielchab'

where

f(t) = t^(1/3), t > (24/116)^3 f(t) = (841/108)*t + 16/116, otherwise. h_ab lies between 0° and 90° if a and b are both positive, between 90° and 180° if a is negative and b is positive, between 180° and 270° if a and b are both negative, and between 270° and 360° if a is positive and b is negative. Black point B: (Rb, Gb, Bb) = (0, 0, 0) White point W = (Rw, Gw, Bw), according to image type: 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)

Range of values:

(Scaled to the maximum gray value in the case of byte and uint2. In the case of int4, L and C are scaled to the maximum gray value, while h is given in seconds of arc.)

'cieluv'

where

f(t) = t^(1/3), t > (24/116)^3 f(t) = (841/108)*t + 16/116, otherwise. Black point B: (Rb, Gb, Bb) = (0, 0, 0) White point W = (Rw, Gw, Bw), according to image type: 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)

Range of values:

(Scaled to the maximum gray value in the case of byte and uint2. In the case of int4 L and u are scaled to the maximum gray value, v is scaled to the minimum gray value, such that the origin stays at 0.)

'cielchuv'

where

f(t) = t^(1/3), t > (24/116)^3 f(t) = (841/108)*t + 16/116, otherwise. h_uv lies between 0° and 90° if u and v are both positive, between 90° and 180° if u is negative and v is positive, between 180° and 270° if u and v are both negative, and between 270° and 360° if u is positive and v is negative. Black point B: (Rb, Gb, Bb) = (0, 0, 0) White point W = (Rw, Gw, Bw), according to image type: 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)

Range of values:

(Scaled to the maximum gray value in the case of byte and uint2. In the case of int4, L and C are scaled to the maximum gray value, while h is given in seconds of arc.)

'i1i2i3'

Range of values:

'ciexyz2'

Range of values:

'ciexyz3'

Range of values:

'ciexyz4'

Used primary colors (x, y, z):

Range of values:

'lms'

This conceptually is a transformation from RGB to CIE XYZ (see 'ciexyz'"ciexyz""ciexyz""ciexyz""ciexyz""ciexyz" above) followed by a transformation from CIE XYZ to LMS.

Range of values:

注意

As the calculations are made with a different numerical precision, the OpenCL implementation of the cielab transformation for images of type int4 is slightly less accurate than the pure C version.

执行信息

参数

ImageRedImageRedImageRedImageRedimageRedimage_red (输入对象)  singlechannelimage(-array) objectHImageHObjectHImageHobject (byte / uint2 / int4 / real)

Input image (red channel).

ImageGreenImageGreenImageGreenImageGreenimageGreenimage_green (输入对象)  singlechannelimage(-array) objectHImageHObjectHImageHobject (byte / uint2 / int4 / real)

Input image (green channel).

ImageBlueImageBlueImageBlueImageBlueimageBlueimage_blue (输入对象)  singlechannelimage(-array) objectHImageHObjectHImageHobject (byte / uint2 / int4 / real)

Input image (blue channel).

ImageResult1ImageResult1ImageResult1ImageResult1imageResult1image_result_1 (输出对象)  singlechannelimage(-array) objectHImageHObjectHImageHobject * (byte / uint2 / int4 / real)

颜色变换后的输出图像(通道 1 )。

ImageResult2ImageResult2ImageResult2ImageResult2imageResult2image_result_2 (输出对象)  singlechannelimage(-array) objectHImageHObjectHImageHobject * (byte / uint2 / int4 / real)

颜色变换后的输出图像(通道 1 )。

ImageResult3ImageResult3ImageResult3ImageResult3imageResult3image_result_3 (输出对象)  singlechannelimage(-array) objectHImageHObjectHImageHobject * (byte / uint2 / int4 / real)

颜色变换后的输出图像(通道 1 )。

ColorSpaceColorSpaceColorSpaceColorSpacecolorSpacecolor_space (输入控制)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Color space of the output image.

默认值: 'hsv' "hsv" "hsv" "hsv" "hsv" "hsv"

值列表: 'argyb'"argyb""argyb""argyb""argyb""argyb", 'cielab'"cielab""cielab""cielab""cielab""cielab", 'cielchab'"cielchab""cielchab""cielchab""cielchab""cielchab", 'cielchuv'"cielchuv""cielchuv""cielchuv""cielchuv""cielchuv", 'cieluv'"cieluv""cieluv""cieluv""cieluv""cieluv", 'ciexyz'"ciexyz""ciexyz""ciexyz""ciexyz""ciexyz", 'ciexyz2'"ciexyz2""ciexyz2""ciexyz2""ciexyz2""ciexyz2", 'ciexyz3'"ciexyz3""ciexyz3""ciexyz3""ciexyz3""ciexyz3", 'ciexyz4'"ciexyz4""ciexyz4""ciexyz4""ciexyz4""ciexyz4", 'hls'"hls""hls""hls""hls""hls", 'hsi'"hsi""hsi""hsi""hsi""hsi", 'hsv'"hsv""hsv""hsv""hsv""hsv", 'i1i2i3'"i1i2i3""i1i2i3""i1i2i3""i1i2i3""i1i2i3", 'ihs'"ihs""ihs""ihs""ihs""ihs", 'lms'"lms""lms""lms""lms""lms", 'yiq'"yiq""yiq""yiq""yiq""yiq", 'yuv'"yuv""yuv""yuv""yuv""yuv"

List of values (for compute devices): 'cielab'"cielab""cielab""cielab""cielab""cielab", 'cielchab'"cielchab""cielchab""cielchab""cielchab""cielchab", 'cieluv'"cieluv""cieluv""cieluv""cieluv""cieluv", 'cielchuv'"cielchuv""cielchuv""cielchuv""cielchuv""cielchuv", 'hsv'"hsv""hsv""hsv""hsv""hsv", 'hsi'"hsi""hsi""hsi""hsi""hsi"

示例(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)

示例(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);

示例(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)

示例(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)

示例(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)

结果

trans_from_rgbtrans_from_rgbTransFromRgbTransFromRgbTransFromRgbtrans_from_rgb 在所有参数正确时返回 2 ( H_MSG_TRUE )。 如果输入为空则可设置行为通过 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>)set_system("no_object_result", <Result>)。如有必要,则抛出异常。

可能的前趋

decompose3decompose3Decompose3Decompose3Decompose3decompose3

可能的后继

compose3compose3Compose3Compose3Compose3compose3

替代

linear_trans_colorlinear_trans_colorLinearTransColorLinearTransColorLinearTransColorlinear_trans_color, rgb1_to_grayrgb1_to_grayRgb1ToGrayRgb1ToGrayRgb1ToGrayrgb1_to_gray, rgb3_to_grayrgb3_to_grayRgb3ToGrayRgb3ToGrayRgb3ToGrayrgb3_to_gray

另见

trans_to_rgbtrans_to_rgbTransToRgbTransToRgbTransToRgbtrans_to_rgb

参考文献

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.

模块

基础