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

  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 - x-rite

x-rite

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 をベースにしたものらしい。

A Standard Default Color Space for the Internet - sRGB

とりあえずガンマの意味がよくわからなくなった……

なんかいくつかあって難すぎる…… ちょっと訳してみる

  1. viewing gamma
    1. the overall system gamma that we want to obtain and is typically computed by multiplying the camera gamma by the display gamma as shown below.
    2. システム全体として要求してる、典型的には以下に伸べる camera gamma と display gamma を積算して求めらるガンマ
  2. camera gamma
    1. the characteristic of the image sensor or video camera standard transfer function
    2. イメージセンサやビデオカメラの標準伝達関数の特徴
  3. CRT gamma
    1. the gamma of the physical CRT.
    2. CRT の物理的なガンマ
  4. LUT gamma
    1. the gamma of the frame buffer lookup table
    2. フレームバッファルックアップテーブルのガンマ
  5. display gamma
    1. the "display system" gamma downstream of the frame buffer which is typically computed by multiplying the CRT gamma by the LUT gamma as shown below.
    2. "ディスプレイシステム" としての、典型的には CRT gamma と LUT gamma を積算して求める、フレームバッファを通した最終的なガンマ
http://www.w3.org/Graphics/Color/sRGB.html

いわゆる「ディスプレイのガンマ」ってやつは最後の display gamma っぽい。CRT gamma はディスプレイの物理的な (ハードウェアとしての) 特性値で、LUT gamma はディスプレイカードとかに設定されているガンマ値かな。

camera gamma は当然カメラのセンサー特性のことだと思う。viewing gamma はカメラからディスプレイ出力までを考慮した全体的なガンマ?

ディスプレイキャリブレーションでターゲットにするガンマは当然 display gamma だと思う。キャリブレーションでガンマを求めたら、ディスプレイカードの LUT ガンマを調整するのかな…

  1. トップ
  2. tech
  3. sRGB 仕様・ガンマの種類

ガンマの種類を読んでいて、そもそも「ガンマ」のついて理解がなさすぎるな、ということでそこからちゃんと理解する必要がある。

ガンマは信号の出入力間の関係性を示していて、具体的には、出入力信号強度間に output signal intensity = input signal intensity ** gamma という関係があるときの gamma らしい。ディスプレイのガンマが1ならリニア(変化なし)だし、1を超えているなら黒っぽくなり、1未満なら白っぽくなる。

  • 自然界の物体の色は反射率に対してリニア、すなわち gamma = 1
  • CRT ディスプレイにおいて物理的特性から gamma ≒ 2.2
  • 人間の目・脳は gamma ≒ 1/3〜1/2.2 で知覚

graph

人間の目は信号強度が強くなるほど圧縮して知覚するらしい (明るくなるほど、明度差を感じるための必要な信号差が大きくなる)。これは音の大きさとかでもそうだし、人間の知覚ってそういうものらしい ヴェーバー‐フェヒナーの法則

CRT にリニアな信号を入れると、人間が知覚する場合はある程度中和されて、階調変化が自然に見えるようになるようだ? (γ=0.733~1.0 程度になるっぽい)

理想的なディスプレイ

とりあえずこれらを踏まえて「理想的なディスプレイ」を考えてみる。つまり階調をできるだけフルで生かせるディスプレイを作る場合、どういう特性のものがいいか?

  • 人間の目のガンマ特性的に信号強度が強い場合は階調がいらない
  • ディスプレイが人間の目と逆のガンマ特性を持っていれば階調的には効率が良い

要は γ=2.2~3 なら階調的には嬉しいはず

理想的なカメラ

物理的な反射特性はリニアだけど、前述の通り信号強度が強い場合は階調がいらないので、γ=1/3~1/2.2 だと一番効率が良いはず

理想的な viewing gamma

カメラとディスプレイを含めたシステム全体のガンマとしては、当然 1.0 になるのが理想だと思われる。すなわちカメラで撮影された画像が、そのままディスプレイで見れる。

ただ、実際には「閲覧環境」というのが関係するので、1.0 にはならないっぽい。

ターゲット display gamma

ターゲットにする display gamma は、仕様で定められている閲覧環境と自分の閲覧環境との差のことを考慮しないないといけない。

今さらだけど環境光によってガンマが変わるってのがいまいちイメージできないけど、

  • 暗い環境ほど相対的にディスプレイが明るくみえるので、より黒くなるように設定しなければならない?
  • 明い環境ほど相対的にディスプレイが暗くみえるので、より白くなるように設定しなければならない?

sRGB に書いてある viewing gamma は

  • 1.5 - 完全に暗い部屋でのプロジェクタスライド用
  • 1.25 - かなりくらい部屋でのモニタ用 (これは15ルクスぐらいの環境光を前提にしたテレビ系を想定してる)
  • 1.125 - CG を見るとき典型的な 64ルクスぐらいの環境光を前提にした場合 (ITU-R BT.709 っていう放送規格?と一緒らしい?)

viewing gamma 1.125 を想定していて、display gamma 2.2 を設定しろ、ということは、viewing gamma 1.0 に正規化すると display gamma は 1.956 相当になる。

だけど、普通のオフィスとか家庭の環境だと、200ルクスぐらいは少なくともあるらしいので、sRGB が想定している環境からはだいぶ離れている? 明るい環境ならもっと小さなガンマ値を設定しないといけないはずだけど、どうやって求めたらいいかわからない。

とはいえ、現実的には昨今 display gamma は 2.2 にしとくのが無難っぽいのでそれほど深く考えても無駄な感じがする。

  1. トップ
  2. tech
  3. ディスプレイのガンマを理解する