付属ソフトウェアでキャリブレーションするでもいいんだけど、簡単すぎてボケっとしていても終わってしまう。キャリブレーションで何をやっているか多少は理解したいのと、OSS のキャリブレーションソフトウェアを使えるようになっておいたほうが嬉しい気がする。

ということで、まず dispcal による一発で .icc まで作る方法をメモ。dispcal は ArgyII CMS のツールをいろいろ使いつついい感じにやってくれるディスプレイキャリブレーションツール、という位置付けのようだ。

以下のように適当にパラメータを指定して dispcal を起動する。

sudo dispcal -v -d 1 -H -G 2.2 -b 80 -t 6500 -P 0.5,0,1.0 -o FooLCD
  • -v で進捗を多少わかりやすくする
  • -d はマルチディスプレイ環境でのディスプレイ番号。
    • --help するとどのディスプレイにどの番号が割り当てられているかはわかる
  • -H は高精度測光を有効に
  • -G はガンマ
  • -b はターゲットディスプレイ輝度 (cd/m^2)
  • -t は色温度
  • -P はキャリブレーション用ウィンドウの位置とサイズ
  • -o を指定すると .icc まで一気につくれる

最初はセンサーのキャリブレーション (-N をつけるとスキップできる)

Setting up the instrument
Instrument Type:   ColorMunki
Serial Number:     2055xxx
Firmware version:  288
Chip ID:           01-64a2131500005d
Version string:    'colormunki FW V1.32  Build Nr. 1303'
Calibration Ver.:  6
Production No.:    86471
Place instrument on test window.
Hit Esc or Q to give up, any other key to continue:
Target white = 6500.000000 degrees kelvin Daylight spectrum
Target white brightness = 80.000000 cd/m^2
Target black brightness = native brightness
Target effective gamma = 2.200000

キャリブレーションポジションにして RET

Calibration complete

と出たあとすぐに以下のようになる

Place instrument on test window.
Hit Esc or Q to give up, any other key to continue:

Display adjustment menu:
Press 1 .. 7
1) Black level (CRT: Offset/Brightness)
2) White point (Color temperature, R,G,B, Gain/Contrast)
3) White level (CRT: Gain/Contrast, LCD: Brightness/Backlight)
4) Black point (R,G,B, Offset/Brightness)
5) Check all
6) Measure and set ambient for viewing condition adjustment
7) Continue on to calibration
8) Exit

言われた通り、センサーを下に設定して、カバーをつけてディスプレイに置く

5 を入力すると、一通り測定して、ターゲットとどれぐらい差があるか表示される。error が大きいものが小さくなるように、1~4 を選び、ディスプレイ側の設定を調整しておく。

7 を選ぶと実際に測定がはじまる。結構時間がかかるので待つ。

patch 6 of 6
Black = XYZ   0.05   0.04   0.07
Red   = XYZ  28.84  16.90   5.00
Green = XYZ  32.79  54.32  12.65
Blue  = XYZ  19.10  16.57  77.21
White = XYZ  82.51  88.85  93.32
Automatic black point hue correction level = 0.71
patch 96 of 96
Target white value is XYZ 76.038267 80.000000 87.071348
Adjusted target black XYZ 0.05 0.04 0.06, Lab 0.50 0.22 -0.18
Target black after min adjust: XYZ 0.066 0.063 0.082, Lab 0.707 0.309 -0.254
Gamma curve input offset = 0.000000, output offset = 0.000783, power = 2.200000
Total Iteration 2, Final Samples = 32 Final Repeat threshold = 0.900000
Creating initial calibration curves...
Doing iteration 1 with 16 sample points and repeat threshold of 1.272792 DE
patch 16 of 16   
Brightness error = 1.025640 cd/m^2 (is 81.025640, should be 80.000000)
White point error = 0.895632 deltaE
Maximum neutral error (@ 0.699752) = 1.270848 deltaE
Average neutral error = 0.795649 deltaE
Number of measurements taken = 35
Computing update to calibration curves...
Doing iteration 2 with 32 sample points and repeat threshold of 0.900000 DE
patch 32 of 32   
Brightness error = -0.424393 cd/m^2 (is 79.575607, should be 80.000000)
White point error = 0.674218 deltaE
Maximum neutral error (@ 0.023835) = 1.287983 deltaE
Average neutral error = 0.728424 deltaE
Number of measurements taken = 54
The instrument can be removed from the screen.
Written calibration file 'FooLCD.cal'
Luminance XYZ = 0.000000 83.164907 0.000000
White point XYZ = 0.932069 1.000000 1.070937
Black point XYZ = 0.000512 0.000495 0.000724
Created fast shaper/matrix profile 'FooLCD.icc'

