simulate_cvd {colorspace} | R Documentation |
Simulate Color Vision Deficiency
Description
Transformation of R colors by simulating color vision deficiencies, based on a CVD transform matrix.
Usage
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)
Arguments
col |
vector of R colors. Can be any of the three kinds of R colors,
i.e., either a color name (an element of |
cvd_transform |
numeric 3x3 matrix, specifying the color vision deficiency transform matrix. |
linear |
logical. Should the color vision deficiency transformation be applied to the
linearized RGB coordinates (default)? If |
severity |
numeric. Severity of the color vision defect, a number between 0 and 1. |
cvd |
list of cvd transformation matrices. See |
Details
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
matrix (see cvd
) and transformation equation.
The functions deutan
, protan
, and 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
the function interpolate_cvd_transform
(see examples).
If input col
is a matrix with three rows named R
, G
, and
B
(top down) they are interpreted as Red-Green-Blue values within the
range [0-255]
. Then the CVD transformation is applied directly to these
coordinates avoiding any further conversions.
Finally, if 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
coordinates. Optionally, 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.
Value
A color object as specified in the input col
(hexadecimal string, RGB matrix,
or formal color class) with simulated color vision deficiency.
References
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
See Also
Examples
# simulate color-vision deficiency by calling `simulate_cvd` with specified matrix
simulate_cvd(c("#005000", "blue", "#00BB00"), tritanomaly_cvd["6"][[1]])
# simulate color-vision deficiency by calling the shortcut high-level function
tritan(c("#005000", "blue", "#00BB00"), severity = 0.6)
# 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))
# 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)