色のシミュレータ 4.0 の理論

1. 概要

本稿は、アプリ「色のシミュレータ」4.0 が、色覚の型(1 型・2 型・3 型)ごとに画像の見え方をシミュレーションするための色変換の理論を述べる。処理の要点は、画像の各画素の色を、錐体の応答を表す LMS 空間に写し、Brettel らの方法 [1] により二色覚者の色の見えに対応する面へ射影し、元の色空間へ戻すことにある。本稿の枠組みは、同アプリ Android 版 3.3.1 の README の付録 [2] の数式を、4.0 の処理に合わせて再整理したものである。あわせて、§7 で、読んだ色の色名の表示の理論を要点だけ述べる。

1-1. 前提

以下を本稿全体の仮定とする。

  1. 1. 白点: D65、(x,y)=(0.3127, 0.3290)(x,y)=(0.3127,\,0.3290)(sRGB および Display P3 の規格の定義値 [3][4][5])。すべての変換で共通である。
  1. 2. 観測者: 画像の色の XYZ は CIE 1931 2° 標準観測者 [6](XYZ の定義 [7][8])による。ただし、錐体の行列(§4-1)の作成と二色覚の錨刺激(§5-1)の色度座標には、CIE 1964 10° 補助標準観測者(X10Y10Z10 表色系)の等色関数 [7] と、その色度座標の値(JIS Z 8701 付表 2 [9])を用いる。
  1. 3. 色空間: 入力と表示は、sRGB [3] または Display P3 [4][5] のいずれかとする。両者は伝達関数が同一で、原色のみが異なる(§2、§3)。
  1. 4. 量子化: 8 ビット(00〜255255)。符号化値は画素値を 255255 で割った 00 以上 11 以下の実数として扱う。
  1. 5. 色順応: 入力と表示の白点がともに D65 であるため、色順応変換は行わない。
  1. 6. 錐体の空間: XYZ から LMS への変換には、Hunt–Pointer–Estévez(HPE)の錐体の形を保ったまま、10° の XYZ に合わせて作った 3×3 の行列を、D65 に正規化して用いる [9][10][11]。
  1. 7. 色覚の型: 完全な二色覚(1 型は L 錐体、2 型は M 錐体、3 型は S 錐体の欠損)をシミュレーションの対象とする。「シミュレーション強度」とは、それぞれの色覚タイプのうちもっとも強度の 2 色覚の色の見え方を 100%、元の画像を 0% として、その中間の画像を表示するための値である。異常 3 色覚(弱度の色覚異常)の色の見え方をシミュレーションするものではない(§5)。
  1. 8. 色差モード: 色差は元の画像とシミュレーションした画像の Oklab の距離で、強度 kk を含めたシミュレーションの結果を対象とする(§8)。

1-2. 記法

  • R, G, BR,\,G,\,B: 線形 RGB の各成分。00 以上 11 以下とし、白を 11 とする。X, Y, ZX,\,Y,\,Z: XYZ の各成分(YY は白を 11 とする)。
  • c\mathbf{c}: 符号化された RGB(各成分 VV、0≤V≤10\le V\le 1)。xx: 線形値(0≤x≤10\le x\le 1)。なお色度座標 (x, y)(x,\,y) は線形値 xx と記号が重なるが、§3 と §4 では色度座標を指す。
  • L, M, SL,\,M,\,S: 錐体の応答(LMS)の各成分。q=(L,M,S)T\mathbf{q}=(L,M,S)^{\mathsf T} と書く。D65 の白では q=(1,1,1)T\mathbf{q}=(1,1,1)^{\mathsf T} である。
  • MLMSM_{\mathrm{LMS}}: XYZ → LMS の変換行列。MM: RGB → XYZ の変換行列。PsP_s: 二色覚の半平面への射影を表す行列。
  • kk: 強度のパラメータ(0≤k≤10\le k\le 1)。k=1k=1 は完全な二色覚、k=0k=0 は元の色である。

1-3. 処理の流れ

処理は、画像の各画素に次の順で適用される。

符号化された RGB ──(§2) 復号──▶ 線形 RGB ──(§3, §4) 行列──▶ LMS
LMS ──(§5) 半平面への射影と強度による混合──▶ LMS′
LMS′ ──(§4, §3) 行列──▶ 線形 RGB′ ──(§5-4) 色域の制限──▶ ──(§2) 符号化──▶ 符号化された RGB′

色差モード(§8)は、LMS′ と元の LMS の Oklab の距離を明るさにして表示する。

2. 伝達関数(ガンマ)

符号化値 VV(0≤V≤10\le V\le 1。8 ビットなら 画素値255\frac{\text{画素値}}{255})と線形値 xx(0≤x≤10\le x\le 1)の間の関係を、伝達関数として定める [12]。IEC 61966-2-1 の sRGB の関数 [3] を用いる。

復号(符号化値から線形値へ):

