色のめがね 3.0 の理論

1. 概要

「色のめがね」には、画面の下の帯で切り替える 3 つの機能がある。

機能何をするかこの頁の節
色を見分ける見分けにくい色を、ゾーン(スライダーで選んだ色の範囲)ごとに、見分けやすい色へ変える§6(ゾーンの決め方)・§7(変え方)
色を見つける探す色に近い色だけを、目立つ色へ変える§8(探す色と範囲)・§7(変え方)
シミュレーション色の見分けにくい人に、画像がどう見えるかを、元の画像に重ねて確かめる§9(色のシミュレータ 4.0 と共通)

色を見分けると色を見つけるは、どの色を変えるかの決め方が違い、どう変えるか(§7)は共通である。どちらも、その人が区別しにくい色の違いに注目する。1 型・2 型・3 型の人は、それぞれ L・M・S 錐体のうち 1 種類の応答が他の人と異なり、その錐体の応答だけが違う 2 つの色を区別しにくい。色のめがねは、区別しにくい色どうしが別の色へ動くように、その錐体の応答の違いとは別の方向へ色を動かす。

このほか、カーソルの下の色名の表示がある。これも色のシミュレータ 4.0 と同じ仕組みである(§9)。

本稿は、色のシミュレータ 4.0 の理論と同じく、伝達関数、色空間の行列、錐体の行列、色度図、均等色空間までの式と定数をすべて書き、そのうえで、ゾーンの決め方(3 方式)、色の変え方、色を見つける仕組みを式で述べる。

1-1. 前提

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

  1. 1. 白点: D65、(x,y)=(0.3127, 0.3290)(x,y)=(0.3127,\,0.3290)、(u′,v′)=(0.19783, 0.46832)(u',v')=(0.19783,\,0.46832)(sRGB および Display P3 の規格の定義値 [3][4][5])。すべての変換で共通である。
  1. 2. 観測者: 画像の色の XYZ は CIE 1931 2° 標準観測者 [6](XYZ の定義 [7][8])による。錐体の行列(§4)の作成と、ブーストの錨刺激(§7-5)の色度座標には、CIE 1964 10° 補助標準観測者(X10Y10Z10 表色系)の等色関数 [7] と、その色度座標の値(JIS Z 8701 付表 2 [9])を用いる。
  1. 3. 色空間: 入力と表示は、sRGB [3] または Display P3 [4][5] のいずれかとする。両者は伝達関数が同一で、原色のみが異なる(§2、§3)。以下の数値と図は、断りのない限り sRGB である。
  1. 4. 量子化: 8 ビット(00〜255255)。符号化値は画素値を 255255 で割った 00 以上 11 以下の実数として扱う。
  1. 5. 色順応: 入力と表示の白点がともに D65 であるため、色順応変換は行わない。
  1. 6. 錐体の空間: XYZ から LMS への変換には、色のシミュレータ 4.0 と同じ行列(Hunt–Pointer–Estévez(HPE)の錐体の形を保ったまま、10° の XYZ に合わせて作り、D65 に正規化した行列)を用いる [9][10][11]。
  1. 7. 色覚の型: 1 型・2 型・3 型は、それぞれ L・M・S 錐体の応答が他の人と異なる型とする。計算の上では、その錐体の応答を持たない二色覚のモデルで扱い、「シミュレーション強度」とは、それぞれの色覚タイプのうちもっとも強度の 2 色覚の色の見え方を 100%、元の画像を 0% として、その中間の画像を表示するための値である。異常 3 色覚(弱度の色覚異常)の色の見え方をシミュレーションするものではない(シミュレーション、§9)。
  1. 8. 表示: 変えた色は、表示の色空間の線形 RGB の 00〜11 に収めてから符号化する。色空間をまたぐ(入力が Display P3 で表示が sRGB など)場合も、§4 以後の計算は共通で、入力と表示の行列だけを取り替える。

1-2. 記法

  • R, G, BR,\,G,\,B: 線形 RGB の各成分。00 以上 11 以下とし、白を 11 とする。X, Y, ZX,\,Y,\,Z: XYZ の各成分(YY は白を 11 とする)。
  • c\mathbf{c}: 画素の色(XYZ)。符号化された RGB(各成分 VV、0≤V≤10\le V\le 1)は、cin\mathbf{c}_{\mathrm{in}}・cout\mathbf{c}_{\mathrm{out}} と書く。
  • 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} である。
  • MM: 線形 RGB → XYZ の行列。MLMSM_{\mathrm{LMS}}: XYZ → LMS の行列。
  • u′,v′u',v': CIE 1976 UCS の色度座標。L∗,u∗,v∗L^*,u^*,v^*: CIELUV。L,a,bL,a,b: Oklab(錐体の応答 LL と同じ記号だが、§5-3 と §6-5 でだけ使う)。
  • PP: ゾーンの位置(赤の原色 00、緑の原色 11。3 型は緑 00、青 11)。スライダーの値は s=1−Ps=1-P。
  • ff: 変化の大きさ(00〜0.50.5)。age\mathrm{age}: 色の回転(00〜11 の 1 周)。ww: ゾーンの幅、aZa_Z: ゾーンの開始(スライダーの値)。wSw_S: 色を見つけるの範囲の幅。

1-3. 処理の流れ

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

符号化された RGB ──(§2) 復号──▶ 線形 RGB ──(§3, §4) 行列──▶ XYZ・LMS
   色を見分ける:  ゾーンの位置 P(§6)で、ゾーンに入る画素を決める ─┐
   色を見つける:  探す色との u′v′ の距離(§8)で、近い画素を決める ─┴▶ 選ばれた画素
選ばれた画素 ──(§7) CIELUV で変える・色域の三角形へ収める──▶ 変えた XYZ
変えた XYZ ──(§4) LMS──▶(§9 シミュレーションを重ねるとき)──▶ 表示の線形 RGB(0〜1 に制限)──(§2) 符号化──▶ 符号化された RGB

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}

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 の線形変換として与える。色のシミュレータ 4.0 と同じく、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° の等色関数が、HPE の錐体の感度を最もよく再現するように、重みなしの最小二乗で求める。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])、HPE の錐体の感度は ME xˉ(2)(λ)M_{\mathrm{E}}\,\bar{\mathbf{x}}^{(2)}(\lambda)(xˉ(2)(λ)\bar{\mathbf{x}}^{(2)}(\lambda) は CIE 1931 の 2° の等色関数)である。数値はどちらも [13] の 1 nm 刻みの表から 5 nm ごとに取る。そのうえで、白点 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)\begin{aligned} 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},\\[2mm] M_{\mathrm{LMS}}&=\mathrm{diag}(\mathbf{n})^{-1}M_{\mathrm{raw}},\qquad \mathbf{n}=M_{\mathrm{raw}}\mathbf{W} \end{aligned} \tag{10}

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

