x
with type
equal to responsivity.material
and 3 responsivity spectra.
The function plotOptimals3D
makes a wireframe plot of the object-color solid for x
.
The 3D drawing package 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 set.
For more see discussion probeOptimalColors
.## S3 method for class 'colorSpec':
plotOptimals3D( x, size=c(33,33) )
type
equal to responsivity.material
and 3 spectraTRUE
or FALSE
x
,
which are fortunately true for the human responsivity functions xyz1931.1nm
.
But they are certainly not true for all x
,
so the plotted surface seen here might really be sub-optimal.
For general x
it may require reflectance
functions with 3,4,5,... transitions to define the optimals.x
are non-negative,
the object-color solid of x
is inside the box.
If the responsivity functions of x
have negative lobes,
the object-color solid of x
extends outside the box.
Indeed, the box may actually be inside the optimals.
The responsivity functions cannot all simultaneously vanish at any wavelength.
In that case the mapping from the $\omega$ and $\delta$ sphere
to the output response space is not injective.x
with 2 spectra,
it would not take much work to write a new function
plotOptimals2D
that plots the 1-transition colors for x
.
These are the short-pass and long-pass colors,
also known as edge colors or Kantenfarben.
With a lot more work it would be possible to
plot the true optimals for x
, with any number of transitions between 0 and 1.x
has
a natural parameterization by $\omega$ and $\delta$,
which are analogous to longitude and latitude for the sphere.
See Logvinenko for more details.
These 2 parameters define reflectance spectra with 2 or fewer transitions
between 0 and 1.
By default, the function draws a wireframe with 33 meridians
and 33 parallels.
In addition it draws the box with opposite vertices at the "poles" 0 and W
and the diagonal segment of neutral grays that connects 0 and W.
It draws a small ball at the midpoint;
the Rösch Farbkörper is symmetrical about this midpoint.type
,
probeOptimalColors
vignette optimals# requires package rgl
library( rgl )
human = product( D50.5nm, 'slot', xyz1931.5nm, wave=400:770 )
plotOptimals3D( human )
scanner = product( D50.5nm, 'slot', BT.709.RGB, wave=400:770 )
plotOptimals3D( scanner )
Run the code above in your browser using DataLab