ディスプレイのキャリブレーションをガチでやってみた話
とある色評価実験をするにあたり、色をとにかく正確にディスプレイに表示したく、ディスプレイをガチでキャリブレーションした時の記録です。もう15年ほど前の話なので、ディスプレイといってもCRTです。
結果的に、平均色差ΔE*abが、全色領域の24色(Macbeth Color Checker)で0.8、ターゲット領域の15色で0.5と、ヒトにはほぼ見分けがつかないくらいのレベルで再現できました。
左がMacbeth Color Checkerの24色、右がターゲットである肌の色領域の15色、色差は平均値。
このやり方は、あくまで研究用であり、普通のカラマネには全く参考にならないと思いますが、自分の備忘録としてww。
ディスプレイの白を測る
実験時のディスプレイの白(白色点)をD50(5000K)にしたく、まずは、CRTハードウエアに備わっている機能で白色点をD50にしました。
すなわち、(R, G, B) = (255, 255, 255)の時にD50の色度座標となるように調整したということです。
ハードウエア的に対応したので、理論的には(R, G, B) = (255, 255, 255)の時にD50の色度座標になっているはずですが、僅かにずれていました。D50の(x, y) = (0.3457, 0.3585)に対し、実測(x, y) = (0.3402, 0.3515)でした。
そこで、目的の色度座標に対し、無視できる誤差の色度座標になるまで、自動でRGBを変更、計測を繰り返すというプログラムを作り、D50の色度に最も近くなるRGBを求めると(R, G, B) = (255, 255, 249)となり、これを白としてCIELAB値を計算することにします。
その時の、uv色度図上でのD50座標との距離(偏差duv)は0.003と非常に良い精度でした。ちなみに、偏差duvが0.02以内でないと「相関色温度****K」と言うことができません。相関色温度については「色を科学する その⑪」で書いてます。
ディスプレイの原色を測る
次に、三原色、つまり、(R, G, B) = (255, 0, 0), (0, 255, 0), (0, 0, 255)の色を測定しました。また、黒(R, G, B) = (0, 0, 0)も同様に測定しました。
黒はBlackのBをとると、Blueと間違えるので、Kと表現します。CMY「K」と同じですね。
これを見ると、黒にわずかながら輝度があり、浮いている状態ですね。そこで、この黒を考慮したキャリブレーション方法をとることにしました。
当時最高レベルのいいディスプレイですが、色域(Gamut)は狭いですね、、、でも、そんな色域いる?って話もあります。それより安定性や精度が大事でしょ?と。手っ取り早く売れるには鮮やかなほうがいいですが、単色光のような鮮やかな色を表示する場面ってありますか?
RGB->XYZ変換
R各原色(R=255の信号を入力したフル発光時)のXYZを、XR, YR, ZRとし、GおよびBも同様に定義すると、RGB->XYZ変換は、下記のようなシンプルな3 x 3行列で表現できます。
ここでは、R,G,Bは0-1の値をとることとし、R=G=B=1の時、白の絶対XYZ(前述の表の「W(自己調整後)」のXYZ)となるようにしてます。
これは、以前「色を科学する その⑧」で書いた表色系同士の基底変換と同じです。この時は色度座標で行列を表現しましたが、xR (XR + YR + XR) = XR、と色度座標と三刺激値は、刺激和(XR + YR + XR)を介した単純な関係なので。
しかし、前述のように、黒が少し浮いているので、この3 x 3行列では精度が低下します。そこで、下記のような黒を考慮した3 x 4行列を用います。
これを変形し、
3 x 3となった行列をMとすると、下記になります。
黒のXYZを移行して、Mの逆行列を左からかけると、
となり、ターゲットとなるXYZを、精度良く再現するRGB値を求める式になりました。一旦、黒を引いてから、黒を考慮した行列の逆行列を掛ける、という処理です。
ただし、これはあくまで、使用したディスプレイ個体の、計測した瞬間の変換行列、と考えるべきで、個体が違えば、同じ個体でも時間がたてば変わってきます(経年変化)。
計測した原色及び黒のXYZをもとにMを作ると↓
逆行列は↓
ガンマ特性を測る
表示したい色(のXYZ)を再現するためのRGBを求める式が完成し、めでたしめでたし、となったのですが、実は、下記式で求められるRGBをディスプレイに入力しても、希望のXYZにはなりません。
なぜなら、ディスプレイの入力信号RGBと出力輝度には、ガンマ(γ)特性と呼ばれる非線形な関係があるためです。ガンマ特性については「色を科学する <番外編> グレーカードはなぜ18%???」で書いてます。
つまり、上記式はRGBにガンマ特性が掛かってない、輝度と線形な(比例する)関係であることを前提でしているわけです。なので、ガンマが掛かっている場合をRGB、掛かっていない場合をRL, GL, BLと表現して(線形;LinearのLをとる)、下記のように書くことにします。
よって、RLGLBL->RGBの変換方法を求めないといけないのですが、これはガンマ特性を調べることと同等です。そして、ガンマ特性はR or G or B=0,1,2,3・・・255の時の各輝度を測ればいいのです。
ディスプレイをコントロールし、R or G or B=0,1,2,3・・・255の時の各輝度を測って自動記録するプログラムを作り調べた結果が↓です。実際には、256段階をすべて測定しなくとも、適度に補間することで問題ありません。
RGB各チャネルにより最大輝度が異なるのと、傾き(γ)も異なります。また、原点付近を拡大すると↓
こちらでも黒浮きが確認できます。このような場合、以前書いた下記のようなシンプルなモデルで対応すると精度が下がります。
(Lは発光輝度、Eは加える電圧=入力信号、Kは定数、γはディスプレイの種類に依存)
RLGLBL->RGB変換
そこで、このような場合は、下記のようなGOGO (gain-offset-gamma-offset)モデルがよいとされています。
このモデルには、ゲインaと2つのオフセットbとcが考慮されています。このモデルに合わせるために、RGB各チャネルの輝度Yを下記の式で、相対YであるYi,rel(i=R, G, B)に変換します。黒の輝度YKを引いてから相対化(RGBそれぞれの最大輝度Yi,maxで割る)するのです。
その結果が、下の表です。
これをグラフ化すると
黒浮きがなく、RGBすべてのチャネルのガンマ特性が一致しています。一本の数式で表現してもいいのですが、しょせん3チャネル x 256段階なので、下記のようなRGBとRLGLBLからなるLook Up Table(LUT)を作り、テーブル検索でRLGLBL->RGBへ変換することにしました。
変換行列M^-1とRLGLBL->RGB変換LUTを組み合わせた結果、冒頭にも書いたように、ディスプレイのキャリブレーションを非常に高精度で実施でき、充分な色再現精度が得られました。
ターゲットとした肌の色の実際の再現状況が下記です。ターゲットと再現色の実測値が非常に近いのがわかります。
そういえば、「色を科学する その⑪ 均等色空間と色差」で書き忘れましたが、色差は小数点第1位までしか表示しないルールとなっています。恩師によると「その程度の精度(ヒトの感覚との合致度)だから」とのこと。納得!
この処理をまとめると↓になり、フローを逆にすることで、ディスプレイに表示した色のXYZをいちいち測定しなくとも高精度で推定できます。
キャリブレーションに用いた測定器
①原色&白色用測定器
ディスプレイの原色や白の測定には、非常に高精度な分光放射輝度計を用います。分光放射輝度計はその名の通り、放射輝度[W/(sr・m^2)]を波長ごとに測る測定器です。
分光放射輝度は、単位立体角&面積[1/(sr・m^2)]から発せられる物理エネルギー[W]であり、ここにV(λ)を掛けることによって、心理物理量である輝度[lm/(sr・m^2)]に変換できます。この変換は、色を科学する その④で解説してます。
使用した分光放射輝度計はコニカミノルタジャパン株式会社のCS-1000です。この分光放射輝度計は結構すごくて、S/N比をよくするため、ペルチェ素子でセンサーを冷却していたような、、、確か350万円くらいだったかと。現在はCS-2000という後継機があるようです↓。
https://www.konicaminolta.jp/instruments/products/light/cs2000/index.html
白や原色といったMax値を厳密に絶対値で測定しておくことにより、この後のディスプレイのガンマは簡易的な測定器を用いても問題がありません。逆にいうと、Max値の精度が悪いとそのあとどうやってもダメです。
②ガンマ特性用測定器
分光放射輝度計でMax値を高精度に測定しておけば、あとは、絶対精度は必要なく、測定値の線形性が担保されている測定器でOKです。つまり、刺激値直読型の色彩計、いわゆる色差計とか、光電色彩計と呼ばれているものを使います。
実際にデータを見ても、RGB原色のMax輝度や黒の輝度が分光放射輝度計と違うのがわかります。
「色差計」という表現も、「絶対値は精度低いけど、差ならちゃんと測れるよ」というニュアンスですね。色彩計については、「色を科学する その⑩ 色彩計は色を測ってない!?」で書いてます。
使用した刺激値直読型の色彩計は、コニカミノルタジャパン株式会社のCA-100です。安心の日本品質、サポートもしっかりしていて、コニカミノルタさんはすごく信頼していました!海外のメーカーだと日本にいるのは代理店だけだったりして、エンジニアと直接話せないのが困るのです。
CA-100は測定ヘッドに吸盤状の治具がついていて、CRTのガラス面にピタッと密着できます。CRTの製造現場での検査用らしく、「CRTカラーアナライザ」という名前になってます。
なので、既に生産終了、後継機も要問い合わせになってるようです。
余談:CRTディスプレイ
用いたディスプレイは東京特殊電線株式会社(TOTOKU)製のCDT2141A(PROCALIX)というCRTです。50万円くらいした記憶が、、、。
とにかくハードウエア起因の精度低下を最小限にしたく。本当はSony製のハイエンドモデルを希望していたのですが、既に生産中止となっており、いろいろ探していたらこれが見つかったという次第です。色むら補正機能もついてました。
また、ビデオカードもcanopusのSPECTRA8400だったと記憶してます。BNCケーブルでディスプレイとつないでましたww
PROCALIXのカタログがまだあった!↓
https://www.jvckenwood.com/healthcare/display/support/download/pdf/ProcalixJ.pdf