画像のダイナミックレンジと階調
画像の量子化 では、画素の明るさを決められた段階値に変換することを学びました。このとき決まるのは、画像が「どれだけ細かく」「どれだけ広い」明暗を表せるかという、画像の表現力そのものです。
ここでは、画像が表現できる明暗の幅とその細かさに注目し、限られた階調で豊かな明暗を描き出すための工夫を見ていきます。
ダイナミックレンジ
私たちが目にする実世界には、まぶしい太陽の光から夜の暗闇まで、非常に幅広い明るさが存在します。
そのうち、画像が表現できる、最も暗い値から最も明るい値までの比のことをダイナミックレンジといいます。
この比が大きいほど、最も暗い部分から最も明るい部分までの間に大きな開きを持たせられるため、明るい部分と暗い部分を同時に、幅広く表現できることになります。
なぜ「比」で表現の幅がわかるのでしょうか。
最小輝度はこれ以上暗く区別できない下限、最大輝度はこれ以上明るく区別できない上限です。ダイナミックレンジの比は、この下限を1としたときに上限が何倍にあたるかを表しています。
たとえば256対1なら、最も明るい部分は最も暗い部分の256倍の明るさまでしか表せない、ということです。
人間の目は明るさを「何倍明るいか」という比で感じ取るため、100の差でも、暗い場所では大きな違いに、明るい場所ではわずかな違いに見えます。
だからこそ、表現できる明暗の幅は引き算ではなく比で測るのが自然なのです。
私たちが実世界で目にする明暗の幅と、一般的なデジタル画像の表現力には大きなギャップがあります。
実世界のダイナミックレンジはきわめて広く、晴天の屋外では明るい部分と暗い部分の差が約100000対1にもなります。一方、一般的によく使われる8ビット画像 が表現できる幅は256対1程度にとどまり、実世界の明暗の幅にはまったく及びません。
8ビット画像のように、ダイナミックレンジが狭い一般的な画像をLDR画像(Low Dynamic Range)といいます。
LDR画像では、実世界の広い明暗を狭い範囲に押し込めることになるため、明るすぎる部分や暗すぎる部分の情報が失われてしまいます。
晴天の屋外を撮影すると、日向と日陰の明暗差が大きすぎて、明るい空が真っ白になる「白飛び」や、暗い影が真っ黒につぶれる「黒つぶれ」が起こります。これは、実世界のダイナミックレンジが画像のダイナミックレンジを大きく超えているために起こる現象です。
8ビット量子化と階調
LDR画像が表現できる明暗の幅が256対1程度になるのは、量子化のビット数に由来します。
一般的な画像は各色8ビットで量子化されており、1つの画素がとれる明るさの段階は2の8乗、すなわち256段階です。この段階の細かさを階調といいます。
階調が多いほど、明るさの変化をなめらかに表現でき、階調が少ないと、明暗の境目が縞模様のように見えてしまいます。
ここで、ダイナミックレンジと階調は別の概念であることに注意が必要です。
ダイナミックレンジは表現できる明暗の「幅」であり、階調はその幅を「いくつに区切るか」という細かさです。8ビット量子化では、限られた256段階の階調で明暗を区切るため、表現できる幅にも細かさにも上限が生まれます。
つまり、限られた階調数のなかで、いかに豊かな明暗を表現するかが課題になります。
この課題に正面から取り組むのが、次に見るハーフトーニングの技術です。
ハーフトーニング
白と黒の2階調しか表現できない装置を考えてみます。たとえば、白黒プリンタは、インクの有無、すなわち白か黒かの2値しか表現できません。
このような装置でも、白い点と黒い点をうまく散りばめて分布させると、少し離れて見たときに灰色のように見せることができます。
新聞の白黒写真や、古いレーザープリンタの印刷物を拡大すると、無数の小さなドットの集まりでできていることがわかります。インクは黒一色でも、ドットの密度を変えることで、中間調(灰色)の濃淡を表現しているのです。
このように、点の分布パターン(配列密度)によって、中間調を視覚的に再現する技術をハーフトーニングといいます。
ハーフトーニングは、人間の目が細かい点の集まりをならして「平均的な明るさ」として知覚する性質を利用したものです。この性質については、さまざまな加法混色 で詳しく学ぶことができます。
ハーフトーニングには、点をどのように分布させるかによっていくつかの方法があります。ここでは代表的な3つの手法を見ていきます。
濃度パターン法
濃度パターン法は、異なる濃さに見える点のパターンをいくつも用意しておき、各画素について「その明るさにいちばん近いパターンを選んで置き換える」手法です。
塗りつぶしパターンを用意する
まず、3×3などの小さなマス内の点を塗りつぶしたパターンを用意します。塗る点が0個(すべて白)から9個(すべて黒)まで揃えれば、10種類の濃淡配置を表すパターンが手に入ります。これが、濃度を表現するための「見本帳」になります。
各画素の明るさを読み取る
次に、元画像の画素を1つずつ見て、その画素がどれくらいの明るさかを読み取ります。
近いパターンを選んで置き換える
読み取った明るさに対して、見本帳の中からいちばん近い濃さとなるパターンを選びます。そして、その1画素を、選んだパターン(3×3の点の集まり)にまるごと置き換えます。
暗い画素には点の多いパターン(密集して濃く見える)、明るい画素には点の少ないパターン(すき間が多く薄く見える)が割り当てられます。
このように、1つの画素を、その明るさに最も近い「点のパターン」に展開することで、より細かい濃淡に見せることができます。
ただし、1画素が3×3の点に広がるため、同じ表示面積に収められる元画像の画素数は減り、解像度は粗くなるという弱点があります。
パターンのマスを大きくすれば表せる濃度の段階は増えますが、そのぶん画像はさらに粗くなる、という引き換えの関係になっています。
ディザ法
ディザ法は、画像を小さなブロックに分け、ブロックと同じ大きさのディザパターンと見比べながら、各画素を白にするか黒にするかを決めていく方法です。
画像をブロックに分ける
まず、画像全体を4×4画素のブロックに区切ります。以降の白黒の振り分けは、このブロックを単位に行います。
基準値を用意する
次に、4×4の各マスに「明るさの基準値」を書き込んだディザパターンを用意します。ブロックと同じ大きさなので、ブロックにぴったり重ねると、各画素にちょうど1つずつ基準値が対応します。
基準値と比べて白黒を決める
ブロック内の各画素について、その画素の明るさと、重なった位置のディザパターンの基準値を比べます。画素のほうが明るければ白、暗ければ黒にします。
ディザパターンの基準値はマスごとに少しずつ違うため、同じ明るさが一面に続く領域でも、白になる画素と黒になる画素がほどよく入り混じります。これが少し離れて見ると、擬似的な中間調(灰色)として知覚されます。
濃度パターン法のように1画素を複数の点に展開しないため、1画素はあくまで1画素のまま白黒どちらかに置き換わります。そのため、元の画像と同じ解像度を保てるのが利点です。
誤差拡散法
誤差拡散法は、ある画素を2値化したときに生じた量子化誤差を、まだ処理していない周囲の画素に分配する方法です。
ある画素を白か黒かに丸めると、本来の明るさとの間にずれ(誤差)が生じます。
誤差拡散法では、この誤差を捨てずに周囲の画素へ配り、それらの画素値に上乗せします。
こうすることで、ある画素で出た誤差を周囲が補い合い、画像全体としては本来の濃度が保たれます。
中でも、注目している画素の誤差を、右・右下・下・左下の4方向の画素に、決められた重みで分配する方式が代表的です。
誤差を周囲へ散らすことで、規則的なパターンが目立ちにくく、もっとも自然でなめらかな中間調が得られます。
HDR画像とトーンマッピング
ハーフトーニングは、限られた階調を「見せ方」の工夫で補う技術でした。
これに対し、画像が持てるダイナミックレンジそのものを広げてしまおう、というのがHDR画像(High Dynamic Range)の発想です。
HDR画像は、各画素を32ビットの浮動小数点などで記録することで、人間が知覚できる輝度範囲の全体をカバーできます。これにより、白飛びや黒つぶれを起こさずに、明るい部分と暗い部分の情報を同時に保持できます。
しかし、私たちが普段使うディスプレイの多くは、256段階のLDRしか表示できません。そのため、豊かな情報を持つHDR画像も、そのままではLDRのディスプレイに正しく映し出せないのです。
そこで、HDR画像の広い輝度範囲を、LDRディスプレイで表示できるように圧縮・変換するトーンマッピングという処理が必要になります。広いレンジを狭いレンジに賢く押し込めることで、明るい部分の階調も暗い部分の階調も、できるだけ失わずに表示しようとする技術です。
ただし、この圧縮には副作用もあります。たとえば、高輝度の領域とその周囲を強調しすぎると、明るい部分の周囲に明るい輪郭(光の滲み)が現れてしまうことがあり、この現象はハロと呼ばれます。
夕暮れ時のHDR写真をトーンマッピングすると、太陽や街灯のまわりがぼうっと白く光るように見えることがあります。これがハロの一例です。
このように、ダイナミックレンジと階調は、画像がどれだけ豊かに明暗を表現できるかを決める基本的な性質であり、その制約とどう付き合うかが、画像処理やCGのさまざまな技術につながっていきます。