グレースケール
色深度 |
---|
1ビットモノクローム 8ビットグレースケール 8ビットカラー 15/16ビットカラー(ハイカラー) 24ビットカラー(トゥルーカラー) 30/36/48ビットカラー(ディープカラー) |
関連 |
インデックスカラー パレット RGBカラーモデル ウェブセーフカラー |
グレースケール(英: gray scale または grayscale)とは、コンピュータ上の画像および写真での色の表現方法の一種。デジタル画像の中でも、ピクセルの標本値に光度以外の情報が含まれていない画像のことである。グレースケールでは、二値画像と異なり、画像を光が最も強い白から最も弱い黒まで間の灰色の明暗も含めて表現する[1]。
グレースケールの画像は観測した光が紫外線、可視光線、赤外線だった時、各ピクセルごとの電磁スペクトルの帯の光の強さを測定した結果としても得られる。またそれらは特定の周波数の光のみが捕捉された場合、単色であることが多い。また、グレースケールはフルカラーの画像から作り出すこともできる。詳細は#カラーをグレースケールに変換するの節を参照。
数値表現
[編集]ピクセルごとの光の強さの表現には範囲がある。この範囲は抽象的には、0(光が全くない状態:黒)から1(すべての光が最大限出ている状態:白)までの値を取りうる。この表記法は学術論文等で使われているが、この表記は色度学的に白や黒がどんな色であるかは定義していない。
他の記述法としては、光の強さをパーセンテージで表す方法がある。この場合ではスケールは0%から100%までとなる。これは光の強さをより直感的に表現することができるが、もし値が整数値しか用いられなかった場合、表せる光の強さは101種類だけとなり、幅広いグラデーションの色を表すには不十分である。またパーセント表記法は ハーフトーン印刷でどのくらいのインクが使われたかを示すのにも使われるが、そうなるとスケールの上下が逆転し、0%が紙の色の白(何も印刷されていない)、100%が真っ黒を表すことになる。
コンピュータの中では、グレースケールは有理数を用いて計算されるが、画像のピクセルは量子化されたバイナリの形で保存される。初期のグレースケールモニターの一部は、4ビット、つまり16段階しか表すことができなかった。2000年代以降はフルカラーモニターが一般的となり、PNGのような可逆圧縮形式が広くサポートされるようになり、またメインメモリ(主記憶装置)やストレージ(補助記憶装置)の容量も飛躍的に向上したことから、グレースケールの画像はピクセルあたり8ビット、RGBカラーの画像はピクセルあたり24ビットで保存されるのが普通になり、256段階の光の強さで表示、記録、印刷できるようになっている[注釈 1]。しかしその256段階は非線形のスケールになっている。この8ビットという値は、バンディング[注釈 2]を回避できるぎりぎりの値だが、8ビット(オクテット)を1バイトとするコンピュータが主流となっているため、プログラミングには都合が良い。
しかし、専用ソフトウェアでの後処理を前提としたプロフェッショナル向けのデジタルカメラによる撮影やイメージスキャナによる取り込み、医用画像処理やリモートセンシングなどの高度に技術的な利用に対しては、8ビットでは階調数が足りないケースがある。高精細・高画質な用途では、CCDイメージセンサやCMOSイメージセンサといった撮像素子自体は8ビットを超える階調数をハードウェアレベルでサポートしており、そのようなセンサの精度を十分に活かすためにチャンネルあたり10ビットや12ビットの画像形式が用いられ、コンピュータ内で発生する近似誤差を低減させるようにしている。この場合、コンピュータが処理しやすい16ビットが用いられることも多い。TIFFやPNGなどの画像ファイルフォーマット(image file formats)は仕様策定当初からチャンネルあたり16ビットの形式をサポートしている。ただし、ディスプレイへの最終的な画像表示を担当するビデオカード(GPU)は、コンシューマー用途ではチャンネルあたり8ビットまでの出力しかサポートしていないため、ウェブブラウザや一般的な画像ビューアのような多くのアプリケーションソフトウェアでは8ビットを超える階調の画像を8ビットに変換して表示している。チャンネルあたり8ビットを超える画像を正確に表示するには、対応するソフトウェアのほかに対応するディスプレイやビデオカードも必要となる。
ピクセルの色深度がいくらであっても、値が0の時は黒で、最大値(8ビットでは255、16ビットでは65,535)では白であることは同じである。ただし、インデックスカラー形式の場合、カラーパレットは自由に設定することができるので、0番目の色を白、255番目の色を黒とする画像を作ることもできる。
ダイナミックレンジの画像処理用途ではチャンネルあたり16ビット半精度や32ビット単精度の浮動小数点数形式が使われることも多い。ハイダイナミックレンジイメージも参照のこと。
カラーをグレースケールに変換する
[編集]カラー画像をグレースケールに変換する方法はいくつかある。色のチャンネルの違いによって白黒画像でもカメラのレンズフィルターに異なる色が生まれる。
輝度保存変換
[編集]一般的な方法の一つに、光度学や色度学の理論を用いて、グレースケールの画像の輝度をもとのカラー画像の輝度に合わせるという方法がある[5][6]。この方法は、双方の画像の絶対輝度が等しく、国際単位系のカンデラ毎平方メートルで測定することができる。また、この画像には白色点が存在する。さらに、輝度を合わせることで、CIE 1931 色空間での輝度Yによって決まる、CIE1976年Lab色空間のL*のような知覚的な明度(lightness)の測定もできるようになる。
RGBに基づく色空間の色を光度だけで表されるグレースケールに変換するためには、線形RGB空間において重み合計を計算しなければならない。それはつまり、ガンマ圧縮関数は最初にガンマ拡張によって取り除かれるということである[7]。
sRGB(英語版)色空間では、ガンマ拡張は次のように定義される。
ただし、CsRGBはガンマ圧縮されたsRGBの原色(RsRGB、GsRGB、BsRGB)のうちのいずれかの光の強さの値で、それぞれ0以上1以下である。また、Clinearは、それに線形的に対応するRGBの光の強さの値である。(こちらも0以上1以下)したがって、光度は3つの線形的な光の強さの値の重み合計として計算される。sRGBの色空間は、CIE1931色空間では線形光度Yで表され、以下のように与えられる。
- .[8]
係数は、人間の三色型色覚における各色の認識の強さを測定したものを表しており、原色ごとに異なる値である。特に、人間の視覚が最も敏感に反応するのは緑で、最も反応が鈍いのは青である。グレースケールの強さを線形のRGBに変換する際、3つの原色の光の強さは全て同じ値(計算によって導かれた線形光度Y)に設定されている。(この時、(R,G,B)=(Y,Y,Y)となる。)線形光度は通常ガンマ圧縮して非線形表現に戻さなければならない。しかしsRGBでは、3原色の強さの値が全て、上に示したガンマ拡張の逆操作であるガンマ圧縮によって求められるYsRGBに設定されている。
実際には、3原色の強さの割合が全て同じであるため、値をsRGBおよび単一チャンネル表現に対応した画像フォーマットに一度保存するだけでよい。sRGBの画像を認識できるウェブブラウザやその他のソフトウェアは、sRGBを用いている時には、通常3原色が全て同じ値である場合のカラー画像とグレースケールの画像で全く同じ処理が行われる。
映像システムにおけるluma符号化
[編集]PAL、SECAM、NTSCなどの標準的なカラーテレビや映像システムで用いられるYUVやそれに似た色空間における画像では、非線形luma要素(Y’)がガンマ圧縮された重み合計としての原色の強さから直接計算される。重み合計は、色度法においてグレースケールの計算で使われるようなガンマ値の拡大や圧縮をせずに直接求められる。PALやNTSCで用いられるYUVモデルやYIQモデルでは、Rec.601のluma(Y')を次のように計算する。
ここで、文字にプライムをつけたのは、先述のガンマ圧縮された線形のRGBおよびYと区別するためである。ATSCによって開発されたHDTVに用いられるITU-RRec. 709では異なる係数が用いられており、lumaを次のように計算する。
- .
この係数は先のsRGB法での係数と同じだが、ガンマ圧縮値がそのまま式に代入されるため、色彩の効果はsRGBとは異なる。
普通はこれらの色空間は画像表示のためのレンダリングの前にR’G’B’に戻される。精度が十分高ければ、画像を正確にレンダリングできる。
しかし、luma要素自体が画像のグレースケール表現の代わりとなる場合、元の画像の光度は保存されない。2色は同じluma(Y')をとることができるが、CIE線形光度Yが異なる(そのため非線形光度YsRGBも異なる)ため、見る人には元のカラー画像より明るいか、暗くなって見える。同様に、同じ光度Yを持つ2つの色(この時YsRGBも等しい)はY’の定義より異なるlumaを持つことになる[9]。
多チャンネルのカラー画像の単一チャンネル版としてのグレースケール
[編集]カラー画像は固定されたいくつかの色チャンネルからなることが多い。それぞれのチャンネルはチャンネルの光の強さの値を示している。例えば、RGB画像は赤、青、緑の3つの独立した原色のチャンネルからなる。またCMYK画像はシアン、マゼンタ、イエロー、ブラックのインクを合わせて生成される。
以下にRGBのフルカラーの画像をそれぞれの色チャンネルに分けた画像の例を示す。左の列は原色の単独のチャンネル、右の列はそれらをグレースケールで表したものである。
これは可逆的な変換である。別々のグレースケールチャンネルからフルカラーの画像を作ることもできる。オフセットを用いてチャンネルを分断し、回転などの操作を加えることで、元の画像を正確に復元するのではなく画像に新たな効果をつけることができる。
脚注
[編集]注釈
[編集]- ^ 写真でよく使われるJPEGは非可逆圧縮かつYCbCr形式であるが、一般的に色差信号CbとCrは間引かれ、縦横2×2の4ピクセルごとに保存される4:2:0形式が使われる。クロマ・サブサンプリングの記事も参照のこと。YCbCrやYUVは通例ピクセルあたり24ビットのRGBに変換して表示されるが、ソフトウェア(CPU)で変換処理を実行すると負荷が高いため、Direct2Dのように入力データはネイティブYCbCrとして扱い、変換処理をハードウェア(GPU)にオフロードするAPIもある[2]。
- ^ バンディングはデジタル画像や動画におけるデジタルアーティファクトの一種であり、階調数が不足している場合にグラデーションがなめらかにならずピクセル境界が見えてしまう現象のことである。多くの画像処理ソフトウェアで利用可能なアート効果のポスタリゼーション(英語の正しい発音に近いカナ表記は「ポスタライゼーション」だが、日本語では「ポスタリゼーション」と表記されることが多い[3])と似ているが、バンディングは色の量子化や非可逆圧縮の過程で発生するデジタルアーティファクトであり、画像や動画の劣化・品質低下としてみなされる、望ましくない現象である。バンディングは錯視現象の一種であるマッハバンドと混同されることが多い[4]。
出典
[編集]- ^ Stephen Johnson (2006). Stephen Johnson on Digital Photography. オライリーメディア. ISBN 0-596-52370-X
- ^ JPEG YCbCr Support - Win32 apps | Microsoft Learn
- ^ posterizationの意味・使い方・読み方|英辞郎 on the WEB
- ^ 「バンディング」って何?「マッハバンド」は誤用?調べてみました! - コンポジゴク
- ^ Poynton, Charles A. "Rehabilitation of gamma." Photonics West'98 Electronic Imaging. International Society for Optics and Photonics, 1998. online
- ^ Charles Poynton, Constant Luminance
- ^ Bruce Lindbloom, RGB Working Space Information (retrieved 2013-10-02)
- ^ Michael Stokes, Matthew Anderson, Srinivasan Chandrasekar, and Ricardo Motta, "A Standard Default Color Space for the Internet - sRGB", onlinePart 2.の終わりの行列を参照
- ^ Charles Poynton、 The magnitude of nonconstant luminance errors in Charles Poynton,、A Technical Introduction to Digital Video、ニューヨーク: ジョン・ワイリー・アンド・サンズ、 1996年