MLMS=(−0.47008−0.67928−0.11576−0.18706−1.18397−0.00567−0.05526−0.06666−0.90524)(11)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} \tag{11}

この行列は公表された標準ではなく、色のシミュレータ 4.0 のために作った近似であり、錐体の形は HPE のままである(当てはめの残差、10° の錐体の物理的な違いの扱いは、色のシミュレータ 4.0 の理論の §4-1 に述べた)。この正規化により、D65 の白は q=(1,1,1)T\mathbf{q}=(1,1,1)^{\mathsf T} に写像される。逆行列は次のとおりである(7 桁)。

MLMS−1=(−1.7487090−1.0155232−0.2172701−0.2767005−0.6836341−0.0396654−0.0863663−0.1123291−1.1150205)(12)M_{\mathrm{LMS}}^{-1}=\begin{pmatrix} \phantom{-}1.7487090 & -1.0155232 & \phantom{-}0.2172701\\ \phantom{-}0.2767005 & \phantom{-}0.6836341 & \phantom{-}0.0396654\\ \phantom{-}0.0863663 & -0.1123291 & \phantom{-}1.1150205 \end{pmatrix} \tag{12}

この逆行列の列は、錐体 1 種類だけを刺激する色(q\mathbf{q} が (1,0,0)T(1,0,0)^{\mathsf T}・(0,1,0)T(0,1,0)^{\mathsf T}・(0,0,1)T(0,0,1)^{\mathsf T} の方向の XYZ)で、§6 の混同色線の方向 e\mathbf{e} になる。

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

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

q=MLMS M(RGB),(RGB)=(MLMS M)−1q(13)\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{13}

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

MLMSM=(0.33606200.64009540.02384260.17450560.77916950.04632490.00888630.13581410.8552996),(MLMSM)−1=(−5.1990556−4.2862792−0.0872236−1.1722550−2.2620970−0.0898419−0.1321271−0.3146679−1.1825408)(14)\begin{aligned} 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},\\[3mm] \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} \end{aligned} \tag{14}

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

MLMSM=(−0.3842671−0.5895472−0.0261857−0.1800798−0.7690428−0.0508774−0.0116227−0.0722697−0.9393530),(MLMSM)−1=(−4.0679056−3.1236934−0.0557878−0.9607645−2.0447289−0.0839644−0.1242496−0.1959623−1.0717127)(15)\begin{aligned} 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},\\[3mm] \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} \end{aligned} \tag{15}

5. 色度と均等色空間

色のめがねは、色を CIELUV の空間で動かし、色度図 u′v′u'v' の上で色域の三角形に収める。ゾーンの 3 方式のうち 2 つは、CIELUV と Oklab の距離を使う。この節で、それらの変換を定める。

5-1. XYZ と u′v′Yu'v'Y

XYZ から CIE 1976 UCS の色度座標 (u′,v′)(u',v') へ、および逆の変換は次のとおりである [7]。

u′=4XX+15Y+3Z,v′=9YX+15Y+3Z(16)u'=\frac{4X}{X+15Y+3Z},\qquad v'=\frac{9Y}{X+15Y+3Z} \tag{16}
X=9u′4v′ Y,Z=12−3u′−20v′4v′ Y(17)X=\frac{9u'}{4v'}\,Y,\qquad Z=\frac{12-3u'-20v'}{4v'}\,Y \tag{17}

分母が 00 に近い場合(黒など)は、(u′,v′)(u',v') を白点 (0.19783, 0.46832)(0.19783,\,0.46832) とする。この色度図は、色度の差が見た目の差におおよそ比例する均等色度図で、xyxy 色度図より、距離で色の近さを測るのに向く。原点(黒)を通る平面(LMS・XYZ の上の)は、u′v′u'v' の上で直線になる。§6 のゾーンの境目は、この性質を使う。

5-2. CIELUV

L∗u∗v∗L^*u^*v^* は、YY を白の YnY_n(本稿では 11)で割った YrY_r と、式 (16) の (u′,v′)(u',v')、白の (un′,vn′)(u'_n,v'_n) から次のとおりである [7]。

L∗={116 Yr1/3−16(Yr>ε)κ Yr(Yr≤ε),ε=21624389,κ=2438927(18)L^*=\begin{cases} 116\,Y_r^{1/3}-16 & (Y_r>\varepsilon)\\ \kappa\,Y_r & (Y_r\le\varepsilon) \end{cases},\qquad \varepsilon=\frac{216}{24389},\quad\kappa=\frac{24389}{27} \tag{18}
u∗=13L∗(u′−un′),v∗=13L∗(v′−vn′)(19)u^*=13L^*(u'-u'_n),\qquad v^*=13L^*(v'-v'_n) \tag{19}

逆変換は、L∗>8L^*>8 のとき Yr=(L∗+16116)3Y_r=\left(\frac{L^*+16}{116}\right)^3、それ以外は Yr=L∗/κY_r=L^*/\kappa とし、u′=u∗13L∗+un′u'=\frac{u^*}{13L^*}+u'_n、v′=v∗13L∗+vn′v'=\frac{v^*}{13L^*}+v'_n である。L∗≤0L^*\le 0(黒)は、u′v′u'v' を白点とし Y=0Y=0 とする。式 (18) の下側(Yr≤εY_r\le\varepsilon)は、暗い色の線形の足である。2.21 は純べき乗だけで足が無く、黒が L∗=−16L^*=-16 になって逆変換が 0 で割る不具合があった。

5-3. Oklab

Oklab は、Ottosson の均等色空間 [14] で、XYZ(D65、YY は白を 11)から次の行列で作る。

q′=M1(XYZ),(Lab)=M2 q′3(20)\mathbf{q}'=M_1\begin{pmatrix}X\\Y\\Z\end{pmatrix},\qquad \begin{pmatrix}L\\a\\b\end{pmatrix}=M_2\,\sqrt[3]{\mathbf{q}'} \tag{20}

立方根は成分ごとの符号つきの立方根(x3=sgn(x) ∣x∣1/3\sqrt[3]{x}=\mathrm{sgn}(x)\,|x|^{1/3})である。

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)(21)\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},\\[3mm] 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{21}

色全体を kk 倍すると、q′\mathbf{q}' が kk 倍、立方根が k1/3k^{1/3} 倍になるので、L,a,bL,a,b はどれも同じ割合 k1/3k^{1/3} で変わる。したがって a/La/L と b/Lb/L は明るさに依らない。§6-5 の色度差分方式は、この (a/L, b/L)(a/L,\,b/L) を使う。

