Bit Depth/jp

ビット深度

イントロダクション
デジタル画像のことを話す中で"8-ビット", "16-ビット", "24-ビット", "32-ビット", "64-ビット" "96-ビット"という用語を聞いたことがあると思います. この項はそれらについての説明です.

デジタル画像は何百万個ものピクセルで構成されていて、各ピクセルが1つ以上のカラーチャンネルを表現しています. グレースケールに必要とされるのは、1つのカラーチャンネルだけです（0という値が純粋な黒を意味し、255が純粋な白を意味し、その間の値は黒と白の間のグレーを意味します）. RGBカラー画像を表現するには3つのチャンネルが必要で、1つがレッド、1つがグリーン、そしてもう1つがブルーを表現しますが、各チャンネルが表現するのは強さだけで、グリーンチャンネルのピクセルが表現するのはそれが元々グリーンだからではありません. RGB カラーモデルにおいて、カラーは全て3つのチャンネルによる相互作用で決まります.

1つのピクセルが3以上のチャンネルを持っていることもあります、例えば1つのピクセルが更にアルファチャンネル（透明性を示す）、或いは赤外線チャンネルを含んでいることもあります.

ビット深度が高ければ、より正確に色を表現することが出来ますが、代わりに演算時間が増えたり、より大きなRAM容量を必要としたりします.

何のビット数?
ビット深度は、“ビットパーピクセル”（BPP）或いは“ビットパーチャンネル”（BPC）の数値として表現されます. 大変ポピュラーなJPEGフォーマットの画像は通常8ビットパー“チャンネル”で保存されています. 1ピクセルに3つのカラーチャンネルがあるので24ビットパー“ピクセル”になります. 様々なビット深度をサポートしているTIFF画像は、例えば32ビットパーチャンネルで保存すれば、96ビットパーピクセルになります.

従って、ビット深度を表現する場合は、曖昧にならないよう、何のビット数かをはっきりさせる必要があります. 例えば、“32-ビット”画像という言葉だけでは、32ビットパーチャンネルの画像なのか、それとも8ビットパーチャンネルで4つのチャンネルを持つ画像なのか分からないからです.

精度
ビット深度の違いとは何でしょう？それは、色を表現するためにより多くのビットを使えば、色表現がより正確になる、という意味を持ちます.  1ビットパーチャンネルの精度とは、値を表現するためのビット数が1ビットだけということです. 1ビットは0か1の2つの値だけしか表せません. 通常、これは黒と白を意味します.  2ビットパーチャンネルであれば、色を表現するために使えるビット数が2ビットという意味になります. 1ビットの値は0か1の2つで、ビットが2つあるので以下の様に合計4つの値を表現することが可能です： [00] = 0 [01] = 1 [10] = 2 [11] = 3 ここで０は黒を意味し、3を白とするなら、更に2つのグレーを表現できることになります.  更に、8ビットパーチャンネルの精度になると、8ビットで255個の値の表現が可能となります： [0000 0000] = 0 [0000 0001] = 1 (...) [1111 1110] = 254 [1111 1111] = 255 　つまり、0が黒、255が白を表すとすれば、更に254種類のグレーを表現することが出来るということです. これがJPEG形式の画像が使っている8ビットパーチャンネルという精度です. この精度があれば、sRGB色空間では、ポスタリゼーションが目立つことなく、殆どの場合、写真として見るには十分なので、保存画像はインターネットなどに掲載出来ます. しかし、この精度では、後で更に調整を加えるための中間画像としての保存、或いは最終画像としての保存にも適しません. 調整の度合いにもよりますが、ポスタリゼーションというアーティファクトが発生するリスクがあるからです. 8ビットパーチャンネルの精度では、ポスタリゼーションを発生させずにハイダイナミックレンジのシーンを線形的に表現するには不十分なのです. 理論的に言えば、ハイダイナミックレンジのシーンを8ビットパーチャンネルの精度で線形的に表現することは可能ですが、数値がかけ離れているため重度のポスタリゼーションが起こるでしょう. 例えば、晴れた日の公園で撮影した時に、黒の値が0、白の値が1000000だったとしましょう. 0を0、255を1000000に宛がうことは可能ですが、元画像の残りの999999個の諧調に対し、宛がうことのできるビット数は254個しか残っていません.  16ビットパーチャンネル（16ビット整数）の精度は、65536個の値を表現できるビット数です： [0000 0000 0000 0000] = 0 [0000 0000 0000 0001] = 1 (...) [1111 1111 1111 1110] = 65534 [1111 1111 1111 1111] = 65535 　通常、デジタルカメラは12ビット、或いは14ビットの精度で光を捉えています（但し、ノイズと電子回路の不正確から、最下位のビットの質は疑わしいものです）. 16ビットパーチャンネルの精度は殆どの写真家のニーズを満たし、後に調整を行うための中間画像としても十分な精度です（その画像をデータ損失なしに他のプログラムに移動できる精度）.  16ビット 浮動小数点イメージ、とも呼ばれる画像は、16ビット整数の画像より広いレンジの値を表現できます. 16ビット整数は精度が一定しておらず、四捨五入される値もあります.   32ビットイメージになると、表現に使えるビット数はチャンネルごとに43億にもなりますが、16ビットイメージの約2倍に相当するディスクスペースが必要です. 加えて、32ビットイメージをサポートするプログラムはあまりありません.  

ガンマ補正
画像を保存する際にガンマ補正を使うことが出来ます. これは色表現を行うための値を、画像のハイライト部分よりシャドウ部分に多く割り当てる補正です. この方が人間の目の感度に合うからです. この補正により8ビットJPEGであれば、最大log2((1/2^8)^2.2)=17.6(EV)のダイナミックレンジを表現できることになり、事実、最新カメラのダイナミックレンジ14EVを上回ります（8ビットJPEG画像でも時々カメラのシャドウノイズが現れるのはこのためです）. しかし、JPEGの値の分布は非線形的なため、rawファイルのように線形的に記録するのに比べ精度が落ちます. 実際にはその画像が最終出力で、再度調整を加えないのであれば問題になるほどのものではないでしょう. しかし、写真をrawデータで保存しておいて、RawTherapeeの様な先端現像プログラムを使って処理を行えば、写真の質を大幅に改善することが可能です.

RawTherapeeの調整後
RawTherapeeによる編集を終え、画像の保存準備が整えば、出力プロファイルの形式とビット深度及び色空間とガンマ補正の選択を行います. RawTherapeeによる処理を終えた後に、16ビットをサポートする別の編集プログラムで更に編集を行う予定であれば、画像を16ビット形式で保存することを奨めます. 非圧縮16ビットTIFFによる保存は処理時間も短いので中間画像の保存として奨められます. 32ビットファイルになると、画像サイズが約2倍になる上、それをサポートするプログラムも多くありません.