画像合成によるHDR(ハイダイナミックレンジ)合成

デジタルカメラで撮影していると、特に晴れた屋外などではダイナミックレンジの狭さ(白飛びや暗部の潰れ)に悩まされることになります。最近のデジタルカメラでは、こうしたダイナミックレンジの狭さを補う方法としてHDR(ハイダイナミックレンジ)合成の機能を持っているものが増えてきました。

HDR合成では、露出を変えて複数枚の画像を撮影し(オートブラケット撮影)、それらの画像を組み合わせて一枚の画像にまとめることでダイナミックレンジを拡大(というよりハイライトから暗部までをjpgなど出力画像の表現力の範囲に押し込める)します。

複数枚の画像を合成することで、黒く潰れた部分はより明るい画像の潰れていない暗部が、白く飛んだ部分はより暗い画像のハイライトで階調が残っている部分が合成されることになります。

ただ、単純に合成すると、暗い部分がより明るい画像との合成で持ち上げられ、ハイライトはより暗い部分との合成で暗く沈みこむ、つまりコントラストが低下してしまいます。そこで、各種の機器や画像処理ソフトに搭載されているHDR合成機能では全体のコントラストを調整したり、白飛びや潰れ部分を認識してその部分を集中的に補完するなどハイダイナミックレンジで高コントラストの画像を生成すべく様々な画像処理技術が研究されているようです。

今回は、HDR合成のイメージを確認するために、まず明暗差をつけた二枚の画像を単純な合成(平均化)してみましょう。

テスト用に2枚の24ビットBMPを読み込んで合成画像を出力するプログラムを作ってみました。コンソール用のCプログラムになっているので、ソースをダウンロードしVC++などのコンパイラでcomphdr.exeといった実行ファイルを生成してください。

comphdr 画像1 画像2 合成画像の保存先

とすると、画像1と画像2が合成(各ピクセルの平均化)され、保存されます。ただし、同じ大きさの画像を指定するようにしてください。

では、さっそくこのプログラムでHDR合成の実験をしてみましょう。使用する画像は、コンデジで撮影した近くの風景写真です。オートブラケットでシャッター速度を変えて作成した画像の一部を切り出し、240*240ピクセルにリサイズして使ってみました。

プログラムで合成処理を行い出力された画像を並べてみると……

画像1 画像2
画像3

上の段が、撮影画像、下の段が合成結果です。合成画像は、全体に「落ち着いた」感じで、やはりコントラストは低下傾向ですね。

ただ、明るい画像では飛んで白一色となっている空に模様が残っていたり、暗い画像で見えにくかった木の陰が見やすくなったりと「良い所取り」になっていてハイダイナミックレンジ風の画像には仕上がりました。一定の効果はあるようです。

また、各画像をフォトレタッチソフトに読み込んで「調整」「明度コントラスト調整」でヒストグラムを比べてみると、合成画像は全体にならされた(中心部に寄せ集められた)ような感じになっています。

プログラムソース

今回のような単純な画像合成でもそれなりの効果が得られたので、画像の特性を見極めてHDR合成を行う画像処理ソフトを使えば、晴れた屋外のコンデジ撮影も怖くなくなるかもしれません。これからデジタルカメラを選ぶ際は、HDR合成やオートブラケット機能にも注目ですね。