色弱をシミュレーションできるサイトのいくつか試していたところ、微妙に色が異なるように思えました。入手できるソースコードをもとにどれくらい異なるのか比較してみました。
今回使用した環境はUbuntu12 + ImageMagick 7.0.2-2 Q16(ソースからコンパイルしたもの)です。
ちなみにシミュレーション結果が異なる理由を「カラーユニバーサルデザイン(CUD)チェックツール(色覚シミュレーション)の原理と注意点」では以下のように書いています。
一般色覚の人は色を3種類の錐体で見分けているので、見分けられる色の種類を3次元上の立体で表すことができます。一方、色弱(強度)の人は色を2種類の錐体で見分けているので、見分けられる色は2次元の平面で表すことができます。そこで、3次元の色座標の各点を、その中の2次元平面上の点に置きかえる計算を行うのが、チェックツールの原理です。この際に、どのような傾きの平面上の点に置きかえるのかによって、計算結果が微妙に異なってきます。
(「カラーユニバーサルデザイン(CUD)チェックツール(色覚シミュレーション)の原理と注意点」より引用)
シミュレーション画像の作成方法
ImageMagickは-color-matrix
オプションを使って色変換が行えますので、それを使ってシミュレーションしてみようと思います。
-color-matrix
は以下のように9つの数値を指定します。結果は3つの数値が1セットで初めの3つが赤チャンネル、次が緑チャンネル、その次が青チャンネルとなっているようです。
-color-matrix ' 1 0 0
0 1 0
0 0 1'
以下のような計算が行われると考えればいいのかなと思います。
red' = 1 * red + 0 * green + 0 * blue
green' = 0 * red + 1 * green + 0 * blue
blue' = 0 * red + 0 * green + 1 * blue
GIMPのカラーミキサー(色
→ 色要素
→ カラーミキサー
)をイメージした方が分かりやすいかもしれません。
使用したRGB値
今回は以下の2つのサイトで公開されているソースコードとFirefox(Colorblind Designアドオン)とChrome(Spectrum拡張機能)のソースコードの計4つからP型(Protanopia)のRGB値を抜き出してみました。
- https://gist.github.com/Lokno/df7c3bfdc9ad32558bb7 - colorMatrices.js
- http://lpetrich.org/Science/ColorBlindnessSim/ColorBlindnessSim.html
それぞれのRGB値は以下のような感じになっていました。
0.567 0.433 0
0.558 0.442 0
0 0.242 0.758
0.202 0.992 -0.194
0.164 0.793 0.044
0.009 -0.013 1.004
0.111 0.888 0
0.111 0.888 0
0 0 1
0.152286 1.052583 -0.204868
0.114503 0.786281 0.099216
-0.003882 -0.048116 1.051998
さらにImageMagickの-colorspace
オプションの値を変えるとどう影響するのかも試してみようと思います。
実際のコマンド&オプション
今回はImageMagickに含まれるconvert
コマンドの-colorspace
オプションと-color-matrix
オプションに先ほど調べたRGB値を指定する事でシミュレーションします。
実際に使用したコマンドは以下のような感じです。-colorspace
と-color-matrix
の値を変えていって、生成された画像をまとめるといった事を行ないました。
$ convert in.jpg -colorspace RGB -color-matrix "0.567 0.433 0 0.558 0.442 0 0 0.242 0.758" out.jpg
それぞれを比較してみる
colorMatrices.js、ColorBlindnessSim、Firefox(Colorblind Designアドオン)、Chrome(Spectrum拡張機能)のRGB値に対して「未指定」「RGB」「sRGB」「LMS」の4つのカラースペースを当ててみました。※LMSカラースペースはUbuntu12、14の標準パッケージとして提供されているImageMagick6では使用できませんのでご注意下さい。
元の画像は以下のとおりです。
(Wikipedia - Visible spectrumより引用)
ちょっと見にくい画像ですが、ぱっと見でも「P型をシミュレーション」と一言でいっても結果に違いがある事が分かります。P型と言ってもL錐体がない人、L錐体の分光感度がずれてM錐体と似てしまっている等々があって見え方は人によって違っている考えれば、結果はひとつではないと考えるほうが正しいようにも思えます。少なくとも今の私の仕事&プライベートの範囲ではそれで分かるというだけで十分かなと思います。