SATOXのシテオク日記

~ふもっふ、ふもふも~

今更聞けないHDR

HDRというのをご存じでしょうか。最近特に良く出てくる単語なので聞いた事がある方は多いかと思います。
HDRはハイダイナミックレンジの略でレンジ=Rangeは範囲なので、まぁ大きな範囲という意味ですかね。
HDRはコンピュータやデジカメなんかの写真に出てくるかと思います。最近のデジカメやiPhone4なんかでも、写真撮影にHDRで撮影するモードが追加されています。

目のコントラストレンジ
デジカメや人間の目もそうなんですが、映像をとらえる場合、可変ながらレンジが決まっています。
例えば、わりと暗いところで目をこらしたとき、暗い所なりに光量を検知し物を見て取れますが、そのときにとても明るい物が視界に入ると、その明るい物のディテールを認識する事は出来ません。逆に、とても明るい太陽の下で、例えば車の下の暗いところにある缶のディテールは見えにくいんです。
ちょっと判りづらいですかね。
人間の目にはいわゆる瞳孔というものがあって、入り込む光の量をコントロールできます。
暗いところと明るいところでそれぞれ取り込む光の量を変える事が出来るのです。
もしこの機能がないと、明るいところから暗いところまですべてのレンジを脳が解析しなければならない事になり、そのディテールが甘くなってしまうというわけです。(強すぎる光の刺激的にも問題があります)
これはデジカメなんかでもほとんど同じ事が言え、明るいところだと画像の暗いところが潰れ、暗いところだと明るいところが潰れますよね。
これがここで言う「レンジ」とその特性です。
 
コンピュータのコントラストレンジ
コンピュータの中で使われる色はほとんどの場合、赤緑青それぞれ256段階で表されます。256段階=0〜255はいわゆる8ビットで表現でき、RGB併せて24ビットカラーなんて言ったりします。(余談ですが32ビットカラーは8ビットがダミーだったり、透明度を表したりします)
例えばRGB(255,0,0)は赤、RGB(0,255,0)は緑、RGB(0,0,0)は黒、RGB(255,255,255)は白となります。
モノクロだけで明暗を表すと、たった256段階でしか表現できないのです。
 
ハイダイナミックレンジ
さて、ハイダイナミックレンジのお話。
デジカメの話をすると、明るいところだと黒が潰れ、暗いところだと白が潰れてしまいますが、それぞれ写真を撮り、ディテールが良く現れている部分を合成した写真を「ハイダイナミックレンジ合成写真」と言います。
本来、人間の目としてもあり得ない映像なんですが、暗いところも明るいところもディテールが良く現れている不思議な写真を撮る事が出来ます。[作例]
デジカメのHDR機能はホワイトバランスを調整した複数の写真を撮影し、合成する事でHDR合成写真を作り出してるわけです。
コンピュータの話としては、純粋にRGBのビット数を増やす事で表現力を増したり、整数ではなく浮動小数などをRGBの数値として使う事で、ディテールをつぶさずに表現する事が出来たりします。
CGのフィルタ計算や3Dモデルなどのレンダリング計算の過程などではビット拡張や浮動小数がよく使われます。整数で計算の過程で一度ゼロになってしまうとどんな値を掛けてもゼロのままですが、ゼロよりも少しでも大きな浮動小数であればかけ算などでゼロ以外の値になる可能性がある事は判りやすいですよね。
余談ですが、HDMI 1.0のディスプレイ規格上、30ビットまでの色しか表現できませんでしたが、HDMI 1.3からは48ビットの色を表現できる規格が追加されました。いわゆる「xvYCC」です。ゲームの映像としてはほとんど意味がないと思いますが、動画のデコードした結果などでは48ビットカラーの映像が特にきれいに見える事があるかと思います。
 
というわけで、人間の目やデジカメで取った映像のコントラストレンジを広くした場合やこれまでのコンピュータの画像計算処理などでの精度を上げること、それからモニタ出力時の色レンジを増やした場合などをハイダイナミックレンジというわけです。
ほとんどの場合、デジカメの「ハイダイナミックレンジ合成」のことを「HDR」と言いますけどもね。