x={V12.92(V≤0.04045)(V+0.0551.055)2.4(V>0.04045)(1)x=\begin{cases} \dfrac{V}{12.92} & (V\le 0.04045)\\[3mm] \left(\dfrac{V+0.055}{1.055}\right)^{2.4} & (V>0.04045) \end{cases} \tag{1}

符号化(線形値から符号化値へ):

V={12.92 x(x≤0.0031308)1.055 x12.4−0.055(x>0.0031308)(2)V=\begin{cases} 12.92\,x & (x\le 0.0031308)\\[1mm] 1.055\,x^{\frac{1}{2.4}}-0.055 & (x>0.0031308) \end{cases} \tag{2}

2 本の式は V=0.04045V=0.04045(x=0.0031308x=0.0031308)で連続である(0.0404512.92=0.0031308\frac{0.04045}{12.92}=0.0031308)。Display P3 の伝達関数は sRGB と同一である。

符号化の前に、色域の外で負になった値は 00 に置換する(負の数の累乗が定義されないため)。復号と符号化の結果は、いずれも 00 以上 11 以下に制限する。

3. RGB と XYZ の間の変換

線形 RGB を列ベクトル (R,G,B)T(R,G,B)^{\mathsf T} とし、白点を D65 とする。変換行列は、原色の色度と白点から次のように導出する [8][12]。

3-1. 原色と白点からの導出

原色 ii(i=R,G,Bi=\mathrm{R},\mathrm{G},\mathrm{B})の色度を (xi,yi)(x_i,y_i) とし、その方向ベクトル

pi=(xiyi11−xi−yiyi)(3)\mathbf{p}_i=\begin{pmatrix} \dfrac{x_i}{y_i}\\[3mm] 1\\[1mm] \dfrac{1-x_i-y_i}{y_i} \end{pmatrix} \tag{3}

を列とする行列を P=[pR pG pB]P=[\mathbf{p}_{\mathrm R}\ \mathbf{p}_{\mathrm G}\ \mathbf{p}_{\mathrm B}] とする。白点の色度 (xw,yw)(x_w,y_w) に対する同形のベクトルを W\mathbf{W} とする。白(R=G=B=1R=G=B=1)が W\mathbf{W} に写像される条件 PS=WP\mathbf{S}=\mathbf{W} から、各原色の強さの係数 S=P−1W\mathbf{S}=P^{-1}\mathbf{W} を定める。このとき RGB → XYZ の行列は

M=P diag(S)(4)M=P\,\mathrm{diag}(\mathbf{S}) \tag{4}

であり、白が Y=1Y=1 となる。XYZ → RGB の行列は MM の厳密な逆行列 M−1M^{-1} である。

3-2. sRGB

原色の色度は R(0.64, 0.33)(0.64,\,0.33)、G(0.30, 0.60)(0.30,\,0.60)、B(0.15, 0.06)(0.15,\,0.06)、白点は D65 の (x,y)=(0.3127, 0.3290)(x,y)=(0.3127,\,0.3290) である(IEC 61966-2-1 [3])。§3-1 により、倍精度の導出値を 7 桁で示すと次を得る。

(XYZ)=(0.41239080.35758430.18048080.21263900.71516870.07219230.01933080.11919480.9505322)(RGB)(5)\begin{pmatrix}X\\Y\\Z\end{pmatrix}= \begin{pmatrix} 0.4123908 & 0.3575843 & 0.1804808\\ 0.2126390 & 0.7151687 & 0.0721923\\ 0.0193308 & 0.1191948 & 0.9505322 \end{pmatrix} \begin{pmatrix}R\\G\\B\end{pmatrix} \tag{5}
(RGB)=(−3.2409699−1.5373832−0.4986108−0.9692436−1.8759675−0.0415551−0.0556301−0.2039770−1.0569715)(XYZ)(6)\begin{pmatrix}R\\G\\B\end{pmatrix}= \begin{pmatrix} \phantom{-}3.2409699 & -1.5373832 & -0.4986108\\ -0.9692436 & \phantom{-}1.8759675 & \phantom{-}0.0415551\\ \phantom{-}0.0556301 & -0.2039770 & \phantom{-}1.0569715 \end{pmatrix} \begin{pmatrix}X\\Y\\Z\end{pmatrix} \tag{6}

規格が小数 4 桁で与える順行列は、この導出値を 4 桁に丸めた値に一致する。規格の 4 桁の逆行列は、丸めた順行列の逆行列を丸めたものであり、上の導出値の逆行列とは 4 桁目で異なる。

3-3. Display P3

原色の色度は R(0.680, 0.320)(0.680,\,0.320)、G(0.265, 0.690)(0.265,\,0.690)、B(0.150, 0.060)(0.150,\,0.060)、白点は D65 の (0.3127, 0.3290)(0.3127,\,0.3290) である(SMPTE EG 432-1 [4]、Apple の定義 [5])。§3-1 により、同様に次を得る。

(XYZ)=(0.48657090.26566770.19821730.22897460.69173850.07928690.00000000.04511341.0439444)(RGB)(7)\begin{pmatrix}X\\Y\\Z\end{pmatrix}= \begin{pmatrix} 0.4865709 & 0.2656677 & 0.1982173\\ 0.2289746 & 0.6917385 & 0.0792869\\ 0.0000000 & 0.0451134 & 1.0439444 \end{pmatrix} \begin{pmatrix}R\\G\\B\end{pmatrix} \tag{7}
(RGB)=(−2.4934969−0.9313836−0.4027108−0.8294890−1.7626641−0.0236247−0.0358458−0.0761724−0.9568845)(XYZ)(8)\begin{pmatrix}R\\G\\B\end{pmatrix}= \begin{pmatrix} \phantom{-}2.4934969 & -0.9313836 & -0.4027108\\ -0.8294890 & \phantom{-}1.7626641 & \phantom{-}0.0236247\\ \phantom{-}0.0358458 & -0.0761724 & \phantom{-}0.9568845 \end{pmatrix} \begin{pmatrix}X\\Y\\Z\end{pmatrix} \tag{8}

3-4. 色空間の置換

XYZ は色空間に依存しない。したがって、入力が sRGB で表示が Display P3 の場合でも、LMS への変換(§4)以後の計算は共通であり、入力と表示の行列だけを取り替えればよい。

4. XYZ から LMS への変換

4-1. 錐体の行列(HPE の形を保った 10° の行列)

錐体の応答 q=(L,M,S)T\mathbf{q}=(L,M,S)^{\mathsf T} は、XYZ の線形変換として与える。本稿は、Hunt–Pointer–Estévez(HPE)[10] の錐体の分光感度の形を保ったまま、CIE 1964 10° 補助標準観測者の XYZ(X10Y10Z10。JIS Z 8701 の付表 2 [9])から作った 3×3 の行列を用いる。HPE の変換は、CIE 1931 の XYZ から錐体の応答への次の行列(等エネルギー白に正規化した形)で表される(解説は [11])。

ME=(−0.389710.68898−0.07868−0.229811.18340−0.04641−0.000000.00000−1.00000)(9)M_{\mathrm{E}}=\begin{pmatrix} \phantom{-}0.38971 & 0.68898 & -0.07868\\ -0.22981 & 1.18340 & \phantom{-}0.04641\\ \phantom{-}0.00000 & 0.00000 & \phantom{-}1.00000 \end{pmatrix} \tag{9}

10° の観測者向けの行列 MrawM_{\mathrm{raw}} は、波長 λ\lambda(380〜780 nm、5 nm 刻みの 81 点)の全体で、10° の等色関数 xˉ10(λ)=(xˉ10,yˉ10,zˉ10)T\bar{\mathbf{x}}_{10}(\lambda)=(\bar x_{10},\bar y_{10},\bar z_{10})^{\mathsf T}(CIE 1964 [7]。数値は [13] の 1 nm 刻みの表から 5 nm ごとに取る)が、HPE の錐体の感度 ME xˉ2(λ)M_{\mathrm{E}}\,\bar{\mathbf{x}}_{2}(\lambda)(xˉ2\bar{\mathbf{x}}_{2} は CIE 1931 の 2° の等色関数。数値は同じく [13])を最もよく再現するように、重みなしの最小二乗で求める。そのうえで、白点 D65 の XYZ(W\mathbf{W}、§3-1)に対して L=M=S=1L=M=S=1 となるよう、各行を MrawWM_{\mathrm{raw}}\mathbf{W} の対応する成分で割って正規化する。

Mraw=arg minM∑λ∥M xˉ10(λ)−ME xˉ2(λ)∥2,MLMS=diag(n)−1Mraw,n=MrawW(10)M_{\mathrm{raw}}=\mathop{\mathrm{arg\,min}}_{M}\sum_{\lambda}\left\|M\,\bar{\mathbf{x}}_{10}(\lambda)-M_{\mathrm{E}}\,\bar{\mathbf{x}}_{2}(\lambda)\right\|^{2},\qquad M_{\mathrm{LMS}}=\mathrm{diag}(\mathbf{n})^{-1}M_{\mathrm{raw}},\quad \mathbf{n}=M_{\mathrm{raw}}\mathbf{W} \tag{10}

求めた値は 5 桁で次のとおりである。

Mraw=(−0.41927−0.60585−0.10325−0.17704−1.12056−0.00536−0.05550−0.06696−0.90930),MLMS=(−0.47008−0.67928−0.11576−0.18706−1.18397−0.00567−0.05526−0.06666−0.90524)(11)\begin{aligned} M_{\mathrm{raw}}&=\begin{pmatrix} \phantom{-}0.41927 & \phantom{-}0.60585 & -0.10325\\ -0.17704 & \phantom{-}1.12056 & -0.00536\\ -0.05550 & \phantom{-}0.06696 & \phantom{-}0.90930 \end{pmatrix},\\[2mm] M_{\mathrm{LMS}}&=\begin{pmatrix} \phantom{-}0.47008 & \phantom{-}0.67928 & -0.11576\\ -0.18706 & \phantom{-}1.18397 & -0.00567\\ -0.05526 & \phantom{-}0.06666 & \phantom{-}0.90524 \end{pmatrix} \end{aligned} \tag{11}

10° と 2° の等色関数は線形変換では完全には一致しないので、当てはめには残差が残る(最大 0.23。HPE の感度の最大値は約 1 で、残差は S 錐体に近い短波長側で大きい)。この行列は公表された標準ではなく、本稿のために作った近似であり、錐体の形は HPE のままである(10° の錐体の物理的な違い、たとえば黄斑の色素の影響は反映しない)。入力の色(sRGB・Display P3)の XYZ は 2° の観測者のままである。

この正規化により、D65 の白は q=(1,1,1)T\mathbf{q}=(1,1,1)^{\mathsf T} に写像される。以下では、この点を結ぶ直線を中性軸と呼ぶ。

4-2. 線形 RGB と LMS の間の変換

線形 RGB から LMS への変換は、式 (4) の MM と式 (11) の MLMSM_{\mathrm{LMS}} の積で与えられる。

q=MLMS M(RGB),(RGB)=(MLMS M)−1q(12)\mathbf{q}=M_{\mathrm{LMS}}\,M\begin{pmatrix}R\\G\\B\end{pmatrix},\qquad \begin{pmatrix}R\\G\\B\end{pmatrix}=\left(M_{\mathrm{LMS}}\,M\right)^{-1}\mathbf{q} \tag{12}

入力と表示が sRGB の場合、7 桁の値は次のとおりである。

MLMSM=(0.33606200.64009540.02384260.17450560.77916950.04632490.00888630.13581410.8552996)(13)M_{\mathrm{LMS}}M=\begin{pmatrix} 0.3360620 & 0.6400954 & 0.0238426\\ 0.1745056 & 0.7791695 & 0.0463249\\ 0.0088863 & 0.1358141 & 0.8552996 \end{pmatrix} \tag{13}
(MLMSM)−1=(−5.1990556−4.2862792−0.0872236−1.1722550−2.2620970−0.0898419−0.1321271−0.3146679−1.1825408)(14)\left(M_{\mathrm{LMS}}M\right)^{-1}=\begin{pmatrix} \phantom{-}5.1990556 & -4.2862792 & \phantom{-}0.0872236\\ -1.1722550 & \phantom{-}2.2620970 & -0.0898419\\ \phantom{-}0.1321271 & -0.3146679 & \phantom{-}1.1825408 \end{pmatrix} \tag{14}

入力と表示が Display P3 の場合は、次のとおりである。

MLMSM=(−0.3842671−0.5895472−0.0261857−0.1800798−0.7690428−0.0508774−0.0116227−0.0722697−0.9393530)(15)M_{\mathrm{LMS}}M=\begin{pmatrix} \phantom{-}0.3842671 & \phantom{-}0.5895472 & \phantom{-}0.0261857\\ \phantom{-}0.1800798 & \phantom{-}0.7690428 & \phantom{-}0.0508774\\ -0.0116227 & \phantom{-}0.0722697 & \phantom{-}0.9393530 \end{pmatrix} \tag{15}
(MLMSM)−1=(−4.0679056−3.1236934−0.0557878−0.9607645−2.0447289−0.0839644−0.1242496−0.1959623−1.0717127)(16)\left(M_{\mathrm{LMS}}M\right)^{-1}=\begin{pmatrix} \phantom{-}4.0679056 & -3.1236934 & \phantom{-}0.0557878\\ -0.9607645 & \phantom{-}2.0447289 & -0.0839644\\ \phantom{-}0.1242496 & -0.1959623 & \phantom{-}1.0717127 \end{pmatrix} \tag{16}

5. 二色覚のシミュレーション

5-1. 半平面による近似

二色覚者は、3 種類の錐体のうち 1 種類を欠く。欠けた錐体の応答だけが異なる 2 つの刺激は区別できず、LMS 空間では、欠けた成分の軸に平行な直線(混同線)の上の点が同じ色に見える。したがって、二色覚者の色の見えは、LMS 空間の 2 次元の面の上の点で代表させることができる。Brettel らは、この面を、中性軸と、スペクトル軌跡上の二つの錨刺激(1 型・2 型では 475 nm と 575 nm、3 型では 485 nm と 660 nm)を通る二枚の半平面で近似した [1]。二枚の半平面は中性軸で接する。

各半平面は原点を通り、白の LMS w\mathbf{w} と錨刺激の LMS α\boldsymbol{\alpha} を含む。欠けた成分を qmq_m、他の 2 成分を qi, qjq_i,\,q_j と書くと、半平面は qm=a qi+b qjq_m=a\,q_i+b\,q_j の形に書け、w\mathbf{w} と α\boldsymbol{\alpha} を通る条件から、係数は

a=wmαj−wjαmwiαj−wjαi,b=wiαm−wmαiwiαj−wjαi(17)a=\frac{w_m \alpha_j-w_j \alpha_m}{w_i \alpha_j-w_j \alpha_i},\qquad b=\frac{w_i \alpha_m-w_m \alpha_i}{w_i \alpha_j-w_j \alpha_i} \tag{17}

で与えられる。本稿では、錨刺激の色度座標に CIE 1964 10° 補助標準観測者(X10Y10Z10 表色系)のスペクトル色度座標 (x10, y10, z10)(x_{10},\,y_{10},\,z_{10}) を用いる。値は JIS Z 8701 の付表 2 [9] による(5 桁)。錨刺激と錐体の行列(§4-1)はどちらも 10° の観測者に合わせてあり、錨刺激の色度座標を (X,Y,Z)(X,Y,Z) の値として §4-1 の行列 MLMSM_{\mathrm{LMS}} で LMS に変換する。画像の色の XYZ は 2° の観測者(sRGB の定義)のままである(平面は原点を通るので、錨刺激の大きさは係数に影響しない)。

波長x10x_{10}y10y_{10}z10z_{10}
475 nm0.095730.159090.74518
485 nm0.045190.327540.62727
575 nm0.509640.490360.00000
660 nm0.716790.283210.00000

二枚の半平面と錨刺激の対応は、1 型・2 型では、SS の応答が小さい側(S≤MS\le M、S≤LS\le L)が 575 nm、そうでない側が 475 nm、3 型では、M≤LM\le L の側が 660 nm、そうでない側が 485 nm である(選択の境は §5-2)。白 w\mathbf{w} は D65 の白の LMS (1,1,1)T(1,1,1)^{\mathsf T}(§4-1 の正規化)である。シミュレーションした色 qs\mathbf{q}_s は、元の色 q\mathbf{q} の、欠けた成分だけを置き換えた点であり、行列 PsP_s により qs=Psq\mathbf{q}_s=P_s\mathbf{q} と書ける(欠けた軸に平行な射影)。w=(1,1,1)T\mathbf{w}=(1,1,1)^{\mathsf T} なので、式 (17) から a+b=1a+b=1 が厳密に成り立ち、半平面は中性軸を含む。係数は、5 桁で次のとおりである。

1 型(L 錐体の欠損。Lp=aM+bSL_p=aM+bS):

qs={(01.18188−0.18188010001)q(S≤M)(01.19356−0.19356010001)q(S>M)(18)\mathbf{q}_s=\begin{cases} \begin{pmatrix}0&1.18188&-0.18188\\0&1&0\\0&0&1\end{pmatrix}\mathbf{q} & (S\le M)\\[6mm] \begin{pmatrix}0&1.19356&-0.19356\\0&1&0\\0&0&1\end{pmatrix}\mathbf{q} & (S>M) \end{cases} \tag{18}

2 型(M 錐体の欠損。Md=aL+bSM_d=aL+bS):

qs={(1000.8461100.15389001)q(S≤L)(1000.8378300.16217001)q(S>L)(19)\mathbf{q}_s=\begin{cases} \begin{pmatrix}1&0&0\\0.84611&0&0.15389\\0&0&1\end{pmatrix}\mathbf{q} & (S\le L)\\[6mm] \begin{pmatrix}1&0&0\\0.83783&0&0.16217\\0&0&1\end{pmatrix}\mathbf{q} & (S>L) \end{cases} \tag{19}

3 型(S 錐体の欠損。St=aL+bMS_t=aL+bM):

qs={(100010−0.676481.676480)q(M≤L)(100010−1.032792.032790)q(M>L)(20)\mathbf{q}_s=\begin{cases} \begin{pmatrix}1&0&0\\0&1&0\\-0.67648&1.67648&0\end{pmatrix}\mathbf{q} & (M\le L)\\[6mm] \begin{pmatrix}1&0&0\\0&1&0\\-1.03279&2.03279&0\end{pmatrix}\mathbf{q} & (M>L) \end{cases} \tag{20}

本稿の係数(10° の錨と、10° の錐体の行列による)と、本家 2.x の値(HPE の 2° の錐体と 10° の錨。4 桁の錨の XYZ と、4 桁の sRGB 行列による白から求めた値)の比べは次のとおりである。錐体の行列が違うので、差は最大 1.6×10−11.6\times 10^{-1}(3 型の半平面 2 の aa)である。

型半平面本稿 (a, b)(a,\,b)本家 2.x (a, b)(a,\,b)
1 型1(1.18188, −0.18188)(1.18188,\ -0.18188)(1.20800, −0.20797)(1.20800,\ -0.20797)
1 型2(1.19356, −0.19356)(1.19356,\ -0.19356)(1.22023, −0.22020)(1.22023,\ -0.22020)
2 型1(0.84611, 0.15389)(0.84611,\ 0.15389)(0.82781, 0.17216)(0.82781,\ 0.17216)
2 型2(0.83783, 0.16217)(0.83783,\ 0.16217)(0.81952, 0.18046)(0.81952,\ 0.18046)
3 型1(−0.67648, 1.67648)(-0.67648,\ 1.67648)(−0.52543, 1.52540)(-0.52543,\ 1.52540)
3 型2(−1.03279, 2.03279)(-1.03279,\ 2.03279)(−0.87504, 1.87503)(-0.87504,\ 1.87503)
図 1: 二色覚の色が占める面(色度図上)
図 1: 二色覚の色が占める面(色度図上)。CIE 1976 UCS の色度図(u′v′u'v' 色度図。u′=4X/(X+15Y+3Z)u'=4X/(X+15Y+3Z)、v′=9Y/(X+15Y+3Z)v'=9Y/(X+15Y+3Z) [7])に、スペクトル軌跡、sRGB と Display P3 の原色の三角形、白 D65、および 1 型・2 型・3 型の二枚の半平面が色度図上に作る線を示す。スペクトル軌跡は CIE 1964 10° 等色関数の表 [13] から描いた。半平面は原点を通る平面なので、色度図上では白を通る線になる。各線は白で折れる。1 型と 2 型の線はほぼ重なるので、見やすいように、画面で線に垂直にわずかにずらして描いてある。

5-2. 半平面の選択

二枚の半平面のどちらを用いるかは、元の色 q\mathbf{q} が中性軸のどちら側にあるかで決める。選択の境界は、中性軸と欠けた錐体の軸(1 型は LL 軸、2 型は MM 軸、3 型は SS 軸)を含む平面であり、1 型では S=MS=M、2 型では S=LS=L、3 型では M=LM=L である。この境界の上の点では、a1+b1=a2+b2=1a_1+b_1=a_2+b_2=1 により二枚の半平面の置換の結果が一致する。たとえば 1 型では、S=MS=M のとき

a1M+b1S=(a1+b1)M=M=(a2+b2)M=a2M+b2S(21)a_1M+b_1S=(a_1+b_1)M=M=(a_2+b_2)M=a_2M+b_2S \tag{21}

である。したがって、シミュレーションの結果は境界で連続である。

5-3. 強度による混合

強度 kk(0≤k≤10\le k\le 1)によるシミュレーションは、元の色 q\mathbf{q} と、完全な二色覚のシミュレーション qs\mathbf{q}_s の補間で与える。本家の 2.x は、q\mathbf{q} と qs\mathbf{q}_s を LMS 空間で線形に補間していた。本稿(4.0)は、両者を表示の色域に制限した上で、Oklab 空間 [14] で線形に補間する。

(1) 色域への制限。表示の線形 RGB は MoutqM_{\mathrm{out}}\mathbf{q}(式 (30) の MoutM_{\mathrm{out}})で与えられ、これを各成分 00 以上 11 以下に制限して LMS に戻す。

C(q)=Mout−1 clip ⁣(Mout q)(22)C(\mathbf{q})=M_{\mathrm{out}}^{-1}\,\mathrm{clip}\!\left(M_{\mathrm{out}}\,\mathbf{q}\right) \tag{22}

(2) Oklab への変換。LMS を XYZ に戻し、Ottosson の行列 M1M_1 で Oklab の錐体様の応答 q′\mathbf{q}' に写し、各成分の立方根を取って、行列 M2M_2 で (L,a,b)(L,a,b) にする。

o(q)=M2 M1 MLMS−1 q3(23)\mathbf{o}(\mathbf{q})=M_2\,\sqrt[3]{M_1\,M_{\mathrm{LMS}}^{-1}\,\mathbf{q}} \tag{23}

立方根は成分ごとの符号つきの立方根(x3=sgn(x) ∣x∣1/3\sqrt[3]{x}=\mathrm{sgn}(x)\,|x|^{1/3})である。行列は次のとおりである(M1M_1 は XYZ(D65、YY は白を 11)→ q′\mathbf{q}'、M2M_2 は q′\mathbf{q}' の立方根 → (L,a,b)(L,a,b))。

M1=(−0.81893301010.3618667424−0.1288597137−0.03298454360.9293118715−0.0361456387−0.04820030180.2643662691−0.6338517070)M2=(−0.2104542553−0.7936177850−0.0040720468−1.9779984951−2.4285922050−0.4505937099−0.0259040371−0.7827717662−0.8086757660)(24)\begin{aligned} M_1&=\begin{pmatrix} \phantom{-}0.8189330101 & 0.3618667424 & -0.1288597137\\ \phantom{-}0.0329845436 & 0.9293118715 & \phantom{-}0.0361456387\\ \phantom{-}0.0482003018 & 0.2643662691 & \phantom{-}0.6338517070 \end{pmatrix}\\[4mm] M_2&=\begin{pmatrix} \phantom{-}0.2104542553 & \phantom{-}0.7936177850 & -0.0040720468\\ \phantom{-}1.9779984951 & -2.4285922050 & \phantom{-}0.4505937099\\ \phantom{-}0.0259040371 & \phantom{-}0.7827717662 & -0.8086757660 \end{pmatrix} \end{aligned} \tag{24}

(3) 逆変換。o\mathbf{o} から LMS へは、M2−1M_2^{-1} の後に成分ごとの 3 乗、M1−1M_1^{-1} の後に MLMSM_{\mathrm{LMS}} である。

q=MLMS M1−1 (M2−1o)∘3(25)\mathbf{q}=M_{\mathrm{LMS}}\,M_1^{-1}\,\left(M_2^{-1}\mathbf{o}\right)^{\circ 3} \tag{25}

ここで (⋅)∘3(\cdot)^{\circ 3} は成分ごとの 3 乗である。逆行列の値は次のとおりである。

M1−1=(−1.2270139−0.5578000−0.2812561−0.0405802−1.1122569−0.0716767−0.0763813−0.4214820−1.5861632)M2−1=(1.0000000−0.3963378−0.21580381.0000000−0.1055613−0.06385421.0000001−0.0894842−1.2914855)(26)\begin{aligned} M_1^{-1}&=\begin{pmatrix} \phantom{-}1.2270139 & -0.5578000 & \phantom{-}0.2812561\\ -0.0405802 & \phantom{-}1.1122569 & -0.0716767\\ -0.0763813 & -0.4214820 & \phantom{-}1.5861632 \end{pmatrix}\\[4mm] M_2^{-1}&=\begin{pmatrix} 1.0000000 & \phantom{-}0.3963378 & \phantom{-}0.2158038\\ 1.0000000 & -0.1055613 & -0.0638542\\ 1.0000001 & -0.0894842 & -1.2914855 \end{pmatrix} \end{aligned} \tag{26}

(4) 補間。制限した q\mathbf{q} と qs\mathbf{q}_s の Oklab を、強度 kk で線形に補間して LMS に戻す。

ok=(1−k) o ⁣(C(q))+k o ⁣(C(qs)),qk=o−1(ok)(27)\mathbf{o}_k=(1-k)\,\mathbf{o}\!\left(C(\mathbf{q})\right)+k\,\mathbf{o}\!\left(C(\mathbf{q}_s)\right),\qquad \mathbf{q}_k=\mathbf{o}^{-1}(\mathbf{o}_k) \tag{27}

ここで o−1\mathbf{o}^{-1} は式 (25) の逆変換である。k=0k=0 では、色域の内の元の色がそのまま(C(q)=qC(\mathbf{q})=\mathbf{q})、k=1k=1 では C(qs)C(\mathbf{q}_s) になる。

制限を補間の前に行う理由: 二色覚のシミュレーションの結果 qs\mathbf{q}_s は、鮮やかな青や紫で、線形 RGB の成分が負になる(色域の外)。制限せずに Oklab で補間すると、補間の途中の色が色域の外へ移り、最後の制限で成分が 00 に張り付き、強度を上げるにつれて色が急に飛ぶ。補間の前に両端を色域に制限すれば、補間の途中の色も色域の内にとどまる。

LMS での線形補間に対して、Oklab での補間は、強度を等間隔に動かしたときの見え方の変化が均等に近い。強度を 0.10.1 刻みで動かしたときの、隣り合う段の Oklab の距離の最大を最小で割った値は、代表の 6 色・3 型の試験で、LMS の線形補間では最大 4.094.09、Oklab の補間では最大 1.141.14 であった。

シミュレーションの結果の色の違いを画面に表示する方法は §8 に述べる。

5-4. 色域の制限

混合の前に両端を色域に制限した(式 (22))ので、混合した色 qk\mathbf{q}_k は、数値の誤差を除いて色域の内にある。線形 RGB に戻した後の制限は、この誤差の安全弁である。色域の外で負になった成分は 00 に、11 を超えた成分は 11 に制限する。

(R′G′B′)=min⁡ ⁣(max⁡ ⁣((MLMSM)−1qk, 0), 1)(28)\begin{pmatrix}R'\\G'\\B'\end{pmatrix}= \min\!\left(\max\!\left(\left(M_{\mathrm{LMS}}M\right)^{-1}\mathbf{q}_k,\ 0\right),\ 1\right) \tag{28}

sRGB の全色(符号化値を等間隔に 33 段ずつとった 33333^{3} 点)に k=1k=1 のシミュレーションを適用したとき、制限の前に色域の外になる色(qs\mathbf{q}_s)の割合は次のとおりである。無彩色(中性軸の上の色)は動かない。

型負の成分を持つ色11 を超える成分を持つ色
1 型29.1%10.6%
2 型23.2%4.3%
3 型8.2%1.9%
図 2: 二色覚のシミュレーションによる色度の移動(強度 1)
図 2: 二色覚のシミュレーションによる色度の移動(強度 1)。sRGB の原色と二次色(赤・緑・青・シアン・マゼンタ・黄)の、元の色度(○)と、シミュレーションした色度(矢印の先)を、型ごとの三つの図で示す。色度図は図 1 と同じ u′v′u'v' 色度図である。各図に、その型の混同色線(欠けた錐体の応答だけが異なる色の並び)を薄い線で重ねた。混同色線は、その型の共点(欠けた錐体の軸の方向の色度)を通る直線で、色度図の領域の中の区間だけを示す。線の角度の間隔は、1 型と 3 型は 3°、2 型は白の近くでの線の間隔が 1 型とそろうよう約 4° とした。色域の制限の前のシミュレーションによる移動は、混同色線に沿う。終点が色域の外になる色は、色域の制限(§5-4)によって表示では色域の内側へ移る。

6. 全体の変換

入力と表示の色空間が異なる場合も含め、符号化された入力 cin\mathbf{c}_{\mathrm{in}} から符号化された出力 cout\mathbf{c}_{\mathrm{out}} への変換は、§2〜§5 の合成として次のように書ける。

cout=enc ⁣(clip ⁣(Mout qk))(29)\mathbf{c}_{\mathrm{out}}=\mathrm{enc}\!\left(\mathrm{clip}\!\left(M_{\mathrm{out}}\,\mathbf{q}_k\right)\right) \tag{29}

ここで enc\mathrm{enc} は式 (2) の符号化(成分ごと)、clip\mathrm{clip} は式 (28) の制限、qk\mathbf{q}_k は式 (27) の混合である。混合に用いる q\mathbf{q} は q=Min dec(cin)\mathbf{q}=M_{\mathrm{in}}\,\mathrm{dec}(\mathbf{c}_{\mathrm{in}})(dec\mathrm{dec} は式 (1) の復号)、qs=Ps(q) q\mathbf{q}_s=P_s(\mathbf{q})\,\mathbf{q} で、Ps(q)P_s(\mathbf{q}) は式 (18)〜(20) から、型と q\mathbf{q} の位置で選ばれる行列である。入力の色空間の行列を McapM_{\mathrm{cap}}、表示の色空間の行列を MdispM_{\mathrm{disp}}(いずれも式 (4) の形)とすると、

Min=MLMS Mcap,Mout=(MLMS Mdisp)−1(30)M_{\mathrm{in}}=M_{\mathrm{LMS}}\,M_{\mathrm{cap}},\qquad M_{\mathrm{out}}=\left(M_{\mathrm{LMS}}\,M_{\mathrm{disp}}\right)^{-1} \tag{30}

である。入力と表示がともに sRGB、またはともに Display P3 の場合の数値は、§4-2 に示した。

7. 色名の表示

本節は、画像の一点の色を読み、その色名と色の値を表示する処理(色名の表示)の理論を、要点に限って述べる。色名は、日本産業規格 JIS Z 8102 [15] の系統色名と慣用色名による(日本語の画面の既定)。英語の色名は §7-6 に述べる。以下では、色の XYZ は §3 で得る D65 の値であり、読み取りは元の画像(シミュレーション前)に対して行う。

7-1. 読む色の決め方

一点の画素は、撮像の雑音や細かい模様の影響を受けやすい。そこで、指した位置(画素)の周りの画素を、Oklab 空間 [14] でガウス重みを付けて平均した色を、読む色とする。画素 ii の色の XYZ(D65)から、式 (23) と同じ行列で Oklab の値 oi=M2M1 xi3\mathbf{o}_i=M_2\sqrt[3]{M_1\,\mathbf{x}_i}(xi=(X,Y,Z)T\mathbf{x}_i=(X,Y,Z)^{\mathsf T})を求め、位置 di\mathbf{d}_i(指した位置からの画素の距離)の重みを

wi=exp⁡ ⁣(−∥di∥22σ2),oˉ=∑iwi oi∑iwi(31)w_i=\exp\!\left(-\frac{\lVert\mathbf{d}_i\rVert^{2}}{2\sigma^{2}}\right),\qquad \bar{\mathbf{o}}=\frac{\sum_i w_i\,\mathbf{o}_i}{\sum_i w_i} \tag{31}

とする。和は、指した位置から両方向に 3σ3\sigma 以内の画素について取り、oˉ\bar{\mathbf{o}} を Oklab の逆変換で XYZ に戻したものを、読む色とする。σ\sigma は画面上の長さ(6 pt)で定め、元の画像の画素の大きさに換算して用いるので、拡大・縮小しても、画面で同じ広さの色を読む。Oklab は知覚の均等性が高く、色相のずれが小さいので、平均が見た目の中間の色になる。

7-2. 系統色名

系統色名は、色をマンセルの色相 HH・明度 VV・彩度 CC で表し、JIS Z 8102 が定める領域に当てて決める。マンセル表色系の値は、JIS Z 8721 [16] と ASTM D1535 [17] による。

明度。 視感反射率 YY(白を 11)とマンセル明度 VV の関係は、5 次の多項式

Y=1100(1.1913 V−0.22532 V2+0.23351 V3−0.020483 V4+0.00081936 V5)(32)Y=\frac{1}{100}\left(1.1913\,V-0.22532\,V^{2}+0.23351\,V^{3}-0.020483\,V^{4}+0.00081936\,V^{5}\right) \tag{32}

で与えられる [16](係数は JIS Z 8721 の値。[17] が示す係数とは最後の桁が異なる。参考文献 [17] の注を参照)。0≤V≤100\le V\le 10 でこの式は単調に増加するので、VV は式 (32) の厳密な逆を数値で解いて求める。

色相と彩度。 マンセル・リノテーション表 [17][18] は、明度の段ごとに、色相と彩度の格子点の色度 (x,y)(x,y) を与える。読む色の XYZ を、光源 C に順応させた色度 (x,y)(x,y)(§7-4)に変換し、明度の段ごとに、色度点を含む格子の升目の中の位置を逆双一次補間で求めて色相と彩度とする。点を挟む上下 2 段の結果は、明度で線形に補間する。彩度が 0.0050.005 未満の色は無彩色(N V\mathrm{N}\,V)とする。色度点が表の外にあるときは、明度と色相を保ったまま、色度を光源 C の白色点の方へ縮め、表の内側に入る一番外の点で求める。

系統色名の領域。 JIS Z 8102 は、系統色名を、マンセルの色相・明度・彩度の矩形の表として定める。5 桁に丸めた (H,V,C)(H,V,C) を、この表の矩形(境界を含む)に当てて系統色の記号を引き、記号を名前(例: 明るい灰みの緑みを帯びた黄)にする [15]。

7-3. 慣用色名

JIS Z 8102 の慣用色名のうち、マンセル値で定められている 267 色は、それぞれのマンセル値を用いる [15]。各慣用色のマンセル値から光源 C の XYZ を求め、§7-4 の色順応で D65 に変換して、CIELAB(D65 の白、L∗, a∗, b∗L^{*},\,a^{*},\,b^{*}。式は [7])の値 Lk\mathbf{L}_k を作る。読む色の CIELAB L\mathbf{L} に最も近い慣用色を、次の最近傍として選ぶ。

k∗=arg⁡min⁡k  ΔE00 ⁣(L, Lk)(33)k^{\ast}=\underset{k}{\arg\min}\;\Delta E_{00}\!\left(\mathbf{L},\,\mathbf{L}_k\right) \tag{33}

距離 ΔE00\Delta E_{00} は CIEDE2000(CIE 142:2001 [19]。計算は [20] の式による)を既定とする。最近傍の距離が 1010 を超えるときは、その慣用色が近いとは言えないので、名前に「?」を付けて表示する。同じ座標に複数の名前が定められている慣用色は、その名前を並べて示す。

7-4. 色順応と観測者

JIS Z 8102 のマンセル値と慣用色は、光源 C・CIE 1931 2° 標準観測者の下で定められている。一方、画面の白は D65 である。そこで、D65 の XYZ をマンセル値に変換する前に光源 C に、慣用色の XYZ を CIELAB にする前に D65 に、色順応で変換する。色順応は、Hunt–Pointer–Estévez の錐体の空間 [10][11] での Von Kries 形の線形変換とする。白色点の XYZ(Y=1Y=1)を wD65\mathbf{w}_{\mathrm{D65}}(色度 (0.3127, 0.3290)(0.3127,\,0.3290))、wC\mathbf{w}_{\mathrm{C}}(色度 (0.31006, 0.31616)(0.31006,\,0.31616))とし、式 (9) の行列 MEM_{\mathrm{E}}(2° の HPE)を用いて、D65 から C への変換を

AD65→C=ME−1 diag ⁣(ME wCME wD65)ME(34)A_{\mathrm{D65}\to\mathrm{C}}=M_{\mathrm{E}}^{-1}\, \mathrm{diag}\!\left(\frac{M_{\mathrm{E}}\,\mathbf{w}_{\mathrm{C}}}{M_{\mathrm{E}}\,\mathbf{w}_{\mathrm{D65}}}\right)M_{\mathrm{E}} \tag{34}

とする(分数は成分ごとの比)。C から D65 への変換は、その逆行列である。ここで用いる MEM_{\mathrm{E}} は 2° の観測者のもので、§4 のシミュレーションの MLMSM_{\mathrm{LMS}}(10° に合わせた行列)とは別である。画像の色の XYZ が 2° の観測者である点は、§1-1 と同じである。

7-5. 表示できる形式

読む色(D65 の XYZ)は、次の形式で表示できる。

  • マンセル値(§7-2。表記は「5GY 7/8」の形)と、系統色名・慣用色名(§7-2、§7-3)。
  • sRGB: 符号化された 8 ビットの値(§2、§3-2)。色域の外の値は 00〜11 に制限する。
  • XYZ(D65、YY は白を 11)と xyY(色度座標 (x, y)(x,\,y) と YY)。定義は [7] による。
  • CIELAB と CIELUV(D65 の白。定義は [7] による)。
  • Oklab(式 (23) と同じ変換 [14])。

8. 色差の算出(色差モード)

色差モードは、画像の各画素について、元の色と、シミュレーション後の色の違いを、明るさで表示する。違いが大きいほど明るく、違いが無い画素は黒である。本節は、その算出方法を述べる。

8-1. 距離

元の色の LMS を q\mathbf{q}、強度 kk のシミュレーションの結果を qk\mathbf{q}_k(式 (27))とする。距離は、Oklab 空間 [14] のユークリッド距離とする。Oklab への変換は、強度による混合(式 (22)〜(24))と同じものである。すなわち、元の色は式 (22) で表示の色域に制限してから Oklab に写し、シミュレーションの結果は混合の際に求めた Oklab の値 ok\mathbf{o}_k をそのまま用いる。

Δk=∥ ok−o ⁣(C(q))∥2(35)\Delta_k=\left\lVert\,\mathbf{o}_k-\mathbf{o}\!\left(C(\mathbf{q})\right)\right\rVert_2 \tag{35}

ここで ∥⋅∥2\lVert\cdot\rVert_2 は (L,a,b)(L,a,b) の 3 成分のユークリッド距離である。式 (27) より ok=(1−k) o(C(q))+k o(C(qs))\mathbf{o}_k=(1-k)\,\mathbf{o}(C(\mathbf{q}))+k\,\mathbf{o}(C(\mathbf{q}_s)) であるから、距離は強度に比例する。

Δk=k ∥ o ⁣(C(qs))−o ⁣(C(q))∥2(36)\Delta_k=k\,\left\lVert\,\mathbf{o}\!\left(C(\mathbf{q}_s)\right)-\mathbf{o}\!\left(C(\mathbf{q})\right)\right\rVert_2 \tag{36}

したがって、実装は完全な二色覚のシミュレーション(k=1k=1)の結果だけを Oklab に写して距離を求め、強度 kk を掛ければよい。強度を下げると、色差の画像は全体に暗くなる。なお、CC による色域の制限を距離の前に行うため、表示できない色(鮮やかな青や紫)の違いは、表示で見える違いの分だけが数えられる。

8-2. 明るさへの当てはめ

距離 Δk\Delta_k を、上限 DD で割って、明るさ BB(0≤B≤10\le B\le 1)にする。

B=min⁡ ⁣(1, ΔkD)(37)B=\min\!\left(1,\ \frac{\Delta_k}{D}\right) \tag{37}

B=0B=0 は黒(違いが無い)、Δk≥D\Delta_k\ge D で白(上限以上の違い)であり、その間は直線である。出力の三成分は、BB をそのまま符号化された値(式 (2) の符号化の後の値)として表示する。

cout=(B, B, B)(38)\mathbf{c}_{\mathrm{out}}=(B,\,B,\,B) \tag{38}

上限 DD は、利用者が強度のスライダーで調節する(色差モードでは、スライダーが強度でなく上限を表す)。スライダーの値 ss(0≤s≤10\le s\le 1)と上限の関係は直線である。

D=0.01+0.18 s(39)D=0.01+0.18\,s \tag{39}

DD の範囲は 0.010.01〜0.190.19、既定は s=0.5s=0.5 の D=0.10D=0.10 である。DD を小さくすると、小さな違いまで白に近くなり、大きくすると、大きな違いだけが白に近くなる。

画素の値は 8 ビットで、明るさは D/255D/255 の刻みで表示される。D=0.10D=0.10 では、およそ 0.00020.0002 より小さな違いは黒になる。撮像の雑音による小さな違いも、DD が小さいと表示に現れる。

図 3 に、色差の画像の例を示す。

図 3: 色差の画像の例(色相の帯、1 型、強度 $1$、上限 $0.10$)
図 3: 色差の画像の例(色相の帯、1 型、強度 11、上限 0.100.10)。色相の帯(上の 3 段は Oklab の明度 0.800.80・0.650.65・0.500.50、彩度 0.130.13。下の 3 段は明度 0.650.65、彩度 0.030.03・0.060.06・0.100.10。色相は左から右へ 0∘0^{\circ}〜360∘360^{\circ})の、元の画像(左)、1 型(P)のシミュレーション(強度 11、中)、色差の画像(右、上限 D=0.10D=0.10)を示す。色差の画像は、式 (37) の BB を明るさにした灰色で、黒は違いが無く、白は 0.100.10 以上の違いである。縦の黒い帯は、1 型で色が変わらない色相(混同色線の上の色)に当たる。彩度の低い下の段は、全体に違いが小さい。

8-3. Oklab を用いる理由

同じ空間を用いる。 色差の距離は、強度による混合(§5-3)と、読む色の平均(§7-1)と同じ Oklab 空間で求める。変換の行列(式 (24))と実装を共通にでき、シミュレーションの結果と色差が同じ尺度で一貫する。

距離の単純さ。 Oklab は知覚の均等性が高い [14] ので、ユークリッド距離がそのまま見た目の違いに近い。CIEDE2000 [19][20] は、色相・彩度・明度に重みを付けた複雑な式(三角関数と場合分けを含む)で、画素ごとの処理(シェーダー)に向かない。

CIEDE2000 との関係。 シミュレーションの前後の違いは、CIEDE2000 が本来の対象とする小さな色差より大きい。両者の対応を、色票(128 色)・色相の帯・JIS 慣用色(267 色)・石原風の点・写真 5 枚の画素(型は 1 型・2 型・3 型、強度 1)で測った。Oklab の距離が表の値の近く(±10%)にある画素の ΔE00\Delta E_{00} の中央値と、ΔE00\Delta E_{00} が表の値の近くにある画素の Oklab の距離の中央値は次のとおりである。

Oklab の距離ΔE00\Delta E_{00}(中央値、四分位)ΔE00\Delta E_{00}Oklab の距離(中央値、四分位)
0.0514(13〜16)50.013(0.011〜0.018)
0.1022(20〜24)100.028(0.025〜0.035)
0.2032(29〜34)200.082(0.069〜0.097)
——400.238(0.203〜0.260)

既定の上限 0.100.10 は、ΔE00≈22\Delta E_{00}\approx 22 に当たる。これは、二つの色を並べれば誰にも別の色と分かる大きさである。ΔE00\Delta E_{00} が 1010 以上の違いを白にしたいときは、上限を 0.030.03 前後にする。対応は色によって異なり、上の値は上記の画素の統計に基づく目安である。W3C の CSS Color Module Level 4 は、色域写像で、OkLCh の色空間の 1 JND(やっと違いが分かる差)を 0.020.02 としており、その差の尺度は ΔEOK\Delta E_{\mathrm{OK}}(Oklab の (L,a,b)(L,a,b) のユークリッド距離。同書 §20.3)である [21]。本稿の距離(式 (35))は、この ΔEOK\Delta E_{\mathrm{OK}} と同じ尺度である。上限の下限 0.010.01 は、その半分である。

8-4. 限界

  • Oklab のユークリッド距離は、知覚の差の近似である。 大きな違いでは、距離と見た目の差の対応が色によって変わる(表の対応も色によって異なる)。色の違いを厳密な尺度で測る用途には、ΔE00\Delta E_{00} などを用いるのがよい。
  • 対象は、元とシミュレーション後の違いである。 画像の中の二つの色の見分けやすさを測るものではない。また、シミュレーションは完全な二色覚(強度 11)または強度による補間であり、異常三色覚の見え方そのものではない(§5)。
  • 表示の色域に依存する。 距離は、表示の色域に制限した色で測る(式 (22))。Display P3 の画面では、制限が sRGB と異なるため、特に鮮やかな色で値が変わる。
  • 明るさの表示の刻みは 8 ビットである。 小さな違いと雑音は、上限の設定によって黒にもなり、現れもする(§8-2)。
  • 差は上限で飽和する。 Δk≥D\Delta_k\ge D の違いは、すべて白で表示され、大きさの違いは分からない。

7-6. 英語の色名の出典

系統色名(ISCC-NBS)。 ISCC-NBS の色名の方式 [22] による。マンセルの色相・明度・彩度の空間を 267 の領域(色名のブロック)に分け、各領域に英語の系統色名を与える。領域の境界は NBS SP 440 [23] の図による。

慣用色名(TCCA)。 NBS Research Paper RP1700 [25] による。同報告は、Textile Color Card Association(TCCA)の標準色票 216 色と米陸軍の色票 22 色の計 238 色を、分光測色などで測り、各色票にマンセル・リノテーション表記を与えた。アプリが使う名前は 178 で、TCCA の色票の名前 156、陸軍の色票の名前 9、基本の 13 語である。最近傍の引き方は JIS の慣用色名(§7-3)と同じである。基本の 13 語(red・pink など)は、ISCC-NBS の Level 1 [22] の色を使用し、その色は Kelly の報告 [24] のブロックの中心のマンセル値による。TCCA・陸軍の同名の色票は使用しない。

参考文献

[1] H. Brettel, F. Viénot, and J. D. Mollon, "Computerized simulation of color appearance for dichromats", Journal of the Optical Society of America A, vol. 14, no. 10, pp. 2647–2655, 1997. doi:10.1364/JOSAA.14.002647

[2] K. Asada, "Chromatic Vision Simulator", README of the Android source code (code version 3.3.1; the README itself is headed "Android version 3.0") (appendix: mathematical expressions for color vision simulation), GitHub repository asada0/ChromaticVisionSimulator, 2018, MIT License. https://github.com/asada0/ChromaticVisionSimulator (accessed 25 October 2026)

[3] IEC 61966-2-1:1999, Multimedia systems and equipment — Colour measurement and management — Part 2-1: Colour management — Default RGB colour space — sRGB, International Electrotechnical Commission; and Amendment 1:2003 (published 23 January 2003).

[4] SMPTE EG 432-1:2010, Digital Source Processing — Color Processing for D-Cinema, Society of Motion Picture and Television Engineers, 10 November 2010. doi:10.5594/SMPTE.EG432-1.2010

[5] Apple Inc., "Display P3", Three Component Color Encoding Registry (ICC Registry), International Color Consortium, version 1.0, 9 February 2022. https://registry.color.org/rgb-registry/displayp3 (accessed 22 October 2026). See also Apple Developer Documentation, CGColorSpace.displayP3, https://developer.apple.com/documentation/coregraphics/cgcolorspace/displayp3 (accessed 22 October 2026).

[6] T. Smith and J. Guild, "The C.I.E. colorimetric standards and their use", Transactions of the Optical Society, vol. 33, no. 3, pp. 73–134, 1931–32. doi:10.1088/1475-4878/33/3/301

[7] CIE 15:2004, Colorimetry, 3rd ed., Commission Internationale de l'Éclairage, 2004, ISBN 978-3-901906-33-6 (since superseded by CIE 015:2018).

[8] G. Wyszecki and W. S. Stiles, Color Science: Concepts and Methods, Quantitative Data and Formulae, 2nd ed., John Wiley & Sons, 1982, ISBN 978-0-471-02106-3.

[9] JIS Z 8701:1999, 色の表示方法 — XYZ 表色系及び X10Y10Z10 表色系(Colour specification — The CIE 1931 standard colorimetric system and the CIE 1964 supplementary standard colorimetric system), 日本規格協会(Japanese Standards Association), 1999. 付表 2(X10Y10Z10 表色系のスペクトル色度座標)。 注: 二次資料は、この規格が 2016 年の JIS Z 8781-3 の制定により廃止されたとする(JISC の原本では未確認)。本書が使う付表 2 の値は、JIS ハンドブック 61 色彩の掲載と照合した。

[10] R. W. G. Hunt and M. R. Pointer, "A colour-appearance transform for the CIE 1931 standard colorimetric observer", Color Research & Application, vol. 10, no. 3, pp. 165–179, 1985. doi:10.1002/col.5080100306

[11] M. D. Fairchild, Color Appearance Models, 3rd ed., John Wiley & Sons, 2013, ISBN 978-1-119-96703-3. doi:10.1002/9781118653128

[12] C. Poynton, Digital Video and HD: Algorithms and Interfaces, 2nd ed., Morgan Kaufmann, 2012, ISBN 978-0-12-391926-7.

[13] Colour & Vision Research Laboratory, UCL Institute of Ophthalmology, "CIE 1931 2-deg XYZ color matching functions (ciexyz31_1.csv, 1 nm steps)" and "CIE 1964 10-deg XYZ color matching functions (ciexyz64_1.csv, 1 nm steps)", database of the Colour & Vision Research Laboratory, http://cvrl.ioo.ucl.ac.uk/cmfs.htm (accessed 26 October 2026).

[14] B. Ottosson, "A perceptual color space for image processing", blog post, 23 December 2020, https://bottosson.github.io/posts/oklab/ (accessed 26 October 2026).

[15] JIS Z 8102:2001, 物体色の色名(Names of non-luminous object colours), 日本規格協会(Japanese Standards Association), 2001. 注: 公開資料は慣用色名を 269 色とする。本書は、このうちマンセル値で定められている 267 色を使う(残りの色名の中身は規格の原本で未確認)。

[16] JIS Z 8721:1993, 色の表示方法-三属性による表示(Colour specification — Specification according to their three attributes), 日本規格協会(Japanese Standards Association), 1993. 注: 式 (32) の係数は、この規格の値である。

[17] ASTM D1535-14 (2023), Standard Practice for Specifying Color by the Munsell System, ASTM International, reapproved 2023. https://store.astm.org/d1535-14r23.html (accessed 26 October 2026) 注: 式 (32) は [16] の係数を用いた。二次資料が示すこの規格の係数(1.1914, −0.22533, 0.23352, −0.020484, 0.00081939)は最後の桁が異なり、差は Y で最大 0.003(百分率の単位)である。[16] と [17] の原文は未読である。

[18] S. M. Newhall, D. Nickerson, and D. B. Judd, "Final report of the O.S.A. subcommittee on the spacing of the Munsell colors", Journal of the Optical Society of America, vol. 33, no. 7, pp. 385–418, 1943. doi:10.1364/JOSA.33.000385

[19] CIE 142:2001, Improvement to industrial colour-difference evaluation, Commission Internationale de l'Éclairage, Vienna, 2001, ISBN 978-3-901906-08-4.

[20] G. Sharma, W. Wu, and E. N. Dalal, "The CIEDE2000 color-difference formula: Implementation notes, supplementary test data, and mathematical observations", Color Research & Application, vol. 30, no. 1, pp. 21–30, 2005. doi:10.1002/col.20070

[21] World Wide Web Consortium (W3C), "CSS Color Module Level 4", Candidate Recommendation Draft, 27 October 2026, §14.2.1 (Gamut Mapping: "For the OkLCh color space, one JND is an OkLCh difference of 0.02") and §20.3 (ΔEOK, defined as the Euclidean distance in Oklab color space). https://www.w3.org/TR/css-color-4/ (accessed 28 October 2026)

[22] K. L. Kelly and D. B. Judd, "The ISCC-NBS Method of Designating Colors and a Dictionary of Color Names", NBS Circular 553, National Bureau of Standards, 1955.

[23] K. L. Kelly and D. B. Judd, "Color: Universal Language and Dictionary of Names", NBS Special Publication 440, National Bureau of Standards, 1976. doi:10.6028/NBS.SP.440

[24] K. L. Kelly, "Central Notations for the Revised ISCC-NBS Color-Name Blocks", Journal of Research of the National Bureau of Standards, vol. 61, no. 5, pp. 427–431, 1958 (Research Paper 2911).

[25] G. Reimann, D. B. Judd, and H. J. Keegan, "Spectrophotometric and Colorimetric Determination of the Colors of the TCCA Standard Color Cards", Journal of Research of the National Bureau of Standards, vol. 36, no. 3, p. 209, 1946 (Research Paper RP1700).