グレースケール
グレースケール(gray scale または grayscale)とは、コンピュータ上及び写真での色の表現方法の一種。デジタル画像の中でも、ピクセルの標本値に光度以外の情報が含まれていない画像のことである。グレースケールでは、二値画像と異なり、を光が最も強い白から最も弱い黒まで間の灰色の灰色の色合いも含めて表現する。
グレースケールの画像は観測した光が紫外線、可視光線、赤外線だった時、各ピクセルごとの電磁スペクトルの帯の光の強さを測定した結果としても得られる。またそれらは特定の周波数の光のみが捕捉された場合、単色であることが多い。また、グレースケールはフルカラーの画像から作り出すこともできる。詳細はカラーをグレースケールに変換するの節を参照。
ピクセルごとの光の強さの表現には範囲がある。この範囲は抽象的には、0(光が全くない状態:黒)から1(すべての光が最大限出ている状態:白)までの値を取りうる。この表記法は学術論文等で使われているが、この表記は色度学的に白や黒がどんな色であるかは定義していない。
他の記述法としては、光の強さをパーセンテージで表す方法がある。この場合ではスケールは0%から100%までとなる。これは光の強さをより直感的に表現することができるが、もし値が整数値しか用いられなかった場合、表せる光の強さは101種類だけとなり、幅広いグラデーションの色を表すには不十分である。またパーセント表記法は ハーフトーン印刷でどのくらいのインクが使われたかを示すのにも使われるが、そうなるとスケールの上下が逆転し、0%が紙の色の白(何も印刷されていない)、100%が真っ黒を表すことになる。
コンピューターの中では、グレースケールは有理数を用いて計算されるが、画像のピクセルは量子化されたバイナリの形で保存される。初期のグレースケールモニターの一部は、4ビット、つまり16段階しか表すことができなかった。しかし現在では、写真などグレースケールの画像は8ビットで保存されるのが普通になり、256段階の光の強さで表示、記録、印刷できるようになっている。しかしその256段階は非線形のスケールになっている。この8ビットという値は、ブロックノイズを回避できるぎりぎりの値だが、1ピクセルがちょうど1バイトであるので、プログラミングには都合が良い。
しかし、医用画像処理やリモートセンシングなどの技術的な利用に対しては8ビットでは足りない(もっと高画質なものが必要)ので、センサーの精度を十分に活かすために1ピクセルあたり10ビットや12ビットの画像が用いられ、コンピューター内で近似誤差が起きないようにしている。この場合、コンピューターが処理しやすい16ビットが用いられることも多い。TIFFやPNGなどの(英語版)などは製作当初から16ビットをサポートしている。しかし、多くのブラウザや画像プログラムではこれを8ビットにして表示している。
ピクセルの色深度がいくらであっても、値が0の時は黒で、最大値(8ビットでは255、16ビットでは65,535)では白であることは同じである。
カラー画像をグレースケールに変換する方法はいくつかある。色のチャンネル (デジタル画像)の違いによって白黒画像でもカメラのレンズフィルターに異なる色が生まれる。
一般的な方法の一つに、光度学や色度学の理論を用いて、グレースケールの画像の輝度をもとのカラー画像の輝度に合わせるという方法がある。この方法は、双方の画像の絶対輝度が等しく、国際単位系のカンデラ毎平方メートルで測定することができる。また、この画像には白色点が存在する。さらに、輝度を合わせることで、CIE 1931 色空間での輝度Yによって決まる、CIE1976年Lab色空間のL*のような知覚的な明度(英語版)の測定もできるようになる。
RGBに基づく色空間の色を光度だけで表されるグレースケールに変換するためには、線形RGB空間において重み関数を計算しなければならない。それはつまり、ガンマ圧縮関数は最初にガンマ拡張によって取り除かれるということである。
sRGB(英語版)色空間では、ガンマ拡張は次のように定義される。
C_\mathrm{linear}=
\begin{cases}\frac{C_\mathrm{sRGB}{12.92}, & C_\mathrm{sRGB}\le0.04045\\
\left(\frac{C_\mathrm{sRGB}+0.055}{1.055}\right)^{2.4}, & C_\mathrm{sRGB}>0.04045
\end{cases}
ただし、CsRGBはガンマ圧縮されたsRGBの原色(RsRGB、GsRGB、BsRGB)のうちのいずれかの光の強さの値で、それぞれ0以上1以下である。また、Clinearは、それに線形的に対応するRGBの光の強さの値である。(こちらも0以上1以下)したがって、光度は3つの線形的な光の強さの値の重み合計として計算される。sRGBの色空間は、CIE1931色空間では線形光度Yで表され、以下のように与えられる。
Y = 0.2126 R + 0.7152 G + 0.0722 B.
係数は、人間の三色型色覚における各色の認識の強さを測定したものを表しており、原色ごとに異なる値である。特に、人間の視覚が最も敏感に反応するのは緑で、最も反応が鈍いのは青である。グレースケールの強さを線形のRGBに変換する際、3つの原色の光の強さは全て同じ値(計算によって導かれた線形光度Y)に設定されている。(この時、(R,G,B)=(Y,Y,Y)となる。)線形光度は通常ガンマ圧縮して非線形表現に戻さなければならない。しかしsRGBでは、3原色の強さの値が全て、上に示したガンマ拡張の逆操作であるガンマ圧縮によって求められるYsRGBに設定されている。
Y_\mathrm{sRGB}=\begin{cases}
12.92\ Y, & Y \le 0.0031308\\
1.055\ Y^{1/2.4}-0.055, & Y > 0.0031308.
\end{cases}
実際には、3原色の強さの割合が全て同じであるため、値をsRGBおよび単一チャンネル表現に対応した(英語版)に一度保存するだけでよい。sRGBの画像を認識できるウェブブラウザやその他のソフトウェアは、sRGBを用いている時には、通常3原色が全て同じ値である場合のカラー画像とグレースケールの画像で全く同じ処理が行われる。
PAL、SECAM、NTSCなどの標準的なカラーテレビや映像システムで用いられるYUVやそれに似た色空間における画像では、非線形luma要素(Y')がガンマ圧縮された重み合計としての原色の強さから直接計算される。重み合計は、色度法においてグレースケールの計算で使われるようなガンマ値の拡大や圧縮をせずに直接求められる。PALやNTSCで用いられるYUVモデルやYIQモデルでは、Rec.601のluma(Y')を次のように計算する。
Y' =  0.299 R' + 0.587 G' + 0.114 B'
ここで、文字にプライムをつけたのは、先述のガンマ圧縮された線形のRGBおよびYと区別するためである。ATSCによって開発されたHDTVに用いられるITU-RRec. 709では異なる係数が用いられており、lumaを次のように計算する。
Y' =  0.2126 R' + 0.7152 G' + 0.0722 B'.
この係数は先のsRGB法での係数と同じだが、ガンマ圧縮値がそのまま式に代入されるため、色彩の効果はsRGBとは異なる。
普通はこれらの色空間は画像表示のためのレンダリングの前にR'G'B'に戻される。精度が十分高ければ、画像を正確にレンダリングできる。
しかし、luma要素自体が画像のグレースケール表現の代わりとなる場合、元の画像の光度は保存されない。2色は同じluma(Y')をとることができるが、CIE線形光度Yが異なる(そのため非線形光度YsRGBも異なる)ため、見る人には元のカラー画像より明るいか、暗くなって見える。同様に、同じ光度Yを持つ2つの色(この時YsRGBも等しい)はY'の定義より異なるlumaを持つことになる。
カラー画像は固定されたいくつかの色チャンネルからなることが多い。それぞれのチャンネルはチャンネルの光の強さの値を示している。例えば、RGB画像は赤、青、緑の3つの独立した原色のチャンネルからなる。またCMYK画像はシアン、マゼンタ、イエロー、ブラックのインクを合わせてカラー印刷される。
以下にRGBのフルカラーの画像をそれぞれの色チャンネルに分けた画像の例を示す。左の列は原色の単独のチャンネル、右の列はそれらをグレースケールで表したものである。
これは可逆的な変換である。別々のグレースケールチャンネルからフルカラーの画像を作ることもできる。オフセットを用いてチャンネルを分断し、回転などの操作を加えることで、元の画像を正確に復元するのではなく画像に新たな効果をつけることができる。