5-4. 色域の三角形

表示の色空間の原色の色度 (u′,v′)(u',v') は、式 (5)(7) の各原色の XYZ(MM の列)に式 (16) を当てて得る(sRGB の青の原色は、Display P3 と同じ)。

色空間RGB白
sRGB(0.45070, 0.52289)(0.12500, 0.56250)(0.17544, 0.15789)(0.19783, 0.46832)
Display P3(0.49635, 0.52555)(0.09860, 0.57767)(0.17544, 0.15789)(0.19783, 0.46832)

この三角形の外の色度は、表示できない。§7-6 で、変えた色をこの三角形に収める。2.21 は、sRGB の原色を 4 桁に丸めた値(赤 (0.4497, 0.5226)(0.4497,\,0.5226) など)を直書きしていた。3.0 は、表示の色空間の原色から計算する。

6. 色を見分ける: ゾーンの決め方

色を見分けるは、画素の色にゾーンの位置 PP を与え、スライダーで選んだ範囲(ゾーン)に入る色を変える。PP の作り方が 3 種類あり、設定「ゾーンの割り振り」で選ぶ。

設定の名前内部の呼び名軸の意味
色度角度方式P(標準。2.21 と同じ)色度図の上の角度
色の見え差分方式A元の色と射影の色の CIELUV の距離(明るさの差を含む)÷ 元の L*
色度差分方式Ch元の色と射影の色の Oklab の (a/L, b/L) の距離(明るさは消える)

設定メニューの並びは P、A、Ch の順(保存される値もこの順)である。

6-1. 混同色線

型に対応する錐体(1 型は L、2 型は M、3 型は S)の応答だけが違う 2 つの色は、その人には区別しにくい。LMS の空間では、この 2 色は、その錐体の軸に平行な直線の上に並ぶ。この直線が混同色線である。XYZ の空間では、混同色線の方向は、その錐体だけを刺激する色 e\mathbf{e}、すなわち式 (12) の対応する列である。

eL=(−1.748709, −0.276700, −0.086366)T,eM=(−1.015523, −0.683634, −0.112329)T,eS=(−0.217270, −0.039665, −1.115021)T(22)\begin{aligned} \mathbf{e}_{\mathrm{L}}&=(\phantom{-}1.748709,\ \phantom{-}0.276700,\ \phantom{-}0.086366)^{\mathsf T},\\ \mathbf{e}_{\mathrm{M}}&=(-1.015523,\ \phantom{-}0.683634,\ -0.112329)^{\mathsf T},\\ \mathbf{e}_{\mathrm{S}}&=(\phantom{-}0.217270,\ \phantom{-}0.039665,\ \phantom{-}1.115021)^{\mathsf T} \end{aligned} \tag{22}

e\mathbf{e} の色度(式 (16))を共点と呼ぶ。混同色線は、色度図 u′v′u'v' の上で、共点を通る直線になる。共点は、1 型(L)(1.1358, 0.4044)(1.1358,\,0.4044)、2 型(M)(−0.4563, 0.6912)(-0.4563,\,0.6912)、3 型(S)(0.2090, 0.0859)(0.2090,\,0.0859) である。1 型と 2 型の共点は色度図の外の遠くにあり、混同色線はほぼ平行に並ぶ。3 型の共点は色度図の下にあり、混同色線は放射状に広がる(図 1)。

6-2. 色知覚平面

混同色線の全体を、1 枚の平面で代表させる。これが色知覚平面(Viénot ら 1999 の単一平面 [15])である。原点(黒)を通り、1 型・2 型は表示の白・青・黄を通る平面、3 型は白・赤・シアンを通る平面である。平面は表示の色域(sRGB か Display P3 か)から決まり、錨刺激の波長には依らない。法線 n\mathbf{n} は、表示の白 W\mathbf{W} と、青(1 型・2 型)または赤(3 型)の原色 B\mathbf{B}・R\mathbf{R}(式 (5)(7) の MM の列)の外積である。

