Transformation of R colors by simulating color vision deficiencies, based on a CVD transform matrix.
simulate_cvd(col, cvd_transform, linear = TRUE) deutan(col, severity = 1, linear = TRUE) protan(col, severity = 1, linear = TRUE) tritan(col, severity = 1, linear = TRUE) interpolate_cvd_transform(cvd, severity = 1)
vector of R colors. Can be any of the three kinds of R colors,
i.e., either a color name (an element of
colors), a hexadecimal (hex)
string of the form
col can be
color-class object or a matrix with three named
rows (or columns) containing R/G/B (0-255) values.
numeric 3x3 matrix, specifying the color vision deficiency transform matrix.
logical. Should the color vision deficiency transformation be applied to the
linearized RGB coordinates (default)? If
FALSE, the transformation is applied to the
gamma-corrected sRGB coordinates (which was the default up to version 2.0-3 of the package).
numeric. Severity of the color vision defect, a number between 0 and 1.
list of cvd transformation matrices. See
cvd for available options.
A color object as specified in the input
col (hexadecimal string, RGB matrix,
or formal color class) with simulated color vision deficiency.
Using the physiologically-based model for simulating color vision deficiency (CVD)
of Machado et al. (2009), different kinds of limitations can be
emulated: deuteranope (green cone cells defective), protanope (red cone cells defective),
and tritanope (blue cone cells defective).
The workhorse function to do so is
simulate_cvd which can take any vector
of valid R colors and transform them according to a certain CVD transformation
cvd) and transformation equation.
tritan are the high-level functions for
simulating the corresponding kind of colorblindness with a given severity.
Internally, they all call
simulate_cvd along with a (possibly interpolated)
version of the matrices from
cvd. Matrix interpolation can be carried out with
interpolate_cvd_transform (see examples).
col is a matrix with three rows named
B (top down) they are interpreted as Red-Green-Blue values within the
[0-255]. Then the CVD transformation is applied directly to these
coordinates avoiding any further conversions.
col is a formal
color-class object, then its
coordinates are transformed to (s)RGB coordinates, as described above, and returned as a formal
object of the same class after the color vision deficiency simulation.
Up to version 2.0-3 of the package, the CVD transformations had been applied
directly to the gamma-corrected sRGB coordinates (corresponding to the hex coordinates
of the colors), following the illustrations of Machado et al. (2009). However,
the paper implicitly relies on a linear RGB space (see page 1294, column 1) where their
linear matrix transformations for simulating color vision deficiencies are applied.
Therefore, starting from version 2.1-0 of the package, a new argument
linear = TRUE
has been added that first maps the provided colors to linearized RGB coordinates, applies
the color vision deficiency transformation, and then maps back to gamma-corrected sRGB
linear = FALSE can be used to restore the behavior
from previous versions. For most colors the difference between the two strategies is
negligible but for some highly-saturated colors it becomes more noticable, e.g., for
red, purple, or orange.
Machado GM, Oliveira MM, Fernandes LAF (2009). “A Physiologically-Based Model for Simulation of Color Vision Deficiency.” IEEE Transactions on Visualization and Computer Graphics. 15(6), 1291--1298. doi:10.1109/TVCG.2009.113 Online version with supplements at http://www.inf.ufrgs.br/~oliveira/pubs_files/CVD_Simulation/CVD_Simulation.html.
Zeileis A, Fisher JC, Hornik K, Ihaka R, McWhite CD, Murrell P, Stauffer R, Wilke CO (2020). “colorspace: A Toolbox for Manipulating and Assessing Colors and Palettes.” Journal of Statistical Software, 96(1), 1--49. doi:10.18637/jss.v096.i01
# simulate color-vision deficiency by calling `simulate_cvd` with specified matrix simulate_cvd(c("#005000", "blue", "#00BB00"), tritanomaly_cvd["6"][]) #>  "#004F2C" "#0046D7" "#00B96F" # simulate color-vision deficiency by calling the shortcut high-level function tritan(c("#005000", "blue", "#00BB00"), severity = 0.6) #>  "#004F2C" "#0046D7" "#00B96F" # simulate color-vision deficiency by calling `simulate_cvd` with interpolated cvd matrix simulate_cvd(c("#005000", "blue", "#00BB00"), interpolate_cvd_transform(tritanomaly_cvd, severity = 0.6)) #>  "#004F2C" "#0046D7" "#00B96F" # apply CVD directly on wide RGB matrix (with R/G/B channels in rows) RGB <- diag(3) * 255 rownames(RGB) <- c("R", "G", "B") deutan(RGB) #> [,1] [,2] [,3] #> R 93.66711 219.4647 0.00000 #> G 71.42167 171.4878 12.09031 #> B 0.00000 10.9497 247.06465