FooLCD.cal と FooLCD.icc というのがでてきてるはず。

このままだとまだプロファイルが設定された状態にはなっていないので、以下のように dispwin を使ってシステムに適用する。

sudo dispwin -d 1 -v -I FooLCD.icc

About to open dispwin object on the display
About to install './MacBookAirLCD.icc' as display's default profile
Installed './MacBookAirLCD.icc' and made it the default
About to destroy dispwin object

-I を指定することで、~/Library/ColorSync/Profiles/ にコピーされ、プロファイルが設定される。

トラブル

以下のようなエラーがでた場合、カバーの蓋が開いてないので開ける……

dispcal: Error - Aprox. fwd matrix unexpectedly singular
dispcal: Error - dispcal: inverting Jacobian failed (1)

カラーマネジメント関係はあと

  1. 環境光をちゃんとする
  2. プリンタプロファイルをつくる

とかをやりたいけど、今すぐできないのでもどかしい

「表色系」は文字通り色の表しかたで、まず2つに分けられる。1つが「混色系」でもう1つが「顕色系」らしい。「混色系」は XYZ 表色系とか RGB 表色系とかで、いわゆるコンピュータ表現で使う物理的なものらしい。「顕色系」は人間の知覚にあうように調整したものらしく、特定の環境下での色の見えかたを定義するものらしい。

顕色系は知覚的と言ってるので、なんとなく混色系と機械的に変換できないような気が自分はしてしまったが、L*a*b* 表色系はホワイトポイントを設定するので顕色系に分類にされるっぽい (あくまでホワイトポイントに対して相対的なもののようだ)。なんか難しいが、知覚的かどうかが問題なのかな。

XYZ 表色系は知覚的ではなく、すなわちガンマが適用されていないリニアな状態になっている。L*a*b* はすごいざっくり言うと人間の知覚ガンマを適用して XYZ 表色系を圧縮したイメージをすれば良いっぽい。L*a*b* 的には、人間の視覚のガンマ値は 1/3 となってる (XYZからの変換式に出てくる)。

  1. トップ
  2. tech
  3. 表色系

カラーマネジメントシステムは、文字コードの処理と似たようなことをするシステムだと思うとイメージしやすいと思った。

最近のウェブアプリケーションの文字コードの取り扱いのベストプラクティスは「中は全部 UCS 系 (UTF-8 とか)、入出力でちゃんと内部エンコーディングに変換する」となっているけど、カラーマネジメントと同じような感じで、「中は全部 XYZ、入出力でプロファイルを使って変換する」みたいな感じっぽい。

カラーマネジメントシステムの場合その内部エンコーディングをプロファイル接続空間 (PCS) と言うらしい。PCS は使う範囲の色をカバーしていればなんでもよくて、XYZ とか L*a*b* とか、知覚できる全ての範囲をカバーする色空間にしとくのが無難っぽい。例えば Mac のカラーマネジメントシステムである ColorSync は、PCS として XYZ 表色系を使っている。

  1. トップ
  2. tech
  3. カラーマネジメントシステムと文字コード

カメラはセンサーなので、ICC プロファイルを作ることができるし、写真に写る物体の色をできるだけ「正確に」カラーマッチングさせることができる。これはとにかく客観的な再現性を重視する商品写真のようなもので重要なんだと思う。

一方で、個人的で主観的な要素を多々含むような写真の場合、カメラは色再現のシステムのごく一部に過ぎなくなる。主観を持った人間が (撮影者とは限らず) 色再現のシステムに組込まれて「主観的な記憶色」とカラーマッチングを行うことになる。カメラとその人間を含めて、入力機械になる。

