平常看的 Full HD 像素是 1920x1080,代表橫的方向有 1920 個畫素、直的有 1080 個畫素,但因為光有三原色,為了顯示顏色,每個畫素又必須分成 RGB 三個維度,也就是一張彩色圖片可以看做是一個三維陣列 (1920x1080x3)。
但事實上可見光是電磁波連續光譜中的一段,光在物理學裡頭是沒有三原色的。
之所以光會有三原色,是因為我們眼中感應可見光的視錐細胞分成三種:L、M、S,這三種細胞大致對應到紅、綠、藍。也就是我們用這三種感光細胞去「感受」這個世界,對於大腦而言所有的顏色都是由 L、M、S 三種感光細胞的刺激加種而成,於是光才有了三原色。
但如果這三種感光細胞的其中一種或多種出現異常呢?這便是所謂的「色弱」、「色盲」或「辨色力異常」。
那我們要如何知道色盲看到的世界呢?有個比較簡單但不太精確的模擬方法便是:Daltonization Algorithm。
Daltonization Algorithm 的原理是先把影像中 RGB 色碼轉換成視錐細胞 LMS 的刺激,接著遮蔽特定感光細胞的刺激並補償另外兩種未被遮蔽的細胞,最後再轉回 RGB 加以呈現。
大致可以分成三個步驟:
1. 把原本的 RGB 轉換成 LMS
2. 把特定的 L/M/S 歸零後同時給予剩下兩通道補償
3. 轉換回原本的RGB顯示
以上圖的一張色盲/色弱測試圖為例,正常人眼中看到的是 74,但如果 L、M 兩種視錐細胞異常,便會看不到任何數字在裏頭,如果異常的是 S 視錐細胞,那麼看到的反而會是 21 或 71。
有了這些工具,另外一種用法就是反推要怎麼改變或設計原本的 RGB 才能夠讓辨色力異常的人仍然能夠辨識原本的圖形。
完整程式碼:https://bit.ly/3luRI1C
補充:
1. 這個方法跟實際上色盲看到的還是會有落差,僅能做大致的模擬。
2. 除了視錐細胞外,眼中還有另一種視桿細胞負責感受明暗。
3. 這裡模擬的是「單色色盲」,但也有可能發生兩種細胞同時異常的「雙色色盲」,雙色色盲的模擬可以參考下面這篇文獻:
Brettel, H., Viénot, F., & Mollon, J. D. (1997). Computerized simulation of color appearance for dichromats. JOSA A, 14(10), 2647–2655.
Ref:
http://www.daltonize.org/2010/05/lms-daltonization-algorithm.html