名阪カラーワーク研究会の
ミニ色彩講座(9)
                            色表示値の相互変換
            (画面の色を表色値に/表色値を画面の色に)

1.モニターRGBとCIERGBの違い

 ミニ色彩講座の関連で寄せられる質問のうち、これまで最も多かったのは、パソコンの画像作製・処理ソフト(Photoshopなど)で扱われるRGB値(sRGB)から、XYZやL*a*b*値への換算をどうすればよいかという内容のものでした。
パソコン画面の色管理に使われるsRGB値はモニターRGBともいわれ、CIE(国際照明委員会)の三刺激値XYZの前身となっているCIERGB値とは異なります。

モニターRGBの場合、三原色のRGBはそれぞれ0〜255のデジタル段階となっています。たとえば、R=255 B=0 G=0 とすれば、モニター上に赤色の純色をだすことができます。
RGBのすべてを255にすれば画面は真っ白に光り、すべてを0にすれば画面の発色は消え、黒に見えます。

0<>255の範囲の場合はR=G=Bにすると無彩色、つまりグレイの画面になります。そこで、Bの数値を相対的に大きくしていくと、だんだん青みになるというように、光の混色がモニター画面上に見ることが出来ますので、このような規則性は大変わかりやすいのです。
モニターRGBのことを、画像ソフトではsRGBと称して扱っています。

一方、CIEの三刺激値を導く源となったCIERGB値は、実際の可視スペクトルの光のうちから特定の波長光を3つ選んでRGBそれぞれの色の代表にしています。
Rは700nm、Gは546.3nm、Bは435.8nmの波長の単色光です。
実際にはすべての可視スペクトルの色を、これらの三原色の混合で等色することができなかったため、修正が加えられ、RGBに替わる三刺激値XYZとして提案されることになったのです。

XYZは実在する色ではないため、このような未知記号が用いられています。

さて、以上のことから、sRGBとCIEのRGBは違うということがわかりました。
しかし、ここで諦めてしまっては、sRGBの数値をXYZに換算できなくなります。
XYZにさえ換算できれば、あとは、マンセルにでもL*a*b*にでも、換算がOKです。
また、逆にXYZやマンセル値、あるいはL*a*b*値から、sRGBを導いて、モニター上に色を再現させたいという必要も出てきます。

XYZ値からsRGBへの変換、またその逆にsRGBからXYZに変換する変換式は幾つか提案されています。
ここでは主に、新編「色彩科学ハンドブック」(日本色彩学会編・東京大学出版会発行)を参考にしましたが、ミスプリントが見つかっています。また、載っていない計算式を補い、例題を載せて理解し安いようにしました。
また、計算のアルゴリズムについては、電気通信大学小林光夫先生の解説がありますので、入手可能の方はご覧になって下さい。[シリーズ解説第5回:日本色彩学会誌、Vol.
26.No.1(2002)p.18〜29]

2.XYZ値からモニターRGBへ

 XYZからsRGBに変換するためには、まず、リニアRGB(ここではイタリック体のRGB で示す)に変換します。
物体色の場合は、あらかじめXYZ値を100で割って1以下の小数値にしておきます。

= 3.5064X - 1.7400Y - 0.5441Z
= -1.0690X  + 1.9777Y + 0.0352Z        式(1)
= 0.0563X - 0.1970Y + 1.0511Z

次ぎに、このRGBをガンマ補正します。補正した値を,R’G’B’とします。
ガンマ補正は、モニター画面の輝度の増加がRGB値の増加と直線関係ではなく、リニアRGB値のほぼ2.2〜2.4乗に比例するため、おこなう補正です。そのような特性をモニターのガンマ特性といっています。
ここでは、2.2乗を使ってみましょう。モニター画面で使えるように補正を戻すためには、1/2.2乗とします。実際の計算は関数電卓を使えば苦もなくできます。

R’=^1/2.2
G’=^1/2.2
B’=^1/2.2

なお、ここで使っている ^ の記号は、べき乗をあらわすものとします。

この、R’G’B’値に、それぞれ255を掛ければsRGB値になります。(デジタルで扱う必要から、さらに四捨五入をします)

3.モニターRGBからXYZ値へ

 さて、今度はsRGB値をXYZ値に換算しましょう。
前と逆の計算をすればよいわけです。
まず、sRGB値のそれぞれを255で割って、0から1の実数値にします。これは先程のR’G’B’です。
そして、前とは逆にガンマ変換をしてリニアーRGB(RGB)にします。

= R’^ 2.2
= G’^ 2.2
= B’^ 2.2

次ぎに、式(1)の三元連立一次方程式から 、XYZ を解くために式(2)を導きます。

X =0.3933R  + 0.3651 + 0.1903
Y =0.2123 + 0.7010 + 0.0858B        式(2)
Z = 0.0182+ 0.1117 + 0.9570

こうして計算されるXYZを、それぞれ100倍すれば、ほぼCIEのXYZ値となります。
なお、何れの計算の過程でも小数点以下の有効桁数を4桁確保してください。

XYZが求まれば、あとは、マンセルにでも、L*a*b*値にでも変換ができるわけです。無論CIERGBにも変換が可能なわけで、
次の三元連立一次方程式に代入すれば求められますが、実際には必要ないでしょう。

X=2.7689R + 1.7517G + 1.1302B
Y=R + 4.5907G + 0.0601B                式(3)
Z=0.0565G + 5.5943B

こうして、sRGBから、XYZ値へ、さらにCIERGBへの変換もできることになります。

4.例題

