2006 年 1 月 29 日 19 時 25 分

ガンマ値


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


[写真] [写真] [写真]


今日はガンマ値の調整。
これも画像を扱うアプリケーションの定番機能でもある。

ガンマ値は、画像自体が持つ特性ではなく、
画像を表示するハードウェアの特性である。

ピクセル値、つまり入力値が、0 から 255 まで
直線的に滑らかに変化しても、
ハードウェアの表示、つまり出力値は、
同じように滑らかに出力するとは限らず、
ハードウェアによって様々である。

このハードウェアによって異なる、
入力と出力の相関関係を示すのがガンマ値であり、
出力レベルは、入力レベルのガンマ値乗で計算される。
ガンマ値が 1 であれば、入力=出力となる。

例えば、CRT は、ガンマ値が 2 前後と言われているが、
ガンマ値が 2 である CRT があるとすると、
入力が 0.5 の場合、出力は、0.5 の 2 条で、0.25 となる。
8 ビット値に換算すると、128 の値が、大体 64 程度となる。

実際は、モニタドライバが機器のガンマ値に基づいて
ある程度修正を行っているので、
表示上で上記のような顕著な現象が起こることはないが、
あるハードウェアで作成された画像を、
ガンマ値が異なる別のハードウェアで表示する場合など、
ガンマ値を考慮した調整が必要となる場合もある。

では、ガンマ値の計算式を考えてみよう。
この計算もピクセル内で完結している。
計算前のピクセルの RGB 値を、Rs, Gs, Bs、
計算後のピクセルの RGB 値を、Rd, Gd, Bd とし、
ガンマ値を G とすると、以下の計算で求まる。

Rd = adjust((Rs / 255) ^ (1 / G) * 255)
Gd = adjust((Gs / 255) ^ (1 / G) * 255)
Bd = adjust((Bs / 255) ^ (1 / G) * 255)

ユーザは、適用したい機器のガンマ値を入力する。
例えば、ユーザがガンマ値 2 を指定した場合、
中間ピクセルが暗めになる機器向けということだ、
なので、それに対応してアプリケーション側は、
逆に中間ピクセルを明るく調整するということになる。
つまり、逆数を使って計算する必要がある。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.