色空間の変換(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 や P3-D65 や Adobe RGB の XYZ 色空間における色域は, R, G, B 各原色の座標と白色点の座標で決まる。sRGB, P3-D65, Adobe RGB の原色各点の座標は,表 1 のように x, y, z (座標の割合) で与えられている。白色点には D65,すなわち  (xw, yw, zw) = (0.3127, 0.3290, 0.3583) あるいは  (Xw, Yw, Zw) = (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
P3-D65 (Display P3)
D65 0.68 0.32 0.00 0.265 0.69 0.045 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
P3-D65 (D65)
 0.486571  0.265668  0.198217
0.228975 0.691739 0.079287
0.000000 0.045113 1.043944
 2.493497 -0.931384 -0.402711
-0.829489 1.762664 0.023625
0.035846 -0.076172 0.956885
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
NTSC RGB (C)
 0.6069    0.1735    0.2003
0.2989 0.5866 0.1145
0.0000 0.0661 1.1162
 1.9100   -0.5325   -0.2882
-0.9846 1.9991 -0.0283
0.0583 -0.1184 0.8976

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

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

XYZ から RGB への変換

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

(
R )

( X
)
G M -1
Y
B
Z

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



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