色空間の変換(2)  RGB-XYZ 変換


sRGB / Adobe RGB から CIE XYZ への変換

CIE XYZ 色空間は,sRGB や Adobe RGB の色空間を他の色空間 (Lab 色空間など) に変換するときの,中間の作業空間として広く使われている。ここでは,sRGB / Adobe RGB 色空間と,XYZ 色空間のあいだの変換について述べる。
sRGB / Adobe RGB は,たとえば Photoshop の RGB モードで使われている色空間で,R, G, B 3成分からなる。ここでは,各成分の最小値を 0,最大値を 1 とする。 R, G, B を座標軸にとると,色域は立方体 (いわゆる色の立方体,図1) になる。

RGB color cube gamma corrections for sRGB / Adobe RGB
図1.  RGB 色空間 (sRGB / Adobe RGB)
 図2. sRGB の補正(青) と Adobe RGB のガンマ補正(赤)

ところで,sRGB / Adobe RGB の RGB 値は,スクリーン上で自然な明るさに見えるように明るさの補正がなされている。 元の明るさに比例する補正前の値を R, G, B,補正後の値を R', G', B' として,明るさの補正をグラフで表すと図2のようになる。RGB モードのデータが持っているのは,補正後の R', G', B' のほうだ。明るさの補正を式で表すと,
sRGB の規格では
R' = { 12.92 R  (R ≤ 0.0031308)
1.055 R1/2.4 - 0.055  
 (R > 0.0031308)
(1)

Adobe RGB の規格では
R' = { 32 R  (R ≤ 0.00174)
R1/2.2    
 (R > 0.00174)
(2)

のようになる (R の式だけを示したが,他の成分も同様)。 Adobe RGB では,γ=2.2 のガンマ補正が使われている。sRGB での補正も,図2からわかるように γ=2.2 のガンマ補正とほとんど変わらない。 R が小さいところで直線の式に切り替わっているのは,曲線の傾きが原点で無限大になるのを避けるためだ。
RGB を XYZ に変換するときは,前もって逆補正を行って,スクリーン用の R', G', B' を,本来の R, G, B (リニア RGB という) に戻しておかなければならない。すなわち
sRGB では
R = { R' / 12.92  (R' ≤ 0.040450)
[(R' + 0.055) / 1.055] 2.4   
 (R' > 0.040450)

Adobe RGB では
R = { R' /32  (R' ≤ 0.0556)
R' 2.2      
 (R' > 0.0556)

つぎに,本来の値に戻した R, G, BX, Y, Z に変換することを考えよう。
sRGB や Adobe RGB の XYZ 色空間における色域は,3原色として採用された R, G, B 点の座標と白色点の座標で決まる。sRGB,Adobe RGB の3原色点の座標は,表1 のように x, y, z (座標の割合) で与えられている。白色点には D65,すなわち  (xn, yn, zn) = (0.3127, 0.3290, 0.3583) あるいは  (Xn, Yn, Zn) = (0.95046, 1.0, 1.08906) が使われている。

表1. おもな色空間の白色点と3原色点。参考までに NTSC (アナログテレビ),CIE Lab の値も示した。
色域
白色点 R
G
B
xr yr zr xg yg zg xb yb zb
sRGB / HDTV
D65 0.64 0.33 0.03 0.30 0.60 0.10 0.15 0.06 0.79
Adobe RGB
D65
0.64
0.33
0.03
0.21
0.71
0.08
0.15
0.06
0.79
NTSC RGB (SDTV)
C
0.67
0.33
0.00
0.21
0.71 0.08 0.14
0.08
0.78
CIE Lab
D50
-
-
-
-
-
-
-
-
-

RGB から XYZ への変換は,これらの値から決まる行列で与えられる (変換行列の求め方 参照)。この変換 (一次変換) を

(
X )

( R
)
Y M
G
Z
B

とすると,変換行列 M は表2のようになる。

表2. RGB→XYZ の変換行列。参考のため,逆行列も示した。
色空間
M M -1
sRGB (D65)
 0.412391  0.357584  0.180481
0.212639 0.715169 0.072192
0.019331 0.119195 0.950532
 3.240970 -1.537383 -0.498611
-0.969244 1.875968 0.041555
0.055630 -0.203977 1.056972
Adobe RGB (D65)
 0.576669  0.185558  0.188229
0.297345 0.627364 0.075291
0.027031 0.070689 0.991338
 2.041588 -0.565007 -0.344731
-0.969244 1.875968 0.041555
0.013444 -0.118362 1.015175

sRGB gamut in the XYZ space   Adobe RGB gamut in the XYZ space
図3. XYZ 色空間における sRGB (左) と Adobe RGB (右) の色域

図3は,sRGB と Adobe RGB の 色立方体 を XYZ 色空間に変換したもので,色域が平行六面体になっている (別の方向から見た図が,色の3原色 のページにある)。sRGB と Adobe RGB の色域を最適色立体とともに XYZ 色空間で立体的に表したもの (GIF アニメーション) を以下に置いておくので,参考にしてもらいたい。

XYZ から RGB への変換

つぎに,CIE XYZ 色空間から sRGB あるいは Adobe RGB への変換を考えよう。XYZ 値を RGB値に変換するには,RGB→XYZ 変換の逆変換を行えばよい。すなわち

(
R )

( X
)
G M -1
Y
B
Z

こうして得られた RGB の値はリニア (本来の明るさ) である。 sRGB や Adobe RGB のスクリーン用 (いわゆる RGB モード) の値にするためには,さらに明るさの補正をしなければならない。sRGB については (1) 式の,Adobe RGB については (2) 式の補正をすればいい。こうして得られた R', G', B' が,ふつうの画像 (RGB モード) の RGB 値だ。
カメラやスキャナでも,色フィルターで分解して得られた3色のデータをまず CIE XYZ 値に変換したあと,RGB に変換し,さらに明るさの補正をしたあと,それぞれの画像形式で保存していると思われる。



色空間の変換 目次へ戻る   前へ 次へ
T.Fujiwara, 2011/12