表色系の相互変換について
sRGB, XYZ, xyY, CIELab, マンセル, HSL, CMYKあたりの相互変換の方法についての個人的な覚書です。
マンセルからxyY
マンセルからxyYに変換する式は残念ながらまだ決まっていない。変換表から線形補間を用いて計算する。変換表は以下のページから入手できる。(all.datというやつ)
Y値は以下の式を使うと、V値が10のとき、100になる。
- Y = 1.1913*V - 0.22532*V^2 + 0.23351*V^3 - 0.020483*V^4 + 0.00081936*V^5
無彩色のとき、x = 0.313, y = 0.329 (D65)。
xyYからXYZ
xyYからXYZに変換する式は次のとおり。
- X = (Y/y) * x
- Z = (Y/y) * (1 - x - y)
- YはxyYのYをそのまま使う。
XYZからsRGB
XYZからsRGB(D65)に変換するには以下の手順を踏む。
- XYZからリニアsRGBに変換する。
- リニアsRGBをガンマ補正する。
- 8bit化。それぞれの値に255をかける。
XYZからリニアsRGBに変換
- R = 3.2410X - 1.5374Y - 0.4986Z
- G = -0.9692X + 1.8760Y + 0.0416Z
- B = 0.0556X - 0.2040Y + 1.5070Z
これらの計算結果が0より小さいときは、0とする。また、1より大きいときは、1とする。
ガンマ補正
- R' = 1.055 * R^(1/2.4) - 0.055
- G' = 1.055 * G^(1/2.4) - 0.055
- B' = 1.055 * B^(1/2.4) - 0.055
ただし、リニアsRGBの各値が0.0031308以下のときには、以下の式を使う。
- R' = 12.92 * R
- G' = 12.92 * G
- B' = 12.92 * B