ColorMunki Photo と Argyll CMS で環境光を測定してみる。ColorMunk Photo の付属ソフトはかなりできることが少ないけど、Argyll CMS を使えば測定器として最大限生かせるらしい。

Argyll CMS

Mac の場合、Argyll CMS は単にダウンロードして適当なところに展開すれば良い。

OS X 10.7.5 な環境だけど、一部のコマンドは root 権限がないと以下のようなエラーがでる

Error - Configuring USB port 'usb:/bus253/dev3/ (X-Rite ColorMunki)' to 1 failed with -4 (No such device (it may have been disconnected))

sudo すればだいたいうまくいく。あと、SIGINT とかでプロセスを殺すと変な接続状態になって認識できなくなることもある。

環境光の測定

晴れている午前中、レースカーテン越しでそれなりの明るさの部屋の環境光を計ってみる。環境光を測るには spotread -a すればいいらしい。

$ sudo ./spotread -a

Spot read needs a calibration before continuing
Set instrument sensor to calibration position,
 and then hit any key to continue,
 or hit Esc or Q to abort:

まずだいたい毎回センサーのキャリブレーションをする必要があるので画面の指示に従ってセンサーを操作する。キャリブレーションポジションにうつして RET を叩く。

斜め下のポジション

Calibration complete

と出たらセンサーのキャリブレーション完了で、続いて測定操作に移る

Place instrument on spot to be measured,
and hit [A-Z] to read white and setup FWA compensation (keyed to letter)
[a-z] to read and make FWA compensated reading from keyed reference
'r' to set reference, 's' to save spectrum,
'h' to toggle high res., 'k' to do a calibration
Hit ESC or Q to exit, instrument switch or any other key to take a reading: 

環境光の測定なので、センサーを上に設定して RET を押すと数秒で測定される。

環境光測定

 Result is XYZ: 323.007085 333.893310 293.768785, D50 Lab: 157.377963 0.824818 -6.492927
 Ambient = 1049.0 Lux, CCT = 5207K (Delta E 2.538508)
 Suggested EV @ ISO100 for 1049.0 Lux incident light = 8.7
 Closest Planckian temperature = 5142K (Delta E 2.173893)
 Closest Daylight temperature  = 5248K (Delta E 1.352266)
 Color Rendering Index (Ra) = 98.9

こんな感じで出てきておもしろい。見ての通り、環境光の強さやら何やらを測定してくれる。Ra も測定してくれてる。ほぼ太陽光なのでさすがに高い値になってる。

【国内正規代理店品】X-rite エックスライト キャリブレーションツール ColorMunki Photo カラーモンキー・フォト KHG0100-PH -

5.0 / 5.0

このへんの理解ができると面白そうなんだけど、だいぶ意味がわからない。

色順応は赤いのをずっと見つづけたあとに白を見ると緑に傾いて見えるみたいな現象のことなのかな。これを利用して利用者の環境光まで考慮してカラーマッチングするのかな……

CAM (Color Appearance Model) は、「色の見え方」を数値化しようというしてるとか説明されているけど L*a*b* と比べてどうメリットがあるのかよくわからない。

色票などのカラーパッチなどでテストすると、Lab値であらわした色は、人間が実際に見えている感覚と同じに表現している色もあるのですが、青とか緑とか黄色は、どうしてもゆがんでいるんです。それがCIECAM02で表わすとゆがみが少ない。人間が見ている感覚と色の表現方法がちゃんと対応していることになり、より高精度の表現ができます。

http://web.canon.jp/technology/interview/kyuanos/kyuanos_p4.html

http://vision-lab.tp.chiba-u.jp/~yaguchi/colorvision_colorimetry.pdf この pdf がわかりやすい。

CIEXYZ (目への信号刺激) -> CIELAB (明度・色情報) -> CIECAM (色の見えかた) で「色」に対する抽象度があがっていく

対象物の物理的な色 (XYZ) から、知覚される色 (LAB)、環境による錯視も含めた色の見え方 (CAM) と考慮する領域が増えていく

CAM ベースのカラーマネジメントシステムは Windows Vista 以降に搭載されているらしい。これは上記で引用したキヤノンの kyuanos をベースにしたものらしい。