では、早速例題をやってみましょう。
今、手元にターコイズブルーのカラーカードがあります。
表面色を色彩計で測定してみますと、計器が示した測定値は、Y=25.67 x=0.2135 y=0.2537 でありました。
ついでに、L*a*b*では、L*=57.72 a*=−15.82  b*=−26.82 を示しました。
また、マンセル値では、7.7B 5.7/7.4 でした。

画像処理ソフトでこの色をパソコン上に再現したいので、sRGBを計算します。
CIEの三刺激値XYZがそのまま出されておればいいのですが、Yxyとして出ていますので、まず、XYZに変換する必要があります。
 x=X/(X+Y+Z)   y=Y/(X+Y+Z)    z=Z/(X+Y+Z) の関係がありますから、
0.2135=X/(X+Y+Z)  0.2537=Y/(X+Y+Z) となります。
Y=25.67 ですから、
 0.2135=X/(X+25.67+Z)
 0.2537=25.67/(X+25.67+Z) 
という、二元連立一次方程式ができます。
これを解いてXとZを求めますと
X=21.60  Z=53.90

次の式(1)に、これらのXYZ値 (100で割った数値) を代入し、リニアーなRGB値(RGB )を求めます。

=3.5064 × 0.2160 - 1.7400 × 0.2567 - 0.5441 × 0.5390 = 0.01745
G =-1.0690×0.2160 + 1.9777×0.2567 + 0.0352×0.5390 = 0.2956
=0.0563×0.2160 - 0.1970×0.2567 + 1.0511×0.5390 =0.5281

ガンマ補正を使ってモニター画面用の数値に変えます。

R’= 0.01745 ^ 1/2.2 = 0.1588
G’= 0.2956 ^ 1/2.2 = 0.5747
B’= 0.5281 ^ 1/2.2 = 0.7481

255を掛けて四捨五入し、sRGB値とします。

sR = 0.1588 × 255 = 42,15 ≒  40
sG = 0.5747 × 255 = 146.5 ≒ 147
sB = 0.7481 × 255 = 190.8 ≒ 191

これらの数値をPhotoshopなどを使って導入しますと、モニター画面にカラーカードと同じターコイズブルーが再現されました。

次ぎに今度は、モニター画面の色を、物体色のXYZ値に変換する場合について、上記と逆の計算をしてみます。

まず、sRGB値を255で割ります。

R’= 40/255 = 0.1569
G’= 147/255 = 0.5765
B’= 191/255 = 0.7490

ここで、気を付けてもらいたいのは、先程のR’G’B’値に比較して少し違っていることです。これは、デジタル化のためにsRGBが四捨五入されて整数になっていたためです。
この誤差はあとあとまで影響し、最後のXYZ値にも誤差が生じることを承知しておいて下さい。

ガンマ変換でリニアRGBに戻します。

= 0.1569 ^ 2.2 = 0.0170
= 0.5765 ^ 2.2 = 0.2977
= 0.7490 ^ 2.2 = 0.5295

これらの値を、式(2)に代入します。

X = 0.3933 × 0.0170 + 0.3651 × 0.2977 + 0.1903 × 0.5295 = 0.2161
Y = 0.2123 × 0.0170 + 0.7010 × 0.2977 + 0.0858 × 0.5295 = 0.2571
Z = 0.0182 × 0.0170 + 0.1117 × 0.2977 + 0.9570 × 0.5295 = 0.5403

得られた値に、100を掛けますと、X は21.61、 Y は25.71、 Z は54.03 となり、元のXYZ値にほぼ近い値となります。四捨五入や、計算途中の端数切り捨てなどが蓄積された誤差となり、当初に示したXYZ値にピタリと合っていないことについては既に述べました。

なお、モニターRGB値で示される画面上の実際の色は、スクリーンの器差、調整などに左右されますので、そのことも承知しておいて下さい。

5.XYZ系と他の表色系の相互変換

さて、XYZ値から、CIELABすなわちL*a*b*値へ変換したいときの変換式を次ぎに示します。

L* = 116(Y/Yn) ^ 1/3 - 16
a* = 500[(X/Xn) ^ 1/3 - (Y/Yn) ^ 1/3]
b* = 200[(Y/Yn) ^ 1/3 - (Z/Zn) ^ 1/3]

上式では、Xn = 98.072     Yn =100      Zn =118.225   とします。  (D65光源下の場合では、Xn=95.045    Yn=100   Zn=108.892 を使います)
 

なお、画像処理ソフトによっては、Labとしている値を扱えるようにしているものもありますが、L*a*b*システムのルーツとなったハンターのLab、もしくは、そのコンセプションを利用した表色値を使っている場合がありますから気を付けて下さい。その場合はCIEのL*a*b*系ではありません。

また、XYZ値からマンセル値への変換は、双方のシステム間の規則性が完全ではなく、変換式はないので、変換表を使うことになります。 変換表中に出ていない数値の変換は、前後の変換値の間を補間法によって補間することになります。
変換表は、ここでは掲載しきれない膨大なものです。
日本工業規格 JIS Z 8721 「三属性による色の表示方法」 に変換表がありますので参照して下さい。
JISは主要都市の日本規格協会の各支部にありますが、本屋さんで売っているJISハンドブック 「色彩」 にも、この規格が収録されています。
変換表を利用するには、XYZ値からあらかじめx値、y値を計算しておくことが必要です。 その計算に使う式は、上の例題の始めの方に出ております。
言うまでもありませんが、XYZの大文字と、xyzの小文字は区別してください。
 
 

掲示板へ トップページに戻る