Color science 8 min
Remap, not restore
Software that claims to correct color blindness is describing something impossible. What it can honestly do is still worth doing.
Search for color blindness software and you will find a lot of promises to correct, fix, or restore color vision. Filters that “let you see the colors you have been missing.” The language is consistent across products and it describes something that cannot happen.
This lab has a rule about it, written into the project’s own instructions: the operation is called remapping for discriminability, never restoration. This post is why the distinction is not pedantry.
What dichromacy actually is
A person with normal color vision has three cone classes with different spectral sensitivities. Color perception starts as three numbers per point in the visual field.
In dichromacy, one class is absent or shifted. Perception starts as two numbers. That is a dimensional reduction happening in the retina, before anything downstream can intervene.
The consequence is arithmetic, not medical. Distinct spectra that produced distinct triples now produce identical pairs. Information has been projected out. Nothing displayed on a monitor can restore it, because the projection happens after the light leaves the screen and enters the eye. A filter cannot add a dimension back to a two-dimensional signal.
So “restore” is not an overstatement. It names an operation that is not physically available.
What can be done instead
Something genuinely useful, and it is worth being precise about what.
The information loss is not uniform. Some pairs of colors collapse under dichromacy; others stay far apart. A red and a green that are clearly different for a trichromat may be nearly identical for a deuteranope, while a blue and a yellow remain easy to tell apart.
That means a palette can be rechosen so the distinctions that matter survive the projection. You are not restoring the original colors. You are picking different colors whose images under the projection remain separated.
Concretely: take a categorical palette where two classes collapse under deuteranopia. Move those colors — possibly a long way, possibly to hues that look wrong to a trichromat — until their simulated versions are far apart. The result is a palette that carries the same categorical information to more viewers.
This is a real, valuable, achievable operation. It is not the operation the marketing language describes.
Why the language matters
Three reasons this lab is strict about it.
It sets a false expectation. Someone told software will restore their color vision, who then uses it and finds colors still confusable, concludes the tool is broken. The tool may be working perfectly. The claim was wrong.
It hides the trade-off. Remapping changes colors. A remapped palette may look wrong, or unbranded, or simply different to a trichromat. That is the actual cost, and it is a decision someone should make knowingly. “Restore” implies no trade-off exists.
It obscures where the win is. The gain is discriminability, measurable as minimum pairwise separation under the simulated observer. That is a number you can certify, optimize, and check. “Restored color” is not a measurable quantity, so a product claiming it cannot be evaluated.
The severity table, and a small piece of rigor
The simulation underneath uses Machado’s 2009 model, which provides matrices for each dichromacy type across a range of severities — real color vision deficiency is often partial rather than total.
This lab originally implemented full severity exactly and approximated intermediate severities by linearly blending toward the identity. That is a reasonable stopgap and it is not what the paper says. The published matrices at severity 0.5 are not the midpoint between identity and the severity-1.0 matrix.
The full per-0.1-severity table is now implemented in both engines. Worth noting: the severity-1.0 rows are bit-identical to the constants that were already there, so all 401 golden vectors were unchanged by the fix — verified rather than assumed, since a golden update would have needed its own justification. Only the intermediate severities moved, from an approximation to the published values.
Nobody would have noticed the approximation from the outputs. It mattered because a tool that reports “severity 0.6” should mean the published severity 0.6.
The honest description
What the compensation tool in this lab does: given a palette and a set of observer models, search for a palette whose minimum pairwise separation under those models is as large as possible, and report the separation achieved.
What it does not do: restore, correct, fix, or cure anything.
The first description is longer and less exciting. It also describes something the tool can be held to, which is the only kind of claim worth making.