色 \(\mathcal{C}\) の色相 \(h \:(0 \le h \lt 360)\)、円柱モデルの彩度 \(s\)、円錐モデルの彩度 \(s'\)、輝度 \(l \:(0 \le s,s',l \le 1)\)、赤緑青とその最小値・最大値 \(r,g,b,L,U \:(0 \le r,g,b,L,U \le 1)\) とすると、 \[L = \min\left\{r, g, b\right\},\quad U = \max\left\{r, g, b\right\},\] \[s = \dfrac{U - L}{1 - |U + L - 1|},\quad s' = U - L,\] \[l = \dfrac{U + L}{2}.\]
ちなみに、\(s\) と \(s'\) つまり円柱モデルと円錐モデルの関係はここで得られる。 \[s = \dfrac{s'}{1 - |U + L - 1|}.\]
さらに、以下のように場合分けをする。 \[j = \begin{cases} 1 &\text{ if \(L = r\) or \(L = r = g\) or \(L = r = b\)},\\ 2 &\text{ if \(L = g\) or \(L = g = b\) or \(L = g = r\)},\\ 0 &\text{ if \(L = b\) or \(L = b = r\) or \(L = b = g\)},\\ \text{undefined} &\text{ otherwise}. \end{cases}\] すると、以下のように HSL 色空間モデルの値を求めることができる。 \[h = \begin{cases} 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(j = 0\)},\\ 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(j = 1\)},\\ 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(j = 2\)},\\ 360 &\text{ otherwise}. \end{cases}\] \(h = 360\) は定義域外、つまり、\(L = U\) のときゼロ除算となる未定義の意味をなしている。
この式の意味は、 \(j = 0\) のときは \(60\degree\) を中心に \(r \gt g\) なら \(0\degree\) 方向に、\(r \lt g\) なら \(120\degree\) 方向に、 \(j = 1\) のときは \(180\degree\) を中心に \(g \gt b\) なら \(120\degree\) 方向に、\(g \lt b\) なら \(240\degree\) 方向に、 \(j = 2\) のときは \(300\degree\) を中心に \(b \gt r\) なら \(240\degree\) 方向に、\(b \lt r\) なら \(360\degree\) 方向に、差からの割合で色相をずらすことを表している。
補色 \(\bar{\mathcal{C}}\) の HSL を \(\mathcal{C}\) の HSL で以下のように定義することができる。 \[ \bar{h} = h + 180 \mod 360, \quad \bar{s} = s, \quad \bar{s'} = s', \quad \bar{l} = l. \]
補色 \(\bar{\mathcal{C}}\) の RGB 値 \(\bar{r}, \bar{g}, \bar{b}\) は色相を求めなくても以下のように得ることができる。 \[\left(\;\begin{align*} \bar{r} &= U + L - r,\\ \bar{g} &= U + L - g,\\ \bar{b} &= U + L - b. \end{align*}\right.\]
確かに、色 \(\bar{\mathcal{C}}\) として \(\bar{r}, \bar{g}, \bar{b}\) を代入すると、以下が成り立っていることがわかる。 \[\bar{L} = \min\left\{\bar{r}, \bar{g}, \bar{b}\right\} = \min\left\{U + L - r, U + L - g, U + L - b\right\} = U + L - U = L,\] \[\bar{U} = \max\left\{\bar{r}, \bar{g}, \bar{b}\right\} = \max\left\{U + L - r, U + L - g, U + L - b\right\} = U + L - L = U,\] \[\begin{align*}\bar{h} &= \begin{cases} 60\left(\dfrac{\bar{g} - \bar{r}}{\bar{U} - \bar{L}} + 1\right) = 60\left(\dfrac{U + L - g - (U + L) + r}{U - L} + 1\right) = 60\left(\dfrac{r - g}{U - L} + 1\right) &\text{ if \(\bar{j} = 0\)},\\ 60\left(\dfrac{\bar{b} - \bar{g}}{\bar{U} - \bar{L}} + 3\right) = 60\left(\dfrac{U + L - b - (U + L) + g}{U - L} + 3\right) = 60\left(\dfrac{g - b}{U - L} + 3\right) &\text{ if \(\bar{j} = 1\)},\\ 60\left(\dfrac{\bar{r} - \bar{b}}{\bar{U} - \bar{L}} + 5\right) = 60\left(\dfrac{U + L - r - (U + L) + b}{U - L} + 5\right) = 60\left(\dfrac{b - r}{U - L} + 5\right) &\text{ if \(\bar{j} = 2\)}. \end{cases}\end{align*}\]
ここから \(\bar{h} = h + 180 \mod 360\) を導出する(前項の符号が反転していることと \(+180\) されることの関係を説明する)には少々面倒で、まず、先の場合分けを細分化する必要がある。 \[h(r,g,b,k) = \begin{cases} 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = r\), \(L = b\) or \(L = b = g\) and \(k = 0\)},\\ 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = g\), \(L = b\) or \(L = b = r\) and \(k = 1\)},\\ 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = g\), \(L = r\) or \(L = r = b\) and \(k = 2\)},\\ 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = b\), \(L = r\) or \(L = r = g\) and \(k = 3\)},\\ 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = b\), \(L = g\) or \(L = g = r\) and \(k = 4\)},\\ 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = r\), \(L = g\) or \(L = g = b\) and \(k = 5\)}. \end{cases}\] 補色 \(\bar{\mathcal{C}}\) の RGB 値 \(\bar{r}, \bar{g}, \bar{b}\) をこの細分化した場合分けの式に代入すると、 \[\begin{align*}\bar{h}(\bar{r},\bar{g},\bar{b},\bar{k}) &= \begin{cases} 60\left(\dfrac{\bar{b} - \bar{g}}{\bar{U} - \bar{L}} + 3\right) &\text{ if \(\bar{U} = \bar{b}\) or \(\bar{U} = \bar{b} = \bar{g}\), \(\bar{L} = \bar{r}\) and \(\bar{k} = 3\)},\\ 60\left(\dfrac{\bar{r} - \bar{b}}{\bar{U} - \bar{L}} + 5\right) &\text{ if \(\bar{U} = \bar{b}\) or \(\bar{U} = \bar{b} = \bar{r}\), \(\bar{L} = \bar{g}\) and \(\bar{k} = 4\)},\\ 60\left(\dfrac{\bar{r} - \bar{b}}{\bar{U} - \bar{L}} + 5\right) &\text{ if \(\bar{U} = \bar{r}\) or \(\bar{U} = \bar{r} = \bar{b}\), \(\bar{L} = \bar{g}\) and \(\bar{k} = 5\)},\\ 60\left(\dfrac{\bar{g} - \bar{r}}{\bar{U} - \bar{L}} + 1\right) &\text{ if \(\bar{U} = \bar{r}\) or \(\bar{U} = \bar{r} = \bar{g}\), \(\bar{L} = \bar{b}\) and \(\bar{k} = 0\)},\\ 60\left(\dfrac{\bar{g} - \bar{r}}{\bar{U} - \bar{L}} + 1\right) &\text{ if \(\bar{U} = \bar{g}\) or \(\bar{U} = \bar{g} = \bar{r}\), \(\bar{L} = \bar{b}\) and \(\bar{k} = 1\)},\\ 60\left(\dfrac{\bar{b} - \bar{g}}{\bar{U} - \bar{L}} + 3\right) &\text{ if \(\bar{U} = \bar{g}\) or \(\bar{U} = \bar{g} = \bar{b}\), \(\bar{L} = \bar{r}\) and \(\bar{k} = 2\)}, \end{cases}\\ &= \begin{cases} 60\left(\dfrac{g - b}{U - L} + 3\right) &\text{ if \(U = U + L - b\;(L = b)\) or \(U = U + L - b = U + L - g\;(L = b = g)\), \(L = U + L - r\;(U = r)\) and \(\bar{k} = 3\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) &\text{ if \(U = U + L - b\;(L = b)\) or \(U = U + L - b = U + L - r\;(L = b = r)\), \(L = U + L - g\;(U = g)\) and \(\bar{k} = 4\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) &\text{ if \(U = U + L - r\;(L = r)\) or \(U = U + L - r = U + L - b\;(L = r = b)\), \(L = U + L - g\;(U = g)\) and \(\bar{k} = 5\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) &\text{ if \(U = U + L - r\;(L = r)\) or \(U = U + L - r = U + L - g\;(L = r = g)\), \(L = U + L - b\;(U = b)\) and \(\bar{k} = 0\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) &\text{ if \(U = U + L - g\;(L = g)\) or \(U = U + L - g = U + L - r\;(L = g = r)\), \(L = U + L - b\;(U = b)\) and \(\bar{k} = 1\)},\\ 60\left(\dfrac{g - b}{U - L} + 3\right) &\text{ if \(U = U + L - g\;(L = g)\) or \(U = U + L - g = U + L - b\;(L = g = b)\), \(L = U + L - r\;(U = r)\) and \(\bar{k} = 2\)}. \end{cases}\end{align*}\]
ちなみに、条件文を \(U, L\) の同値関係が逆転することを見越して多少調整していることに注意。
ここで、条件が一致する場合分けで両者の差をみれば、 \[\begin{align*}\bar{h}(\bar{r},\bar{g},\bar{b},\bar{k}) - h(r,g,b,k) &= \begin{cases} 60\left(\dfrac{g - b}{U - L} + 3\right) - 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = r\), \(L = b\) or \(L = b = g\) and \(\bar{k} = 3, k = 0\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) - 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = g\), \(L = b\) or \(L = b = r\) and \(\bar{k} = 4, k = 1\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) - 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = g\), \(L = r\) or \(L = r = b\) and \(\bar{k} = 5, k = 2\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) - 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = b\), \(L = r\) or \(L = r = g\) and \(\bar{k} = 0, k = 3\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) - 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = b\), \(L = g\) or \(L = g = r\) and \(\bar{k} = 1, k = 4\)},\\ 60\left(\dfrac{g - b}{U - L} + 3\right) - 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = r\), \(L = g\) or \(L = g = b\) and \(\bar{k} = 2, k = 5\)}, \end{cases}\\ &= \begin{cases} 60\left(\dfrac{g - b}{r - b} - \dfrac{g - r}{r - b} + 3 - 1\right) = 60\left( 1 + 3 - 1\right) = 180,\\ 60\left(\dfrac{b - r}{g - b} - \dfrac{g - r}{g - b} + 5 - 1\right) = 60\left(-1 + 5 - 1\right) = 180,\\ 60\left(\dfrac{b - r}{g - r} - \dfrac{b - g}{g - r} + 5 - 3\right) = 60\left( 1 + 5 - 3\right) = 180,\\ 60\left(\dfrac{r - g}{b - r} - \dfrac{b - g}{b - r} + 1 - 3\right) = 60\left(-1 + 1 - 3\right) = -180 \equiv 180 \mod 360,\\ 60\left(\dfrac{r - g}{b - g} - \dfrac{r - b}{b - g} + 1 - 5\right) = 60\left( 1 + 1 - 5\right) = -180 \equiv 180 \mod 360,\\ 60\left(\dfrac{g - b}{r - g} - \dfrac{r - b}{r - g} + 3 - 5\right) = 60\left(-1 + 3 - 5\right) = -180 \equiv 180 \mod 360. \end{cases}\end{align*}\] ゆえに、以下が確かに成立している。 \[\bar{h}(\bar{r},\bar{g},\bar{b},\bar{k}) = h(r,g,b,k) + 180 \mod 360.\] \(k\), \(\bar{k}\) のすべての場合において成り立っており、\(j = \lfloor\frac{k}2\rfloor\) であるので、先の \(j\) においても成立する。
反転色 \(\tilde{\mathcal{C}}\) の HSL を \(\mathcal{C}\) の HSL で以下のように定義することができる。 \[\tilde{h} = h + 180 \mod 360, \quad \tilde{s} = s, \quad \tilde{s'} = s', \quad \tilde{l} = 1 - l.\]
反転色 \(\tilde{\mathcal{C}}\) の RGB 値 \(\tilde{r}, \tilde{g}, \tilde{b}\) は HSL を求めなくても以下のように得ることができる。 \[\left(\;\begin{align*} \tilde{r} &= 1 - r,\\ \tilde{g} &= 1 - g,\\ \tilde{b} &= 1 - b. \end{align*}\right.\]
確かに、色 \(\tilde{\mathcal{C}}\) の式として \(\tilde{r}, \tilde{g}, \tilde{b}\) を代入すると、以下が成り立っていることがわかる。 \[\tilde{L} = \min\left\{\tilde{r}, \tilde{g}, \tilde{b}\right\} = \min\left\{1 - r, 1 - g, 1 - b\right\} = 1 - U, \quad \tilde{U} = \max\left\{\tilde{r}, \tilde{g}, \tilde{b}\right\} = \max\left\{1 - r, 1 - g, 1 - b\right\} = 1 - L,\] \[\tilde{s} = \dfrac{\tilde{U} - \tilde{L}}{1 - |\tilde{U} + \tilde{L} - 1|} = \dfrac{1 - L - 1 + U}{1 - |1 - L + 1 - U - 1|} = \dfrac{U - L}{1 - |U + L - 1|} = s,\quad \tilde{s'} = \tilde{U} - \tilde{L} = 1 - L - 1 + U = U - L = s',\] \[\tilde{l} = \dfrac{\tilde{U} + \tilde{L}}{2} = \dfrac{1 - L + 1 - U}{2} = 1 - \dfrac{L + U}{2} = 1 - l.\] 先の補色と同様に導出すれば、 \[\tilde{h} = h + 180 \mod 360.\]
いや「同様」と言っても途中は微妙に異なるので、やはり念の為、以上を確認しておく。
まず、先の場合分けを細分化した式を再録しておく。 \[h(r,g,b,k) = \begin{cases} 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = r\), \(L = b\) or \(L = b = g\) and \(k = 0\)},\\ 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = g\), \(L = b\) or \(L = b = r\) and \(k = 1\)},\\ 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = g\), \(L = r\) or \(L = r = b\) and \(k = 2\)},\\ 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = b\), \(L = r\) or \(L = r = g\) and \(k = 3\)},\\ 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = b\), \(L = g\) or \(L = g = r\) and \(k = 4\)},\\ 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = r\), \(L = g\) or \(L = g = b\) and \(k = 5\)}. \end{cases}\] 反転色 \(\tilde{\mathcal{C}}\) の RGB 値 \(\tilde{r}, \tilde{g}, \tilde{b}\) をこの細分化した場合分けの式に代入すると、 \[\begin{align*}\tilde{h}(\tilde{r},\tilde{g},\tilde{b},\tilde{k}) &= \begin{cases} 60\left(\dfrac{\tilde{b} - \tilde{g}}{\tilde{U} - \tilde{L}} + 3\right) &\text{ if \(\tilde{U} = \tilde{b}\) or \(\tilde{U} = \tilde{b} = \tilde{g}\), \(\tilde{L} = \tilde{r}\) and \(\tilde{k} = 3\)},\\ 60\left(\dfrac{\tilde{r} - \tilde{b}}{\tilde{U} - \tilde{L}} + 5\right) &\text{ if \(\tilde{U} = \tilde{b}\) or \(\tilde{U} = \tilde{b} = \tilde{r}\), \(\tilde{L} = \tilde{g}\) and \(\tilde{k} = 4\)},\\ 60\left(\dfrac{\tilde{r} - \tilde{b}}{\tilde{U} - \tilde{L}} + 5\right) &\text{ if \(\tilde{U} = \tilde{r}\) or \(\tilde{U} = \tilde{r} = \tilde{b}\), \(\tilde{L} = \tilde{g}\) and \(\tilde{k} = 5\)},\\ 60\left(\dfrac{\tilde{g} - \tilde{r}}{\tilde{U} - \tilde{L}} + 1\right) &\text{ if \(\tilde{U} = \tilde{r}\) or \(\tilde{U} = \tilde{r} = \tilde{g}\), \(\tilde{L} = \tilde{b}\) and \(\tilde{k} = 0\)},\\ 60\left(\dfrac{\tilde{g} - \tilde{r}}{\tilde{U} - \tilde{L}} + 1\right) &\text{ if \(\tilde{U} = \tilde{g}\) or \(\tilde{U} = \tilde{g} = \tilde{r}\), \(\tilde{L} = \tilde{b}\) and \(\tilde{k} = 1\)},\\ 60\left(\dfrac{\tilde{b} - \tilde{g}}{\tilde{U} - \tilde{L}} + 3\right) &\text{ if \(\tilde{U} = \tilde{g}\) or \(\tilde{U} = \tilde{g} = \tilde{b}\), \(\tilde{L} = \tilde{r}\) and \(\tilde{k} = 2\)}, \end{cases}\\ &= \begin{cases} 60\left(\dfrac{g - b}{U - L} + 3\right) &\text{ if \(U = r\), \(L = b\) or \(L = b = g\) and \(\tilde{k} = 3\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) &\text{ if \(U = g\), \(L = b\) or \(L = b = r\) and \(\tilde{k} = 4\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) &\text{ if \(U = g\), \(L = r\) or \(L = r = b\) and \(\tilde{k} = 5\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) &\text{ if \(U = b\), \(L = r\) or \(L = r = g\) and \(\tilde{k} = 0\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) &\text{ if \(U = b\), \(L = g\) or \(L = g = r\) and \(\tilde{k} = 1\)},\\ 60\left(\dfrac{g - b}{U - L} + 3\right) &\text{ if \(U = r\), \(L = g\) or \(L = g = b\) and \(\tilde{k} = 2\)}. \end{cases}\end{align*}\]
ちなみに、条件文を \(U, L\) の同値関係が逆転することを見越して多少調整していることに注意。
ここで、条件が一致する場合分けで両者の差をみれば、 \[\begin{align*}\tilde{h}(\tilde{r},\tilde{g},\tilde{b},\tilde{k}) - h(r,g,b,k) &= \begin{cases} 60\left(\dfrac{g - b}{U - L} + 3\right) - 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = r\), \(L = b\) or \(L = b = g\) and \(\tilde{k} = 3, k = 0\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) - 60\left(\dfrac{g - r}{U - L} + 1\right) &\text{ if \(U = g\), \(L = b\) or \(L = b = r\) and \(\tilde{k} = 4, k = 1\)},\\ 60\left(\dfrac{b - r}{U - L} + 5\right) - 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = g\), \(L = r\) or \(L = r = b\) and \(\tilde{k} = 5, k = 2\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) - 60\left(\dfrac{b - g}{U - L} + 3\right) &\text{ if \(U = b\), \(L = r\) or \(L = r = g\) and \(\tilde{k} = 0, k = 3\)},\\ 60\left(\dfrac{r - g}{U - L} + 1\right) - 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = b\), \(L = g\) or \(L = g = r\) and \(\tilde{k} = 1, k = 4\)},\\ 60\left(\dfrac{g - b}{U - L} + 3\right) - 60\left(\dfrac{r - b}{U - L} + 5\right) &\text{ if \(U = r\), \(L = g\) or \(L = g = b\) and \(\tilde{k} = 2, k = 5\)}, \end{cases}\\ &= \begin{cases} 60\left(\dfrac{g - b}{r - b} - \dfrac{g - r}{r - b} + 3 - 1\right) = 60\left( 1 + 3 - 1\right) = 180,\\ 60\left(\dfrac{b - r}{g - b} - \dfrac{g - r}{g - b} + 5 - 1\right) = 60\left(-1 + 5 - 1\right) = 180,\\ 60\left(\dfrac{b - r}{g - r} - \dfrac{b - g}{g - r} + 5 - 3\right) = 60\left( 1 + 5 - 3\right) = 180,\\ 60\left(\dfrac{r - g}{b - r} - \dfrac{b - g}{b - r} + 1 - 3\right) = 60\left(-1 + 1 - 3\right) = -180 \equiv 180 \mod 360,\\ 60\left(\dfrac{r - g}{b - g} - \dfrac{r - b}{b - g} + 1 - 5\right) = 60\left( 1 + 1 - 5\right) = -180 \equiv 180 \mod 360,\\ 60\left(\dfrac{g - b}{r - g} - \dfrac{r - b}{r - g} + 3 - 5\right) = 60\left(-1 + 3 - 5\right) = -180 \equiv 180 \mod 360. \end{cases}\end{align*}\] ゆえに、以下が確かに成立している。 \[\tilde{h}(\tilde{r},\tilde{g},\tilde{b},\tilde{k}) = h(r,g,b,k) + 180 \mod 360.\] \(k\), \(\tilde{k}\) のすべての場合において成り立っており、\(j = \lfloor\frac{k}2\rfloor\) であるので、先の \(j\) においても成立する。