HSL色空間とHSV色空間
( R 1 , G 1 , B 1 ) = { ( 0 , 0 , 0 ) if H is undefined ( C , X , 0 ) if 0 ≦ H ′ < 1 ( X , C , 0 ) if 1 ≦ H ′ < 2 ( 0 , C , X ) if 2 ≦ H ′ < 3 ( 0 , X , C ) if 3 ≦ H ′ < 4 ( X , 0 , C ) if 4 ≦ H ′ < 5 ( C , 0 , X ) if 5 ≦ H ′ < 6 {\displaystyle (R_{1},G_{1},B_{1})={\begin{cases}(0,0,0)&{\text{if}}~H~{\text{is undefined}}\\(C,X,0)&{\text{if}}~~0\leqq H^{\prime }\!<1\\(X,C,0)&{\text{if}}~~1\leqq H^{\prime }\!<2\\(0,C,X)&{\text{if}}~~2\leqq H^{\prime }\!<3\\(0,X,C)&{\text{if}}~~3\leqq H^{\prime }\!<4\\(X,0,C)&{\text{if}}~~4\leqq H^{\prime }\!<5\\(C,0,X)&{\text{if}}~~5\leqq H^{\prime }\!<6\end{cases}}}
最後に、Valueを合わせるために R1, G1, B1 それぞれに m を加えると、 R, G, B が求められる。
m = V − C {\displaystyle m=V-C}
( R , G , B ) = ( R 1 + m , G 1 + m , B 1 + m ) {\displaystyle (R,G,B)=(R_{1}\!+m,~G_{1}\!+m,~B_{1}\!+m)}
Hueを H ∈ [0°, 360°) 、Saturationを SV ∈ [0, 1] 、Valueを V ∈ [0, 1] とする。
まず、次のようにしてChroma C を求める。
C = V × S V {\displaystyle C=V\times S_{V}}
ただし、双円錐モデルではSaturationの値として実際にはChromaを用いているため、変換は必要ない。
C = S V {\displaystyle C=S_{V}}
次に、RGB立方体の底面3面において、与えられた色と同じHue、Chromaをもつ点 (R1, G1, B1) を求める。この操作のために、 H', X を次のように定義する。この操作は、HSLの場合と全く同じである。
H ′ = H 60 ∘ {\displaystyle H^{\prime }={\frac {H}{60^{\circ }\!}}}
X = C × ( 1 − | ( H ′ mod 2 ) − 1 | ) {\displaystyle X=C\times {\big (}1-{\big \vert }(H^{\prime }\!{\bmod {2}})-1{\big \vert }{\big )}}
( R 1 , G 1 , B 1 ) = { ( 0 , 0 , 0 ) if H is undefined ( C , X , 0 ) if 0 ≦ H ′ ≦ 1 ( X , C , 0 ) if 1 ≦ H ′ ≦ 2 ( 0 , C , X ) if 2 ≦ H ′ ≦ 3 ( 0 , X , C ) if 3 ≦ H ′ ≦ 4 ( X , 0 , C ) if 4 ≦ H ′ ≦ 5 ( C , 0 , X ) if 5 ≦ H ′ ≦ 6 {\displaystyle (R_{1},G_{1},B_{1})={\begin{cases}(0,0,0)&{\text{if}}~H~{\text{is undefined}}\\(C,X,0)&{\text{if}}~~0\leqq H^{\prime }\!\leqq 1\\(X,C,0)&{\text{if}}~~1\leqq H^{\prime }\!\leqq 2\\(0,C,X)&{\text{if}}~~2\leqq H^{\prime }\!\leqq 3\\(0,X,C)&{\text{if}}~~3\leqq H^{\prime }\!\leqq 4\\(X,0,C)&{\text{if}}~~4\leqq H^{\prime }\!\leqq 5\\(C,0,X)&{\text{if}}~~5\leqq H^{\prime }\!\leqq 6\end{cases}}}
最後に、Intensityを合わせるために R1, G1, B1 それぞれに m を加えると、 R, G, B が求められる。
m = I ⋅ ( 1 − S I ) {\displaystyle m=I\!\cdot \!(1-S_{I})}
( R , G , B ) = ( R 1 + m , G 1 + m , B 1 + m ) {\displaystyle (R,G,B)=(R_{1}\!+m,~G_{1}\!+m,~B_{1}\!+m)}
Hueを H ∈ [0°, 360°) 、Saturationを SL ∈ [0, 1] 、Lightnessを L ∈ [0, 1] とする。
まず、次のようにしてChroma C を求める。
C = ( 1 − | 2 L − 1 | ) × S L {\displaystyle C={\big (}1-\vert 2L\!-\!1\vert {\big )}\times S_{L}}
ただし、円錐モデルではSaturationの値として実際にはChromaを用いているため、変換は必要ない。
C = S L {\displaystyle C=S_{L}}
次に、RGB立方体の底面3面において、与えられた色と同じHue、Chromaをもつ点 (R1, G1, B1) を求める。この操作のために、 H', X を次のように定義する。
H ′ = H 60 ∘ {\displaystyle H^{\prime }={\frac {H}{60^{\circ }\!}}}
X = C × ( 1 − | ( H ′ mod 2 ) − 1 | ) {\displaystyle X=C\times {\big (}1-{\big \vert }(H^{\prime }\!{\bmod {2}})-1{\big \vert }{\big )}}
ここで、 (H' mod 2) は H' を2で割った余りである。 H' は整数でなくてもよい。
上記の区分的に定義された関数は、最小値、最大値、剰余の演算を活用して簡略化できる。
Hueを H ∈ [0°, 360°) 、Saturationを SL ∈ [0, 1] 、Lightnessを L ∈ [0, 1] とし、まず次の関数 f(n) を定義する。
f ( n ) = L − a ⋅ max ( − 1 , min ( k − 3 , 9 − k , 1 ) ) {\displaystyle f(n)=L-a\!\cdot \!\max \!{\big (}{-1,~\min(k\!-\!3,~9\!-\!k,~1)}{\big )}}
ただし、 k, n はともに0以上の実数であり、 k, a は次のように定義される。
k = ( n + H 30 ∘ ) mod 1 2 {\displaystyle k={\Big (}n+{\frac {H}{30^{\circ }\!}}{\Big )}{\bmod {1}}2}
a = S L × min ( L , 1 − L ) {\displaystyle a=S_{L}\!\times \min(L,~1\!-\!L)}
ここで、 k ∈ [0, 12) となる。
これらのもとで、R, G, B の値(それぞれ0以上1以下)が次のように得られる。
( R , G , B ) = ( f ( 0 ) , f ( 8 ) , f ( 4 ) ) {\displaystyle (R,G,B)={\big (}f(0),~f(8),~f(4){\big )}}
C = range  ( R , G , B ) = M − m {\displaystyle C=\operatorname {range} (R,G,B)=M-m}
Hueは、投影された点を通る六角形の辺の全周の長さに対する、投影された点までの辺の長さの割合であり、当初は0以上1以下の値で定義されたが、現在では一般的に0度以上360度未満の角度で定義される。原点に投影される点(白、黒とその間を補完する灰色)に対しては、Hueは定義されない。数学的には、このことは次のように区分的に定義される。
H ′ = { u n d e f i n e d , if C = 0 G − B C mod 6 , if M = R B − R C + 2 , if M = G R − G C + 4 , if M = B {\displaystyle H^{\prime }={\begin{cases}\mathrm {undefined} ,&{\text{if}}~~C=0\\{\frac {G-B}{C}}{\bmod {6}},&{\text{if}}~~M=R\\{\frac {B-R}{C}}+2,&{\text{if}}~~M=G\\{\frac {R-G}{C}}+4,&{\text{if}}~~M=B\end{cases}}}