Description Usage Arguments Details Value Known Issues References See Also Examples

View source: R/colorSpec.optimal.R

Consider a **colorSpec** object `x`

with `type`

equal to `responsivity.material`

.
The set of all possible material reflectance functions (or transmittance functions)
is convex, closed, and bounded (in any reasonable function space),
and this implies that the set of all possible output responses
from `x`

is also convex, closed, and bounded.
The latter set is called the *object-color solid* or *Rösch Farbkörper* for `x`

.
A color on the boundary of the *object-color solid* is called an *optimal color*.
The special points **W** (the response to the perfect reflecting diffuser)
and **0** are on the boundary of this set.
The interior of the line segment of neutrals joining **0** to **W** is in the interior of the
*object-color solid*.
It is natural to parameterize this segment from 0 to 1 (from **0** to **W**).
The solid is symmetrical about the neutral gray midpoint **G**=**W/2**.

Now suppose that `x`

has 3 spectra (3 responses)
and consider a color response **R** not equal to **G**.
There is a ray based at **G** and passing through **R**
that intersects the boundary of the
*object-color solid* at an *optimal color* **B** on the boundary
with Logvinenko coordinates *(δ,ω)*.
If these 2 coordinates are combined with *α*, where
**R** = *(1-α)***G** + *α***B**,
it yields the *Logvinenko coordinates*
*(α,δ,ω)* of **R**.
These coordinates are also denoted by ADL; see **References**.
A response is in the *object-color solid* iff *α ≤ 1*.
A response is *optimal* iff *α=1*.

The coordinates of **0** are *(α,δ,ω)*=(1,0,0).
The coordinates of **W** are *(α,δ,ω)*=(1,1,0).
The coordinates of **G** are undefined.

1 2 | ```
## S3 method for class 'colorSpec'
computeADL( x, response )
``` |

`x` |
a |

`response` |
a numeric Nx3 matrix with responses in the rows, or a numeric vector that can be converted to such a matrix, by row. |

For each response, a ray is computed and the ray tracing is
done by `probeOptimalColors()`

.

`computeADL()`

returns a `data.frame`

with a row for each response.
The columns in the data frame are:

`response` |
the input response vector |

`ADL` |
the computed ADL coordinates of the response vector |

`omega` |
the reparameterized |

`lambda` |
lambda.1 and lambda.2 at the 2 transitions, in nm. lambda.1 < lambda.2 => bandpass, and lambda.1 > lambda.2 => bandstop. |

If an individual ray could not be traced, the row contains `NA`

in appropriate columns.

In case of global error, the function returns `NULL`

.

The optimal color boundary is not differentiable at **0** and **W**.
There may be numerical iteration failures if the response
is near the neutral axis.

Logvinenko, A. D.
An object-color space.
**Journal of Vision**.
9(11):5, 1-23, (2009).
https://jov.arvojournals.org/article.aspx?articleid=2203976.
doi:10.1167/9.11.5.

Godau, Christoph and Brian Funt. XYZ to ADL: Calculating Logvinenko's Object Color Coordinates. Proceedings Eighteenth IS&T Color Imaging Conference. San Antonio. Nov 2009.

`type()`

,
`probeOptimalColors()`

,
vignette **optimals**

1 2 3 4 5 | ```
D50.eye = product( D50.5nm, 'varmat', xyz1931.1nm, wave='auto' )
computeADL( D50.eye, c(30,50,70) )
# response.x response.y response.z ADL.alpha ADL.delta ADL.lambda omega lambda.1 lambda.2
# 30 50 70 0.7364348 0.5384243 473.3909184 0.3008561 427.1431 555.5176
#since alpha < 1, this response is *inside* the object-color solid
``` |

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.