| デバイス非依存のXYZ表色系 | RGBからXYZへの変換式の導出 | ITU-R BT.709準拠のRGB値からXYZに変換する |
primaries等が与えられたときにRGBからXYZへ変換する行列を求めるMATLABサンプルプログラムはこちら
一般にJPEG等のディジタル画像はRGB値に復号され表示されます。ほとんどのフルカラー画像はRGBそれぞれ256階調(8ビット)の解像度を持ち0が最低輝度、255が最高輝度と定義されます。しかしこの0から255の値を持つRGB値がどのような色なのかはわかりません。
それは最終的な出力方法に依存するからです。同じRGB値を持っていてもディスプレイで表示した色とカラープリンタでプリントアウトした色は違う色になりますし、ディスプレイやプリンタの設定を変えただけでも当然色はかわります。
つまりこのようなRGB値は”デバイス依存の色”であり(RGB表色系がデバイス依存というわけではなく、ディジタル画像のRGB値はデバイス依存であるという意味です)、絶対的な色の値を表すものではありません。これに対してXYZ表色系はデバイスに依存しません。よってディジタル画像のRGB値のみを用いてデバイス非依存であるXYZ表色系に変換することは出来ません。
ただし、そのRGB値のもととなる赤、緑、青の三原色の基準値(Primaries)と基準白色(Reference White)の基準値と輝度が分かっていればXYZに変換することが出来ます。 他の色変換と同様に以下の3×3の行列を用いた線形変換で表されます。
(1)この行列Mを以下のように表現してみましょう。
(2)ここでx, y, zはそれぞれRGBのPrimaryをxyz(小文字であることに注意)で表現した値で、Sは変数です。ここでx+y+z=1なのでxyzの自由度は6、Sの自由度は3なので、全体の自由度は9のままですからこの表現は一般性を失っていません。 ここでRGB値は[0, 1]に正規化されているとし、”白”のXYZ表色系による表現をだとしましょう。そうすると上の式は
(3)となります。ここでXwとZwはそれぞれ、, と表現できるので、RGBと基準白色のxr,yr, xg,yg, xb,yb, xw,ywと基準白色の輝度値Ywがわかっていればこの連立方程式をSに関して解くことが可能となります。これを実装したMATLAB簡易プログラムは本ページ上部参照
実際にXYZの値を求める際、RGBの基準色や白色の値がわからないということはよくあります。その場合はITU-T BT.709で規定されている値を用いるのが無難でしょう。例えばこちらにその値はのってます。この値を(3)式に代入して行列を計算すると、その変換式は
(4)となります。これがよく本などに載っているRGBからXYZへの変換式です。sRGBなどは709に準拠しているのでガンマなどを補正した後にこの行列をかけることでXYZに変換できます。この式は特定のRGB空間で表現された色に対する変換式であり、一般的に適用出来るものでは無いことに注意してください。