Commit 64fd3103 authored by Mathias Bynens's avatar Mathias Bynens Committed by Commit Bot

Improve vision deficiency color matrices per research paper

The filter color matrices are now based on the following research paper:

    Gustavo M. Machado, Manuel M. Oliveira, and Leandro A. F. Fernandes
    “A Physiologically-based Model for Simulation of Color Vision Deficiency”.
    IEEE Transactions on Visualization and Computer Graphics. Volume 15 (2009),
    Number 6, November/December 2009. pp. 1291-1298.
    https://www.inf.ufrgs.br/~oliveira/pubs_files/CVD_Simulation/CVD_Simulation.html

Bug: chromium:1003700
Change-Id: Ib60d6d740f5842f2d4a3271fc48594a631611507
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2124500Reviewed-by: default avatarRune Lillesveen <futhark@chromium.org>
Reviewed-by: default avatarBenedikt Meurer <bmeurer@chromium.org>
Commit-Queue: Mathias Bynens <mathias@chromium.org>
Cr-Commit-Position: refs/heads/master@{#754419}
parent 56d482bc
...@@ -23,40 +23,46 @@ AtomicString CreateFilterDataUrl(AtomicString piece) { ...@@ -23,40 +23,46 @@ AtomicString CreateFilterDataUrl(AtomicString piece) {
AtomicString CreateVisionDeficiencyFilterUrl( AtomicString CreateVisionDeficiencyFilterUrl(
VisionDeficiency vision_deficiency) { VisionDeficiency vision_deficiency) {
// The filter color matrices are based on the following research paper:
// Gustavo M. Machado, Manuel M. Oliveira, and Leandro A. F. Fernandes
// "A Physiologically-based Model for Simulation of Color Vision Deficiency".
// IEEE Transactions on Visualization and Computer Graphics. Volume 15 (2009),
// Number 6, November/December 2009. pp. 1291-1298.
// https://www.inf.ufrgs.br/~oliveira/pubs_files/CVD_Simulation/CVD_Simulation.html
switch (vision_deficiency) { switch (vision_deficiency) {
case VisionDeficiency::kAchromatopsia: case VisionDeficiency::kAchromatopsia:
return CreateFilterDataUrl( return CreateFilterDataUrl(
"<feColorMatrix values=\"" "<feColorMatrix values=\""
"0.299 0.587 0.114 0.000 0.000 " "0.299 0.587 0.114 0.000 0.000 "
"0.299 0.587 0.114 0.000 0.000 " "0.299 0.587 0.114 0.000 0.000 "
"0.299 0.587 0.114 0.000 0.000 " "0.299 0.587 0.114 0.000 0.000 "
"0.000 0.000 0.000 1.000 0.000 " "0.000 0.000 0.000 1.000 0.000 "
"\"/>"); "\"/>");
case VisionDeficiency::kBlurredVision: case VisionDeficiency::kBlurredVision:
return CreateFilterDataUrl("<feGaussianBlur stdDeviation=\"2\"/>"); return CreateFilterDataUrl("<feGaussianBlur stdDeviation=\"2\"/>");
case VisionDeficiency::kDeuteranopia: case VisionDeficiency::kDeuteranopia:
return CreateFilterDataUrl( return CreateFilterDataUrl(
"<feColorMatrix values=\"" "<feColorMatrix values=\""
"0.625 0.375 0.000 0.000 0.000 " " 0.367 0.861 -0.228 0.000 0.000 "
"0.700 0.300 0.000 0.000 0.000 " " 0.280 0.673 0.047 0.000 0.000 "
"0.000 0.300 0.700 0.000 0.000 " "-0.012 0.043 0.969 0.000 0.000 "
"0.000 0.000 0.000 1.000 0.000 " " 0.000 0.000 0.000 1.000 0.000 "
"\"/>"); "\"/>");
case VisionDeficiency::kProtanopia: case VisionDeficiency::kProtanopia:
return CreateFilterDataUrl( return CreateFilterDataUrl(
"<feColorMatrix values=\"" "<feColorMatrix values=\""
"0.567 0.433 0.000 0.000 0.000 " " 0.152 1.053 -0.205 0.000 0.000 "
"0.558 0.442 0.000 0.000 0.000 " " 0.115 0.786 0.099 0.000 0.000 "
"0.000 0.242 0.758 0.000 0.000 " "-0.004 -0.048 1.052 0.000 0.000 "
"0.000 0.000 0.000 1.000 0.000 " " 0.000 0.000 0.000 1.000 0.000 "
"\"/>"); "\"/>");
case VisionDeficiency::kTritanopia: case VisionDeficiency::kTritanopia:
return CreateFilterDataUrl( return CreateFilterDataUrl(
"<feColorMatrix values=\"" "<feColorMatrix values=\""
"0.950 0.050 0.000 0.000 0.000 " " 1.256 -0.077 -0.179 0.000 0.000 "
"0.000 0.433 0.567 0.000 0.000 " "-0.078 0.931 0.148 0.000 0.000 "
"0.000 0.475 0.525 0.000 0.000 " " 0.005 0.691 0.304 0.000 0.000 "
"0.000 0.000 0.000 1.000 0.000 " " 0.000 0.000 0.000 1.000 0.000 "
"\"/>"); "\"/>");
case VisionDeficiency::kNoVisionDeficiency: case VisionDeficiency::kNoVisionDeficiency:
NOTREACHED(); NOTREACHED();
......
...@@ -8,15 +8,15 @@ Tests that vision deficiencies can be emulated. ...@@ -8,15 +8,15 @@ Tests that vision deficiencies can be emulated.
<p>Emulating "none": <p>Emulating "none":
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAFRJREFUWIXt18ENACAMw8DA5N0chnCQePgGiKz+ujI5aZru3K6uPWAgZSBlIGUgZSBlIGUgZSBlILWS030iyr6/oIGUgZSBlIGUgZSBlIGUgZSB1AXNwwVLtuf+dAAAAABJRU5ErkJggg=="> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAFRJREFUWIXt18ENACAMw8DA5N0chnCQePgGiKz+ujI5aZru3K6uPWAgZSBlIGUgZSBlIGUgZSBlILWS030iyr6/oIGUgZSBlIGUgZSBlIGUgZSB1AXNwwVLtuf+dAAAAABJRU5ErkJggg==">
<p>Emulating "deuteranopia": <p>Emulating "deuteranopia":
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAF9JREFUWIXt17ENwCAQBMGHYohdqKuhEsduBorYQyLYKeC0+uzbM8aqoO9/k3PVo2sHGEgZSBlIGUgZSBlIGUgZSBlItaoZ/UnSrr+ggZSBlIGUgZSBlIGUgZSBlIHUBmSnBbHzufJtAAAAAElFTkSuQmCC"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAGJJREFUWIXt17ENgDAQBMG3AyLqcxkuxsXQFxEhFLGH5GCngNPqs29zHG8FretOzlWPrv3AQMpAykDKQMpAykDKQMpAykCq1flEf5K07S9oIGUgZSBlIGUgZSBlIGUgZSD1AVMZBlN0SH01AAAAAElFTkSuQmCC">
<p>Emulating "none": <p>Emulating "none":
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAFRJREFUWIXt18ENACAMw8DA5N0chnCQePgGiKz+ujI5aZru3K6uPWAgZSBlIGUgZSBlIGUgZSBlILWS030iyr6/oIGUgZSBlIGUgZSBlIGUgZSB1AXNwwVLtuf+dAAAAABJRU5ErkJggg=="> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAFRJREFUWIXt18ENACAMw8DA5N0chnCQePgGiKz+ujI5aZru3K6uPWAgZSBlIGUgZSBlIGUgZSBlILWS030iyr6/oIGUgZSBlIGUgZSBlIGUgZSB1AXNwwVLtuf+dAAAAABJRU5ErkJggg==">
<p>Emulating "protanopia": <p>Emulating "protanopia":
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAF9JREFUWIXt10ENwCAQBdEFI5VBahcnnEhVURHzm/QwT8DPZG/bxn2dCnr2TM5Vj659wEDKQMpAykDKQMpAykDKQMpAqlWt6E+S9vsLGkgZSBlIGUgZSBlIGUgZSBlIvZuvBc8DKP+1AAAAAElFTkSuQmCC"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAF1JREFUWIXt10ENACEQBMEFFwhExCnAEP5ARA/JPboETDr727ZmnQr6dnSuenTtAQMpAykDKQMpAykDKQMpAykDqVbjZJ+IsN9f0EDKQMpAykDKQMpAykDKQMpA6gJvXgZ9Xlbz3wAAAABJRU5ErkJggg==">
<p>Emulating "tritanopia": <p>Emulating "tritanopia":
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAF5JREFUWIXt17ENwCAQBEGwEC0RuQBaoP8qnJgi9pAIdgo4rT772sf7l6BvzeRceaJrBxhIGUgZSBlIGUgZSBlIGUgZSLX0D5F2/QUNpAykDKQMpAykDKQMpAykDKQ2h2YFBXR3unwAAAAASUVORK5CYII="> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAFhJREFUWIXt10ENACAQxEAgiMQJsnDHF0R0SXh0BGya+10tc5yStHZ0rkXXHjCQMpAykDKQMpAykDKQMpAykOrpHyLt+wsaSBlIGUgZSBlIGUgZSBlIGUhdCWsFapTFH60AAAAASUVORK5CYII=">
<p>Emulating "tritanopia": <p>Emulating "tritanopia":
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAF5JREFUWIXt17ENwCAQBEGwEC0RuQBaoP8qnJgi9pAIdgo4rT772sf7l6BvzeRceaJrBxhIGUgZSBlIGUgZSBlIGUgZSLX0D5F2/QUNpAykDKQMpAykDKQMpAykDKQ2h2YFBXR3unwAAAAASUVORK5CYII="> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAFhJREFUWIXt10ENACAQxEAgiMQJsnDHF0R0SXh0BGya+10tc5yStHZ0rkXXHjCQMpAykDKQMpAykDKQMpAykOrpHyLt+wsaSBlIGUgZSBlIGUgZSBlIGUhdCWsFapTFH60AAAAASUVORK5CYII=">
<p>Emulating "some-invalid-deficiency": <p>Emulating "some-invalid-deficiency":
{ {
"code": -32602, "code": -32602,
...@@ -48,7 +48,7 @@ Tests that vision deficiencies can be emulated. ...@@ -48,7 +48,7 @@ Tests that vision deficiencies can be emulated.
"message": "Unknown vision deficiency type" "message": "Unknown vision deficiency type"
} }
<p>Navigating&mldr; <p>Navigating&mldr;
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAF5JREFUWIXt17ENwCAQBEGwEC0RuQBaoP8qnJgi9pAIdgo4rT772sf7l6BvzeRceaJrBxhIGUgZSBlIGUgZSBlIGUgZSLX0D5F2/QUNpAykDKQMpAykDKQMpAykDKQ2h2YFBXR3unwAAAAASUVORK5CYII="> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAFhJREFUWIXt10ENACAQxEAgiMQJsnDHF0R0SXh0BGya+10tc5yStHZ0rkXXHjCQMpAykDKQMpAykDKQMpAykOrpHyLt+wsaSBlIGUgZSBlIGUgZSBlIGUhdCWsFapTFH60AAAAASUVORK5CYII=">
<p>Emulating "achromatopsia": <p>Emulating "achromatopsia":
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAFpJREFUWIXt10ENADEMxMD2eARR2IfQFYS3Uh8eACsrv+zu/lfQzCTn1hddu8BAykDKQMpAykDKQMpAykDKQGpXVfQnSXv+ggZSBlIGUgZSBlIGUgZSBlIGUgcPVwX7L3bHewAAAABJRU5ErkJggg=="> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAFpJREFUWIXt10ENADEMxMD2eARR2IfQFYS3Uh8eACsrv+zu/lfQzCTn1hddu8BAykDKQMpAykDKQMpAykDKQGpXVfQnSXv+ggZSBlIGUgZSBlIGUgZSBlIGUgcPVwX7L3bHewAAAABJRU5ErkJggg==">
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment