全文検索(S)
[]

1. はじめに

CG や DTP、動画や写真など、機械で画像や映像を扱う際には、ガンマという概念が頻出します。あるコンピュータではきれいに見えた画像が自分のマシンだと妙に白っぽく見えたり、映画の DVD をテレビで見ると妙に暗いものがあったりするのも、ガンマの違いに拠るものです。色温度や色座標など、ディスプレイにまつわる設定項目は少なくありませんが、ガンマの違いがもっとも大きく見た目に影響します。小難しい定義や用語は後回しにして、まずなぜガンマという概念が何なのか、なぜ必要になるのかから考えてみましょう。

2. ガンマの基本的な概念

1. 鉛筆デッサンにたとえると

さて、画用紙に HB の鉛筆でデッサンしていることを考えてみましょう。紙の上には、あなたが鉛筆を動かしたとおりに線が引かれます。弱い力で描いた線は薄い色で、強く描いた線はしっかり黒い色になるでしょう。HB の鉛筆はもっともポピュラーで使う機会も多い鉛筆ですから、大体、自分が意図したような濃さで線が引けると思います。

では、今度は、4B の鉛筆で画用紙に落描きしてみることを考えてみます。絵を描く人はご存知でしょうが、4B というのは、HB よりずっとやわらかい鉛筆です。もし HB と同じ力で描いたら、画用紙は真っ黒になってしまいます。じゃあ、もし 2H の鉛筆を使ったらどうでしょう? 2H はかなり硬い鉛筆です。画用紙が削れるくらいの力を込めないと、黒い線は引けないでしょう。

つまり、一定の力(インプット)で画用紙に描こうとしても、鉛筆の硬さが違えば、アウトプットは変わってしまいますね。ものすごく大雑把に言えば、これがガンマという考え方なのです。ガンマ値というのは、同じ力で画用紙に描いた時どれくらい濃さが変わるのか、を表している指標だと考えてください。

2. 実際のデジタル機器だとどうなるのか

では、コンピュータやテレビやカメラなどを利用して画像の表現を行う場合はどうなのでしょうか。コンピュータのディスプレイやテレビカメラやデジタルカメラなどは、画像を表示したり記録する時に、その機械の持っている「癖」のせいで、オリジナルの画像の情報を、変質させてしまう のです(なぜそういう「癖」があるのかについては色々な理由があります)。鉛筆デッサンの比喩でいえば、鉛筆の硬さが機械によってバラバラだということですね。この「癖」のことをガンマ特性と呼び、どれくらい変質さてしまうかを表しているのが、「ガンマ値」と呼ばれる指標です。

ガンマ値という指標は、1.0 が「変質無し」を表します。鉛筆のたとえで言えば、HB の鉛筆はガンマ値 1.0 です。なぜ 1.0 なのかというと、この数字は、インプットとアウトプットが、1 対 1 で対応するということを表しているからです。以下のグラフは、それぞれガンマ値 1.0 と 2.2 というガンマ特性の、入力と出力の関係を表してます。

ガンマ値1.0のグラフガンマ値2.2のグラフ
ガンマ値1.0の場合
y = x
ガンマ値2.2の場合
y = x ^ 2.2

どの程度変質するのかのグラフは、ガンマ値をべき乗することで表せます。このガンマ値という指標を利用して、変質した画像の情報をオリジナルのものに戻そうとすることを、「ガンマ補正」と呼びます。ほぼ全ての映像機器は 1.0 以外のガンマ値を持っていますので、我々人間の目に適当に見えるようにするには、何らかの補正を行う必要があります。

3. 具体的に考えるガンマの問題

より具体的に考えていきましょう。例えばパソコンで使われている CRT(ブラウン管)ディスプレイで、ある画像を表示したいとします。ところが、その画像の情報をそのまんま CRT というハードウェアに送ってしまうと、ガンマ値 2.2~2.5 くらいのガンマ特性を持つ CRT の「癖」のせいでかなり暗く表示されてしまい、望ましい状態で画像は見えません。このディスプレイが持っている「癖」(ガンマ特性)のことを、ディスプレイガンマモニタガンマハードウェアガンマ、などと呼びます。呼び方は何通りかありますが、「ハードウェア側の『癖』」であるということが分かると思います。

さて、ディスプレイというハードウェア側に「癖」があって望ましい表示ができないのですから、「ガンマ補正」を行って、ちゃんと見えるようにしなければいけません。具体的にはどうすればいいのでしょうか。簡単なことです。CRT で暗めになるのですから、あらかじめうんと明るくしたデータを CRT に送り込んでやればいいのです。これがガンマ補正の基本です。

ガンマ補正の基本的な考え方
ガンマ値2.2のグラフディスプレイがこのように暗めに表示する「癖」を持っているのなら……暗く見えている画像例
明るめに補正している画像例あらかじめ明るくしたデータを送り込んでやれば……ガンマ値0.45の画像例
ガンマ値1.00のグラフ最終的には狙いどおりに表示できるはず!狙いどおりに表示されているはずの画像例

じゃあ、どうやって送り込めばいいのでしょうか。解決手段は2つあります。1つは、ソフトウェアの側で補正する、つまり、OS やアプリケーションなどにお任せして、ユーザは何も考えなくてよいという方法。もう1つは、画像のデータそのものをディスプレイの癖に合わせて作ってしまう、という方法です。

どちらがよいのかと考えれば、当然 OS が完全に補正してくれるのが望ましいと思うのですが、世界を制覇している AT 互換機の Microsoft Windows も、「CG やデザインに強い」と宣伝してる Macintosh の MacOS も、Linux、*BSD、Solaris、Irix、AIX、HP-UX、Irix 等の各種 UNIX 上(というか X Window)も、(私が触って知っている限りでは)そういうことはやってくれません。Adobe のアプリケーションも、基本的にはやりません(というか、やれません)。

4. データがガンマを持つということ

ではどうやって解決されているのかといえば、残されたもう 1 つの方法、つまりデータそのものをディスプレイの「癖」に合わせて作ってしまうということになるでしょう。ということは、現在のほぼ全ての画像・映像ファイルは、特定の再生環境(ディスプレイ)の「癖」に合わせて作られているということです。これが、大問題なのです。特定の再生環境の「癖」に合わせてデータを作っているということは、再生環境が変わってしまったら、そのデータはきっちり表示することができない、ということを意味しています。

ちょっと注意して欲しいのですが、もしあなたが自分のディスプレイで CG などを作成し、その画像は自分のディスプレイ以外では一切見ないという場合、ガンマ補正の必要はありません。なぜならば、あなたはディスプレイがどういう「癖」(ガンマ特性)を持っているかなど意識せずに「この色合い暗いな」とか、「ここはちょっと白すぎるな」などと、自然に判断し、無意識的に画像をそのディスプレイガンマに合わせて(つまり、そのディスプレイでちゃんと見えるように)作成してしまいます。あなたのディスプレイは「癖」(ガンマ特性)を持ってはいるのですが、その「癖」のあるディスプレイを見ながら画像を作ったあなた自身は、自然にその「癖」に合わせた画像を作ってしまいます。あなたが自分のディスプレイで自分の作っている画像を眺めている限りでは、何の問題も起きないでしょう。

しかし、もしこの画像をインターネットで公開するということになると、話は厄介です。あなたのディスプレイではちゃんと表示されたかもしれませんが、世界の多くのディスプレイは、あなたのディスプレイとは異なった「癖」を持っているかもしれません。もし「癖」が異なったら、あなたの画像はきれいに表示されないでしょう。ちなみに、データが想定している再生環境の「癖」のことを、ファイルガンマ と呼びます。ファイルガンマは、そのデータを作った環境のハードウェアガンマの逆数、つまり 1 をハードウェアガンマで割った値(例えば、ハードウェアガンマが 2.5 の場合は、1 / 2.5 = 0.4)になります。

5. 再度、ガンマ補正とは

ここで登場するのが、現在一般的に PC ユーザが行う必要がある意味でのガンマ補正です。ユーザが行うべきガンマ補正とは、

自分のハードウェアの「癖」が、データの作成された環境と異なってないかどうか確認し、そのデータが想定している再生環境の「癖」に合わせること

となるでしょう。Adobe のアプリケーションが行っているガンマ補正も、ビデオカードのドライバなどで行えるガンマ補正も、基本的にはこういうことです。また、データを作る側にとってのガンマ補正とは、

閲覧者の一般的なガンマ特性と自分のハードウェアのガンマ特性とを近づけること

あるいは、

閲覧者の一般的なハードウェアガンマと異なったガンマ特性の環境で作成した場合、ファイルガンマを適宜修正すること

などとなります。具体的には、前者のガンマ補正は、ディスプレイの明るさなどといったハードウェアの設定やビデオカードのドライバで行い、後者は PhotoShop などで行うことになるでしょう。

繰り返しになりますが、データは、必ず特定のガンマ特性に合わせて作られている という点がポイントです。ですから、全てのガンマ補正とは、データを作成した側が想定しているガンマ特性とは異なるガンマ特性の環境でデータを正しく再生するためにどうデータを変更するか、ということになります。

6. ガンマ補正のしくみ

RGB 画像に対するガンマ補正は、以下の計算式によって行います。この式は、gamma formula(ガンマの公式)や、Transfer function などとも呼ばれます。

L1 = L0 ^ (g0 / g1)

L1 = ターゲット明度(0 ≦ L1 ≦ 1)
L0 = 現在の明度(0 ≦ L0 ≦ 1)
g1 = ターゲットガンマ値
g0 = 現在のガンマ値

この場合の 明度 とは、現在の R、G、B それぞれの値を、RGB の取り得る最大値(多くの場合 8bit なので、10進数で 255 )で割ったものです。

例:ガンマ値 2.2 の マシン で制作された CG を、ガンマ値 1.8 の環境用に変換する場合
変換前の明度(0~1 まで。0 がもっとも暗く、1 で白になる)L0 = 0.5 の場合、ガンマ値 1.8 での 明度 L1は、
0.5^((1/2.2)/(1/1.8)) = 0.57
になる。
ということは、0.57 が 0.5 になるようなレベル補正をかける必要があるということである。 PhotoShop 上でこの変換を行う場合、レベル補正ダイアログ の入力レベル(I) に、
(1/2.2) / (1/1.8) = 1.8 / 2.2 = 0.82
を代入する。

7. ガンマ早見表

今使っているディスプレイの大体のハードウェアガンマ値を調べられます。真ん中のグレーと外側のシマシマの色合いが一番近いものを探してください。その数値が、あなたのディスプレイの大体のガンマ値です。

1.01.41.6
1.01.41.6

1.82.02.2
1.82.02.2

2.42.62.8
2.42.62.8

8. 蛇足

初めてこのドキュメントを出したのが 1998 年くらいだったと思います。当時はガンマやガンマ補正に関するまともな日本語のドキュメントが、ウェブ上にありませんでした。95 年以後のインターネット開放に伴い、多くの異なる再生環境を同一のデータが移動しまくるという、ネットワークによる情報共有がズンドコ進んでガンマや色温度の違いに頭を悩ませる人が少なからず出てきた頃だったと思います。情報系の大学生として何かネットワークにコントリビュート(貢献)せねば的な義務感もあって書いたという面もあり、用語集以上のこの手の解説として嚆矢であったとは自負していたのですが、数年ぶりに読み返してみて、当時のつたない知識と下手糞で偉そうな文章に激痛を覚えました。そのつたない文章をパクってレポートにしたという恐ろしい大学生の方もいらしたようなのですが単位は大丈夫だったのでしょうか。少なからぬ動画ユーザなどにも参照していただいたみたいですが、役立てていただけたでしょうか。恐縮です。今回の改定で、もう少しまっとうな文章になったことを祈ります。

Author : Mishiki Sakana <osakana@ofo.jp>
Last Modified : Fri, 13 Oct 2006 16:06:32 JST (+0900)


<CG Tips>

[ Copyright 1996-2023 Mishiki Sakana. Some Rights Reserved. ]