Learn R Programming

spacesRGB (version 1.5-0)

Linear RGB and XYZ Calculation: Convert Signal RGB coordinates to XYZ, or Linear RGB

Description

Convert signal RGB coordinates to XYZ, or to linear RGB

Usage

XYZfromRGB( RGB, space='sRGB', which='scene', TF=NULL, maxSignal=1 ) 

LinearRGBfromSignalRGB( RGB, space='sRGB', which='scene', TF=NULL, maxSignal=1 )

Value

XYZfromRGB() returns a data.frame with N rows and these columns:

XYZ

the calculated XYZ vectors. These are for viewing under the white point of the given RGB space.

OutOfGamut

a logical vector. TRUE means the input signal RGB is outside the cube [0,maxSignal]\(^3\). If TF is not identity.TF, then the input signal RGBs are clamped to this cube before further calculations.

LinearRGBfromSignalRGB() returns a data.frame with N rows and these columns:

RGB

the calculated linear RGB vectors, either scene linear or display linear.

OutOfGamut

a logical vector. TRUE means the input signal RGB is outside the cube [0,maxSignal]\(^3\). If TF is not identity.TF, then the signal RGBs are clamped to this cube before linearizing.

In case of error, both functions return NULL.

Arguments

RGB

a numeric Nx3 matrix with non-linear signal RGB coordinates in the rows, or a vector that can be converted to such a matrix, by row. These should be in the appropriate cube [0,maxSignal]\(^3\).

space

the name of an installed RGB space. The name matching is partial and case-insensitive.

which

either 'scene' or 'display'. For XYZfromRGB() which describes the output XYZ. For LinearRGBfromSignalRGB() which describes the output RGB. Usually the OOTF for the space is the identity and so 'scene' and 'display' are the same.

TF

if not NULL, TF is a TransferFunction that overrides the appropriate transfer function of space.
TF can also be a positive number. If TF=1, then TF is set to identity.TF, so the returned RGB values are not clamped (see Value). If TF!=1 it is used to create either power.EOTF() or power.OETF() as approriate. If TF is not NULL in LinearRGBfromSignalRGB(), then space is ignored.

maxSignal

maximum value of the input signal RGB. Other common values are 100, 255, 1023, 4095, and 65535. Even when 1, they are still taken to be non-linear signal values.

Details

In XYZfromRGB(), the conversion is done in 2 steps:

  • signal RGB → linear RGB using LinearRGBfromSignalRGB() and all other the given arguments

  • linear RGB → XYZ using the appropriate 3x3 matrix for the given space and which

References

Wikipedia. RGB color space. https://en.wikipedia.org/wiki/RGB_color_space

See Also

RGBfromXYZ(), SignalRGBfromLinearRGB(), installRGB()

Examples

Run this code
XYZfromRGB( c(128,200,255, 0,0,0,  255,255,255), max=255 )$XYZ * 100
##              X         Y        Z
##  [1,] 47.60334  53.11601 102.3549
##  [2,]  0.00000   0.00000   0.0000
##  [3,] 95.04559 100.00000 108.9058


XYZfromRGB( c(128,200,255, 0,0,0,  255,255,255), space='Adobe', max=255 )$XYZ   * 100
##              X         Y        Z
##  [1,] 42.36398  50.82876 103.8704
##  [2,]  0.00000   0.00000   0.0000
##  [3,] 95.04559 100.00000 108.9058

Run the code above in your browser using DataLab