# basic-paramTF: Basic Parameterized TransferFunctions In spacesRGB: Standard and User-Defined RGB Color Spaces, with Conversion Between RGB and CIE XYZ

## Description

Each of these functions returns a `TransferFunction` object, that depends on the argument values passed to it. The returned object has the parameter values "locked in". These `TransferFunction` objects are a mixture of EOTFs, OETFs, OOTFs, and general-purpose transfer functions.

## Usage

 ```1 2 3 4 5 6``` ```power.OETF( gamma ) power.EOTF( gamma ) power.OOTF( gamma ) BT.1886.EOTF( gamma=2.4, Lb=0, Lw=1 ) XYZfromRGB.TF( primaries, white ) affine.TF( y0, y1 ) ```

## Arguments

 `gamma` the value of γ; it must be positive `Lb` the black level `Lw` the white level `primaries` a 3x2 or 4x2 matrix; see Details `white` a vector of length 1, 2, or 3; see Details `y0` the number to which 0 maps `y1` the number to which 1 maps

## Details

There are 3 valid combinations of `primaries` and `white`, as given in this table:

 `dim(primaries)` `length(white)` Description 4x2 1 `primaries` is a 4x2 matrix with CIE xy chromaticities of R,G,B,W in the rows 3x2 2 `primaries` is a 3x2 matrix with CIE xy chromaticities of R,G,B in the rows 3x2 3 `primaries` is a 3x2 matrix with CIE xy chromaticities of R,G,B in the rows

If `length(white)` is 1, then `white` is the whitepoint Y. If `length(white)` is 2, then `white` is the whitepoint xy (CIE chromaticity); the whitepoint Y is taken to be 1. If `length(white)` is 3, `white` is the whitepoint XYZ (CIE tristimulus).
`primaries` can also be a plain numeric vector of length 6 or 8, which is then converted to a 3x2 or 4x2 matrix, by row.

## Value

`power.OETF()` returns a `TransferFunction` with the classical 1/γ power law. `power.EOTF()` returns a `TransferFunction` with the classical γ power law. `power.OOTF()` is the same as `power.EOTF()`, but having a different name may make the creation of new RGB spaces clearer. All three of these map [0,1] to [0,1].

`BT.1886.EOTF()` returns a `TransferFunction` that maps [0,1] to [`Lb`,`Lw`], with non-linearity given by `gamma`. The BT.1886 standard has details in Annex 1.

`XYZfromRGB.TF()` returns a 3D `TransferFunction` that is linear and maps RGB=(1,1,1) to the XYZ of white. The domain is set to the ACES cube [-65504, 65504]^3 and the range is set to the smallest enclosing box. For the inverse one can use `XYZfromRGB.TF()^-1`.

`affine.TF()` returns a 1D `TransferFunction` that maps 0 \rarrow y_0 and 1 \rarrow y_1 in an affine way. One must have y_0 \ne y_1, but is is OK to have y_0 > y_1. No quantities are associated with these values; the function is intended for arbitrary 1D scaling.

## References

BT.1886. Reference electro-optical transfer function for flat panel displays used in HDTV studio production. March 2011.

`TransferFunction`