n={W×B(1 型・2 型)W×R(3 型)(23)\mathbf{n}=\begin{cases} \mathbf{W}\times\mathbf{B} & (\text{1 型・2 型})\\ \mathbf{W}\times\mathbf{R} & (\text{3 型}) \end{cases} \tag{23}

sRGB の値は、1 型・2 型 n=(0.8719106, −0.7068849, −0.1118652)\mathbf{n}=(0.8719106,\,-0.7068849,\,-0.1118652)、3 型 n=(−0.2122453, 0.4307443, −0.2102868)\mathbf{n}=(-0.2122453,\,0.4307443,\,-0.2102868) である。Display P3 は、1 型・2 型が (0.9575963, −0.7763530, −0.1228586)(0.9575963,\,-0.7763530,\,-0.1228586)、3 型が (−0.2493665, 0.5299039, −0.2689407)(-0.2493665,\,0.5299039,\,-0.2689407) である。

どの色 c\mathbf{c}(XYZ)も、混同色線に沿って(e\mathbf{e} の方向に)この平面へ動かすと、その人に同じに見える色 c′\mathbf{c}' になる。

s=n⋅cn⋅e,c′=c−s e(24)s=\frac{\mathbf{n}\cdot\mathbf{c}}{\mathbf{n}\cdot\mathbf{e}},\qquad \mathbf{c}'=\mathbf{c}-s\,\mathbf{e} \tag{24}

ss は、c\mathbf{c} が平面からどれだけ離れているか(符号つき。赤側が ++)を表す。平面の上の色(白・青・黄など)は s=0s=0。c\mathbf{c} と c′\mathbf{c}' の差は、その人が区別しにくい違いの大きさなので、これを軸にすれば、その人が見分けにくい色を並べられる。LMS の上では e\mathbf{e} は軸の単位ベクトルなので、c′\mathbf{c}' は、c\mathbf{c} の LMS の型に対応する成分から ss を引いた色である。

図 1: 混同色線(灰色)と色知覚平面の跡(橙の直線)
図 1: 混同色線(灰色)と色知覚平面の跡(橙の直線)。左から 1 型・2 型・3 型。例の色 c\mathbf{c} から、混同色線に沿って平面へ動かした先が c′\mathbf{c}' で、その人には c\mathbf{c} と同じに見える。1 型の混同色線はほぼ水平、2 型は右下がり、3 型は下の 1 点(共点)から放射状に広がる。

6-3. 色度角度方式(P)

色度図 u′v′u'v' の上に扇の中心 (U0,V0)(U_0,V_0) を置き、色の角度から軸を作る。

P=−atan2⁡(v′−V0,  u′−U0)−θmin⁡θw(25)P=\frac{-\operatorname{atan2}(v'-V_0,\;u'-U_0)-\theta_{\min}}{\theta_{w}} \tag{25}

扇の中心は、色知覚平面の跡の直線(白と、青の原色(1 型・2 型)または赤の原色(3 型)を通る直線)が、色域の三角形に当たる 2 点 E1\mathbf{E}_1・E2\mathbf{E}_2 から決める。2 点の XYZ(Y=1Y=1)を、和が白に比例する大きさ(s1E1+s2E2=Ws_1\mathbf{E}_1+s_2\mathbf{E}_2=\mathbf{W})に揃え、中心は、s2E2−s1E1s_2\mathbf{E}_2-s_1\mathbf{E}_1 の色度とする(白の調和共役)。

(U0,V0)=色度(s2E2−s1E1),s1E1+s2E2=W(26)\begin{aligned} (U_0,V_0)&=\text{色度}\left(s_2\mathbf{E}_2-s_1\mathbf{E}_1\right),\\ &\quad s_1\mathbf{E}_1+s_2\mathbf{E}_2=\mathbf{W} \end{aligned} \tag{26}

θmin⁡\theta_{\min}・θw\theta_w は、色域の端の角度で、1 型・2 型は赤の原色が P=0P=0、緑の原色が P=1P=1(θmin⁡\theta_{\min} は赤の原色の角度、θw\theta_w は緑と赤の角度の差)、3 型は緑の原色が P=0P=0、青の原色が P=1P=1 になるように決める。白の位置 PwP_w は、白の角度から式 (25) で求める。原点を通る平面は u′v′u'v' の上で直線になるので、等しい PP の線は、扇の中心から伸びる放射状の直線になる。定数は次のとおりである。

色空間型(U₀, V₀)θminθw白の位置 Pw
sRGB1 型・2 型(0.21460, 0.70083)0.645851.499720.66476
sRGB3 型(0.04225, 0.43475)−0.996022.118420.36985
Display P31 型・2 型(0.21771, 0.74397)0.664851.527490.64024
Display P33 型(-0.00798, 0.42887)−0.949261.925010.39473

sRGB の値は、2.21 が直書きしていた値(中心 (0.214608, 0.700833)(0.214608,\,0.700833)・(0.042256, 0.434763)(0.042256,\,0.434763)、θmin⁡=0.64566\theta_{\min}=0.64566・−0.99599-0.99599、θw=1.49993\theta_w=1.49993・2.118362.11836、Pw=0.66478P_w=0.66478・0.369880.36988)と、2.1×10−42.1\times10^{-4} 以内で一致する(2.21 は原色を 4 桁に丸めていた)。1 型と 2 型は同じ扇を使う。同じ色の PP は色空間で変わる(スライダーは、その時の色域に対する比)。

6-4. 色の見え差分方式(A)

式 (24) の c′\mathbf{c}' を使い、c\mathbf{c} と c′\mathbf{c}' の CIELUV の距離を、元の明るさ L∗(c)L^*(\mathbf{c}) で割る。符号は ss に従う。

A=sign⁡(s)  ∥ Luv(c)−Luv(c′) ∥L∗(c)(27)A=\operatorname{sign}(s)\;\frac{\left\|\,\mathrm{Luv}(\mathbf{c})-\mathrm{Luv}(\mathbf{c}')\,\right\|}{L^*(\mathbf{c})} \tag{27}

Luv(⋅)\mathrm{Luv}(\cdot) は、式 (16)〜(19) による (L∗,u∗,v∗)(L^*,u^*,v^*) である(白は表示の白)。c\mathbf{c} と c′\mathbf{c}' の明るさ(L∗L^*)の差も距離に入るので、AA は明るさにわずかに依る(青紫の側で差が出る)。

6-5. 色度差分方式(Ch)

Oklab(式 (20))の a,ba,b を LL で割った (a/L, b/L)(a/L,\,b/L) の距離を使う。

Ch=sign⁡(s)  ∥ (aL,bL)(c)−(aL,bL)(c′) ∥(28)C_h=\operatorname{sign}(s)\;\left\|\,\left(\tfrac aL,\tfrac bL\right)(\mathbf{c})-\left(\tfrac aL,\tfrac bL\right)(\mathbf{c}')\,\right\| \tag{28}

§5-3 のとおり a/La/L と b/Lb/L は明るさに依らないので、ChC_h は色度だけで決まる(明るさ YY を 0.001〜3 に変えても、値の差は 1.7×10−151.7\times10^{-15} である)。なお、混同色線は式 (22) の錐体の方向で決め、Oklab は距離を測るものさしとしてだけ使う。

A と Ch の違いは、距離を測るものさしだけである。どちらの座標も、§6-7 の式 (30) で PP 相当に変換してから、式 (29) のゾーンと比べる。

6-6. 色度図の上の境目

3 方式が、色度図の上でゾーンの境目をどこに引くかを並べる。

図 2: 2 型・sRGB で、等しい P の線を 0.1 刻みで描いた
図 2: 2 型・sRGB で、等しい PP の線を 0.1 刻みで描いた。赤い線が P=0P=0(赤の原色)、緑の線が P=1P=1(緑の原色)、青い破線が白の両側 ±0.05\pm0.05(§7-4)。橙の面は、スライダーの 0.6〜1.0(P=0∼0.4P=0\sim0.4)が指す色度の領域。A 方式の線は明るさで少し動くので、明るさ Y=0.3Y=0.3 で描いた。
  • 色度角度方式(左): 扇の中心から放射状に伸びる直線。
  • 色の見え差分方式(中): ほぼ平行な曲線。ゾーンは、赤から緑へ縦の帯が移るように動く。
  • 色度差分方式(右): 色域の中では扇に近い曲線。青の近くで線が横へ折れる。

同じスライダーの値でも、方式によって指す色が違う。図 9(§11)で、同じ値で方式だけを替えた結果を見られる。

6-7. ゾーンとスライダーの値

スライダーの値 ss と軸 PP の関係は 2.21 のまま、s=1−Ps=1-P(左端 00 が緑の原色、右端 11 が赤の原色。3 型は左が青、右が緑)である。ゾーンは、開始 aZa_Z(スライダーの値)と幅 ww から、

P∈[Ps, Pe),Ps=(1−aZ)−w2,Pe=(1−aZ)+w2(29)P\in[P_s,\,P_e),\qquad P_s=(1-a_Z)-\frac w2,\quad P_e=(1-a_Z)+\frac w2 \tag{29}

で、色の PP がこの範囲に入るときゾーンの内とする。「反転」が入のときは、内と外を入れ替える。w=0w=0 は、ゾーンの切(何も変えない)である。

色度角度方式では、式 (25) の PP をそのまま使う。A・Ch の座標 xx(式 (27)(28))は、表示の原色そのもの(最大の明るさ)を基準に、PP へ線形に変換する。

P=a+b x(30)P=a+b\,x \tag{30}

a,ba,b は、赤・緑の原色(3 型は緑・青の原色)の座標 xlo,xhix_{\mathrm{lo}},x_{\mathrm{hi}} が P=0, 1P=0,\,1 になるように、b=1xhi−xlob=\dfrac{1}{x_{\mathrm{hi}}-x_{\mathrm{lo}}}、a=−xlo ba=-x_{\mathrm{lo}}\,b と決める。白は平面の上にあるので x=0x=0 で、白の位置は Pw=aP_w=a になる。1 型・2 型は、sRGB と Display P3 で式 (24) の n/(n⋅e)\mathbf{n}/(\mathbf{n}\cdot\mathbf{e}) が同じで、判定の式は色空間を切り替えても変わらない(変わるのは a,ba,b だけ)。3 型は、平面が赤の原色を通るので、色空間で値が違う。値は次のとおりである。

型色空間方式原色の座標(赤、緑、青)a(白の Pw)b白のスライダーの値 1 − a
1 型sRGBCh+0.4503, −0.1997, 00.6927−1.53850.307
1 型sRGBA+3.2355, −1.0345, 00.7577−0.23420.242
2 型sRGBCh−0.4557, +0.2067, 00.68791.50970.312
2 型sRGBA−3.2889, +1.0558, 00.75700.23020.243
3 型sRGBCh0, −0.2753, +0.78440.25980.94360.740
3 型sRGBA0, −1.3981, +3.90900.26340.18840.737
1 型Display P3Ch+0.5228, −0.2763, 00.6542−1.25140.346
1 型Display P3A+3.8289, −1.3924, 00.7333−0.19150.267
2 型Display P3Ch−0.5133, +0.2824, 00.64511.25680.355
2 型Display P3A−3.8833, +1.4179, 00.73250.18860.268
3 型Display P3Ch0, −0.3309, +0.79290.29440.88990.706
3 型Display P3A0, −1.6395, +3.94500.29360.17910.706

色度角度方式の白の位置は、式 (25) の PwP_w(§6-3 の表)である。色域の中の PP は、ほぼ 00〜11 に収まる(Ch は端が原色に一致するので 00〜11 のちょうど。A は 2 型で −0.013-0.013〜1.0011.001)。範囲の外は、切らずにそのまま式 (29) と比べる。

図 3: 同じ色がスライダーのどこに並ぶか(2 型・sRGB)
図 3: 同じ色がスライダーのどこに並ぶか(2 型・sRGB)。端の赤と緑は 3 方式で一致するが、途中の色は方式によってずれる。たとえば橙は、色度角度方式で 0.77、色度差分方式で 0.68、色の見え差分方式で 0.60。黄と青は、どの方式でも白と同じ位置に来る(色知覚平面の上の色だから)。
  • 赤・緑・青の原色の位置は 3 方式で一致するので、スライダーの両端は同じ意味になる。
  • 保存された値(ゾーンの開始・幅)は、方式を切り替えると、同じ値で別の色の範囲を指す。
  • A の対応は、原色(最大の明るさ)での値なので、暗い色では対応がずれる(A が明るさに依るため)。Ch はずれない。

座標の均等さ。1 型・sRGB で、混同色線に沿って色を動かしたとき、座標の 1 単位あたりの Oklab 距離を、白を 1 として並べた比(7 色: 白・灰・肌・黄・青緑・青・暗い赤)は、最大÷最小が P で 4.2、Ch で 2.7、A で 4.8 だった。Ch は、青の幅を抑える(青の値は P 2.35、Ch 0.53、A 1.18)。測った色は 7 色、1 型だけである。

7. 色の変え方(色を見分ける・色を見つける共通)

ゾーン(または探す色の円)に入った色は、CIELUV の空間で動かし、色度図の上で色域の三角形に収め、表示の色域に切って戻す。

7-1. 混同色線の方向 nL\mathbf{n}_{\mathrm{L}}(CIELUV)

変える方向は、その人が区別しにくい違いとは別の方向に取る。まず、その色の混同色線の CIELUV の中での方向を求める。色 q\mathbf{q}(LMS)の型に対応する錐体の成分を 00 にした色 q0\mathbf{q}_0 と、q\mathbf{q} の CIELUV(式 (16)〜(19)。LMS は式 (12) で XYZ に戻す)の差を、正規化する。

nL=σ(Luv(q)−Luv(q0))∥Luv(q)−Luv(q0)∥,σ={+1(1 型・3 型)−1(2 型)(31)\begin{aligned} \mathbf{n}_{\mathrm{L}}&=\frac{\sigma\left(\mathrm{Luv}(\mathbf{q})-\mathrm{Luv}(\mathbf{q}_0)\right)}{\left\|\mathrm{Luv}(\mathbf{q})-\mathrm{Luv}(\mathbf{q}_0)\right\|},\\[3mm] \sigma&=\begin{cases}+1&(\text{1 型・3 型})\\-1&(\text{2 型})\end{cases} \end{aligned} \tag{31}

符号 σ\sigma は、2.21 と同じである。白(q=(1,1,1)\mathbf{q}=(1,1,1))での値は、1 型 (0.0234, 0.9974, −0.0680)(0.0234,\,0.9974,\,-0.0680)、2 型 (−0.0754, 0.9439, −0.3215)(-0.0754,\,0.9439,\,-0.3215)、3 型 (0.0115, 0.0293, −0.9995)(0.0115,\,0.0293,\,-0.9995) である(2.21 の錐体では (0.0293, 0.9992, −0.0262)(0.0293,\,0.9992,\,-0.0262)・(−0.0643, 0.9586, −0.2773)(-0.0643,\,0.9586,\,-0.2773)・(0, 0.1154, −0.9933)(0,\,0.1154,\,-0.9933) だった)。差が 00 に近い(<10−12<10^{-12})ときは (1,0,0)(1,0,0) とする。

7-2. 回転

L∗L^* 軸 (1,0,0)(1,0,0) を nL=(n1,n2,n3)\mathbf{n}_{\mathrm{L}}=(n_1,n_2,n_3) に写す回転を、ρ=n22+n32\rho=\sqrt{n_2^2+n_3^2}、c=n3/ρc=n_3/\rho、t=n2/ρt=n_2/\rho、ς=1−n12\varsigma=\sqrt{1-n_1^2} として、次の行列で与える(行ベクトルに右から掛ける: v↦vR\mathbf{v}\mapsto\mathbf{v}R)。

R=(n1ςtςc0c−t−ςn1tn1c)(32)R=\begin{pmatrix} n_1 & \varsigma t & \varsigma c\\ 0 & c & -t\\ -\varsigma & n_1 t & n_1 c \end{pmatrix} \tag{32}

ρ<10−12\rho<10^{-12} のときは、c=1c=1、t=0t=0 とする(2.21 はこのとき 0 で割って値が不定になる)。

7-3. 通常法: 混同色線に垂直な面の円

変化のベクトル(CIELUV)は、次の式で与える。

Δ=f⋅100⋅(0,  cos⁡θ,  sin⁡θ) R,θ=2π(1−age)+(1.5−g)π(33)\begin{aligned} \Delta&=f\cdot100\cdot(0,\;\cos\theta,\;\sin\theta)\,R,\\ \theta&=2\pi(1-\mathrm{age})+\left(1.5-g\right)\pi \end{aligned} \tag{33}

変えた色は (L∗,u∗,v∗)+Δ(L^*,u^*,v^*)+\Delta である。(0,cos⁡θ,sin⁡θ)(0,\cos\theta,\sin\theta) は L∗L^* 軸に垂直な円で、RR で nL\mathbf{n}_{\mathrm{L}} に垂直な面へ回すので、Δ\Delta は nL\mathbf{n}_{\mathrm{L}} と直交する。混同色線に沿った成分は変わらず、その人が区別できる差だけが増える。

  • 半径 =f⋅100=f\cdot100: 変化の大きさ ff(2 次元スライダーの中心からの距離、00〜0.50.5)。2.21 の定数 100100 のまま。
  • 角度 θ\theta: 色の回転 age\mathrm{age}(2 次元スライダーの角度。真上が 00、時計回りに 1 周)。
  • gg: 緑側の反転(§7-4)。g=0g=0 または 11。
図 4: CIELUV の空間での変化
図 4: CIELUV の空間での変化。3 つの色(赤紫・緑・青)の、大きい丸が元の色。赤い線が 1 型、緑の線が 2 型の混同色線で、その色を通る。丸の輪が、それぞれの混同色線に垂直な面の円(半径 = 変化の大きさ 0.35 × 100)で、1 型の円は赤、2 型の円は緑の縁で描いた。円の上には、色の回転を 36 等分した変えた色を、アプリの表示色で塗って置いた。型が違うと混同色線の向きが違うので、円の面も違う。離れた小さい丸は sRGB の立方体の頂点(白・黒・赤・緑・青・シアン・マゼンタ・黄)。

2 次元スライダー(円形)は、中心からの距離が変化の大きさ ff、角度が色の回転 age\mathrm{age} を決める。同じ位置でも、元の色によって変化の仕方が違う。

図 5: 円盤の中心の色を、円盤の各点の設定(距離 f、角度 \mathrm{age})で変えた結果(2 型)
図 5: 円盤の中心の色を、円盤の各点の設定(距離 ff、角度 age\mathrm{age})で変えた結果(2 型)。円盤の上半分は明るく、下半分は暗くなる。age\mathrm{age} 0.25 の側(右)は黄・橙、0.75 の側(左)は赤紫・青緑へ動く。

7-4. 緑側の π\pi ずらしと無彩色の帯

緑側の反転。「赤緑反転」が入のとき、白の位置 PwP_w より緑側(P>PwP>P_w)の色は g=1g=1 にして、式 (33) の角度を π\pi ずらす。赤側の色と緑側の色が反対の向きへ動き、変えた後も赤側と緑側の区別がつく。ブーストでは、輪を 2 節ずらして使う(§7-5)。PwP_w は、方式ごとの白の位置(§6-3、§6-7)である。

無彩色の帯。白に近い色(灰色・白い背景)は、色味を持たないので変えたくない。「無彩色を残す」が入のとき、PP が白の位置の両側 Pw±0.05P_w\pm0.05 の中にある色は、ゾーンに入っていても変化を 00 にする(2.21 の帯の幅 0.10.1 の半分)。

feff={0(∣P−Pw∣≤0.05 かつ「残す」が入)fそれ以外(34)f_{\mathrm{eff}}=\begin{cases}0 & (|P-P_w|\le0.05\ \text{かつ「残す」が入})\\ f & \text{それ以外}\end{cases} \tag{34}

±0.05\pm0.05 の見た目の幅は方式で違う(A・Ch は P より青・赤の側が広い)。

図 6: ゾーンの位置 P の軸(色度角度方式・2 型)
図 6: ゾーンの位置 PP の軸(色度角度方式・2 型)。橙の帯がゾーン、青の帯が無彩色の帯、緑の矢印が緑側の π\pi ずらしの範囲。黄は色知覚平面の上の色なので、白と同じ位置に来る。

7-5. ブースト法

ブーストが入のとき(色を見分けるだけ)、式 (33) の円の代わりに、輪の上の目標の色へ近づける。輪は 4 つの節(白 → 575 nm の黄 → 黒 → 475 nm の青。3 型は 660 nm の赤・485 nm の青緑)を順に結ぶ。節は u′v′Yu'v'Y(式 (16))で与え、錨刺激の XYZ は、CIE 1964 10° の等色関数(JIS Z 8701 付表 2 [9])の値 (xˉ10,yˉ10,zˉ10)(\bar x_{10},\bar y_{10},\bar z_{10}) を用いる。

錨刺激(x̄₁₀, ȳ₁₀, z̄₁₀)節の (u′, v′, Y)
575 nm(0.9512, 0.9152, 0.0000)(0.25920, 0.56112, 0.9152)
475 nm(0.1323, 0.2199, 1.0302)(0.08115, 0.30348, 0.2199)
660 nm(0.1526, 0.0603, 0.0000)(0.57743, 0.51339, 0.0603)
485 nm(0.0411, 0.2977, 0.5701)(0.02644, 0.43097, 0.2977)
白—(0.19783, 0.46832, 1)
黒—(0.19783, 0.46832, 0)

節の CIELUV(式 (18)(19))は、1 型・2 型で、白 (100, 0, 0)(100,\,0,\,0)、575 nm (96.62, 77.08, 116.57)(96.62,\,77.08,\,116.57)、黒 (0, 0, 0)(0,\,0,\,0)、475 nm (54.02, −81.94, −115.75)(54.02,\,-81.94,\,-115.75)、3 型で、白 (100, 0, 0)(100,\,0,\,0)、660 nm (29.49, 145.52, 17.28)(29.49,\,145.52,\,17.28)、黒 (0, 0, 0)(0,\,0,\,0)、485 nm (61.46, −136.92, −29.84)(61.46,\,-136.92,\,-29.84) である。2.21 は黒の節に L∗=−16L^*=-16 を使っていた。

節を r0,r1,r2,r3\mathbf{r}_0,\mathbf{r}_1,\mathbf{r}_2,\mathbf{r}_3(CIELUV)とし、age\mathrm{age} を 4 倍した値 4 age4\,\mathrm{age} の整数部 kk(0≤k≤30\le k\le3)が節、小数部 ϕ\phi が節の間の位置とする。目標の色 t\mathbf{t} と変えた色は、

t=(1−ϕ) r(k+2g) mod 4+ϕ r(k+1+2g) mod 4,Luvnew=Luv+(t−Luv)⋅2feff(35)\begin{aligned} \mathbf{t}&=(1-\phi)\,\mathbf{r}_{(k+2g)\bmod 4}+\phi\,\mathbf{r}_{(k+1+2g)\bmod 4},\\ \mathrm{Luv}_{\mathrm{new}}&=\mathrm{Luv}+\left(\mathbf{t}-\mathrm{Luv}\right)\cdot2f_{\mathrm{eff}} \end{aligned} \tag{35}

である(Luv\mathrm{Luv} は元の色の CIELUV)。変化の大きさ f=0.5f=0.5 で目標に着く。2 次元スライダーの上限が 0.50.5 なので、目標を通り過ぎることはない(0.50.5 を超えると外挿するが、画面からは来ない)。緑側(g=1g=1)は、輪を 2 節ずらして使う。

図 7: 左は輪の 4 つの節
図 7: 左は輪の 4 つの節。右は age\mathrm{age} を 00 から 11 まで動かしたときの目標の色(上が赤側、下が緑側)。緑側は、赤側を半周ずらした並びになる。

7-6. 色域への収め

変えた色の CIELUV を u′v′Yu'v'Y(式 (19) の逆)に戻し、色度 u1=(u′,v′)\mathbf{u}_1=(u',v') が表示の色域の三角形(§5-4)から外れるときは、元の色の色度 u0\mathbf{u}_0 から u1\mathbf{u}_1 へ向かう線分が、三角形の境界に達する点で止める。三角形の辺 ii(頂点 ai\mathbf{a}_i・ai+1\mathbf{a}_{i+1})について、内側を正とする符号つき距離を

di(p)=ϖ[(ai+1,u−ai,u)(pv−ai,v)−(ai+1,v−ai,v)(pu−ai,u)](36)d_i(\mathbf{p})=\varpi\left[(a_{i+1,u}-a_{i,u})(p_v-a_{i,v})-(a_{i+1,v}-a_{i,v})(p_u-a_{i,u})\right] \tag{36}

とする(ϖ=±1\varpi=\pm1 は、三角形の向き)。f0=max⁡(di(u0),0)f_0=\max(d_i(\mathbf{u}_0),0)、f1=di(u1)f_1=d_i(\mathbf{u}_1) として、f1<0f_1<0 となる辺のうち、ti=f0/(f0−f1)t_i=f_0/(f_0-f_1) が最小のものを採り(外れる辺が無ければ t=1t=1)、

u=u0+(u1−u0) t,Y=clip[0,1](Y1)(37)\begin{aligned} \mathbf{u}&=\mathbf{u}_0+(\mathbf{u}_1-\mathbf{u}_0)\,t,\\ Y&=\mathrm{clip}_{[0,1]}(Y_1) \end{aligned} \tag{37}

を変えた色の色度と明るさとする。2.21 は、元の色が辺の上(飽和した色)にあるとき、辺との交差の判定(符号の積)が丸めで決まり、単精度と倍精度で答えが割れた。この式は、元の色の距離を 00 以上に切ってから tt を求めるので、精度に依らず同じ答えを与える(一般の色では 2.21 と同じ)。

その後、変えた色の XYZ(式 (17))から表示の線形 RGB(式 (6)(8))を求め、成分ごとに 00〜11 に制限して、符号化する(式 (2))。

(R′G′B′)=clip[0,1] ⁣(Mout−1 cnew),V′=式 (2) を R′,G′,B′ に適用(38)\begin{aligned} \begin{pmatrix}R'\\G'\\B'\end{pmatrix}&=\mathrm{clip}_{[0,1]}\!\left(M_{\mathrm{out}}^{-1}\,\mathbf{c}_{\mathrm{new}}\right),\\ V'&=\text{式 (2) を }R',G',B'\text{ に適用} \end{aligned} \tag{38}

色相を保つ収め方(色度を保って明るさを落とす)は採っていない(色のシミュレータの強度の混合と同じ、成分ごとの制限である)。

8. 色を見つける

色を見つけるは、探す色に近い色だけを変える。見分けにくい色の中から、特定の色(たとえば熟した赤い実)を探したいときに使う。ゾーンの軸 PP は使わず、色度図 u′v′u'v' の上の距離で決める。

8-1. 探す色

探す色は、次のどちらかで決まる。

  • 画像の上をタップして、カーソルを置く。カーソルの下の色(周りの画素をなだらかに平均した色)が探す色になる。
  • 基本 11 色の帯(N・R・YR・Y・GY・G・BG・B・PB・P・RP のマンセルの記号の色)から選ぶ。カーソルがその色票の真ん中へ移り、その色が探す色になる。

探す色(取り込みの符号化値 cs\mathbf{c}_s)は、式 (1)・(5) または (7)・(16) で、色度 s=(us′,vs′)\mathbf{s}=(u'_s,v'_s) にする。明るさは見ないので、同じ色味の明るい所も暗い所も同じに探せる。

8-2. 範囲と変え方

画素の色度 (u′,v′)(u',v') が、探す色の色度から近いとき、その画素を変える。

(u′−us′)2+(v′−vs′)2  <  wS⋅0.1(39)\sqrt{(u'-u'_s)^2+(v'-v'_s)^2}\;<\;w_S\cdot0.1 \tag{39}

wSw_S は範囲のスライダー(半径の設定。0.50.5 を中心に左右対称で、距離だけが変わる)の値で、00〜11。幅 11 のとき、u′v′u'v' の距離 0.10.1(2.21 と同じ値)までの色が入る。式 (39) を満たす画素は、§7-3 の通常法(式 (33))で、変化の大きさ ff(2 次元スライダーの距離)と色の回転 age\mathrm{age}(同じ角度)に従って変える。満たさない画素は変えない。

  • 探索では、緑側の π\pi ずらし(§7-4)、無彩色の帯(§7-4)、ブースト(§7-5)は使わない(2.21 と同じ。ブーストは色を見分けるだけ)。
  • 範囲の円は色度図の上の円なので、探す色が白に近いと、白に近い無彩色や薄い色が円に入る。
図 8: 探す色(赤い実の色)の周りの、色度図 u'v' の上の円
図 8: 探す色(赤い実の色)の周りの、色度図 u′v′u'v' の上の円。幅 0.2・0.5・1.0 が、距離 0.02・0.05・0.10 の円になる。円の中の色が変わる。橙は幅 0.5 の円のすぐ外にある。

9. シミュレーションと色名の表示

シミュレーションは、色の見分けにくい人(1 型・2 型・3 型)に画像がどう見えるかを、色のシミュレータ 4.0 と同じ方法で模擬する。式・定数は同じで、色のシミュレータ 4.0 の理論の頁の §5 に、半平面の係数(式 (17)〜(20))、境界の連続、強度による混合(Oklab での補間)、色域の制限が書いてある。要点を述べる。

  • 画素の色を LMS 空間に写し、型に対応する錐体の成分を、2 枚の半平面(Brettel らの折れ平面 [1])の上へ射影する(1 型・2 型は 475 nm・575 nm、3 型は 485 nm・660 nm の錨刺激)。
  • 強度 kk(00〜11)で、元の色との間を、Oklab 上で ok=(1−k) o(q)+k o(qs)\mathbf{o}_k=(1-k)\,\mathbf{o}(\mathbf{q})+k\,\mathbf{o}(\mathbf{q}_s) と補間する(両端は、先に表示の色域に制限する)。これは、もっとも強度の 2 色覚と元の画像の中間の画像を表示するだけであり、異常 3 色覚(弱度の色覚異常)の色の見え方をシミュレーションするものではない。
  • 表示の色域に収めて、符号化する。

色のめがねでは、模擬は変更の後に行う。「目」のボタンを入にすると、色を見分ける・色を見つけるで変えた色に、模擬を重ねる。変えた色が、その人にどう見えるかを確かめられる。色を変えない状態の模擬は、シミュレーションの機能の画面で行う。

色名の表示(カーソルの下の色の名前)も、色のシミュレータ 4.0 と同じ仕組みである。カーソルの周りの色を平均し、Munsell 値・系統色名・慣用色名を辞書から引く。詳しくは、色のシミュレータ 4.0 の理論の頁の §7 を参照されたい。

10. 全体の変換

符号化された入力 cin\mathbf{c}_{\mathrm{in}} から符号化された出力 cout\mathbf{c}_{\mathrm{out}} への変換は、§2〜§9 の合成として次のように書ける。ゾーンまたは探す色の判定で選ばれた画素だけに、CIELUV での変更が入る。

cout=E ⁣(clip[0,1] ⁣(Mout−1 T ⁣(Min D(cin))))(40)\mathbf{c}_{\mathrm{out}}=\mathcal{E}\!\left(\mathrm{clip}_{[0,1]}\!\left(M_{\mathrm{out}}^{-1}\,\mathcal{T}\!\left(M_{\mathrm{in}}\,\mathcal{D}(\mathbf{c}_{\mathrm{in}})\right)\right)\right) \tag{40}

ここで D\mathcal{D} は復号(式 (1))、E\mathcal{E} は符号化(式 (2))、MinM_{\mathrm{in}}・MoutM_{\mathrm{out}} は入力・表示の RGB → XYZ の行列(式 (5)(7))である。T\mathcal{T} は XYZ の上の変更で、判定(§6 または §8)、CIELUV での変更(§7-3 または §7-5)、色域の三角形への収め(§7-6)、シミュレーション(§9。入のとき)からなる。変更を行わない画素は、T\mathcal{T} が恒等写像となり、元の色に戻る。

11. サンプル画像

被写体はミニトマト(サイトの元の画像)。すべて 2 型で、図の式と同じ式(アプリの参照実装の写し)で作った。

図 9: **3 方式の違い**
図 9: 3 方式の違い。ゾーンは 0.6〜1.0(開始 0.8・幅 0.4)、変化の大きさ 0.3・色の回転 0 で、同じ値のまま方式だけを替えた。上段はゾーンに入った所(明るく残した所)。同じ値でも、ゾーンに入る実の範囲が方式で違う。下段が色を変えた結果。
図 10: **色の回転**
図 10: 色の回転。上段が通常法、下段がブースト法。色の回転を 0・0.25・0.5・0.75 に動かすと、通常法は、赤い実が淡い桃色 → 橙 → 暗い赤褐色 → 赤紫へ回る。ブースト法は、同じ回転で白 → 黄 → 黒 → 青の輪の上の色へ寄る。
図 11: **無彩色の帯と緑側の反転**
図 11: 無彩色の帯と緑側の反転。ゾーンを全域(0〜1)にして、変化の大きさ 0.4 で変えた。「帯なし」は白い背景も色づく。「無彩色を残す」を入にすると、白い背景は元のままで、色のある実だけが変わる。「緑側を π\pi ずらす」だけでは、白よりわずかに緑側の背景が暗く変わる。「残す」と「π\pi ずらす」の両方を入にすると、背景はそのまま、緑の実だけが赤い実と反対の向き(暗い方)へ動く。
図 12: **色を見つける**
図 12: 色を見つける。探す色を赤い実の 1 点の色にして、範囲(幅)を 0.2・0.5・1.0 に変えた(変化の大きさ 0.3・色の回転 0)。上段は円に入った所。幅が広がるほど、赤い実の暗い所・橙の実へ範囲が広がる。下段が色を変えた結果。円の外の色は変わらない。

参考文献

[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 (appendix: mathematical expressions for color vision simulation), GitHub repository asada0/ChromaticVisionSimulator, 2018, MIT License.

[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.

[4] SMPTE EG 432-1:2010, Digital Source Processing — Color Processing for D-Cinema, Society of Motion Picture and Television Engineers, 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, 2022. https://registry.color.org/rgb-registry/displayp3

[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 (u′v′u'v'、CIELUV を含む)。

[8] G. Wyszecki and W. S. Stiles, Color Science: Concepts and Methods, Quantitative Data and Formulae, 2nd ed., John Wiley & Sons, 1982.

[9] JIS Z 8701:1999, 色の表示方法 — XYZ 表色系及び X10Y10Z10 表色系, 日本規格協会, 1999. 付表 2(X10Y10Z10 表色系のスペクトル色度座標。10° の錨刺激の出典)。

[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. doi:10.1002/9781118653128

[12] C. Poynton, Digital Video and HD: Algorithms and Interfaces, 2nd ed., Morgan Kaufmann, 2012.

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

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

[15] F. Viénot, H. Brettel, and J. D. Mollon, "Digital video colourmaps for checking the legibility of displays by dichromats", Color Research & Application, vol. 24, no. 4, pp. 243–252, 1999.