説明
[HDR合成]

HDR合成について

HDR全般について

本ライブラリは、HDR合成の機能を提供します。HDR合成では、カメラを固定し、異なる露光量で撮影した複数枚の画像を入力として、白飛びや黒つぶれを抑えた1枚の画像を作成します。

HDRとLDR

HDR(high dynamic range)画像は画素値のレンジが広く、そのままでは視認しにくいため、しばしばUC8型等に変換されます。 変換後の画像はLDR(low dynamic range)画像と呼ばれます。 また、この目的の関数をトーンマッピングと呼びます。 トーンマッピングでは、人間の目の特性を考慮した関数がしばしば用いられます。

HDR合成の使い方

撮像対象を固定、カメラを固定し、露光量が相異なるようにして撮像した画像が複数必要です。

fie_hdr_sample_img_01.png

露光時間1000μs

fie_hdr_sample_img_06.png

露光時間6000μs

fie_hdr_sample_img_15.png

露光時間15000μs

またHDR合成は手法によって利用方法が異なります。 fnFIE_hdr_execute()では、HDRオブジェクトと複数画像をまとめた画像スタック等を入力しDOUBLE型のHDR画像が出力されます。HDRオブジェクトは fnFIE_hdr_calibrate_linear()fnFIE_hdr_calibrate_robertson() の出力として得られます。出力HDR画像に対してトーンマッピングを行い、 LDR画像に変換することで人間の目で見やすい画像が得られます。 Mertensの手法である fnFIE_hdr_mertens() の場合、複数画像をまとめた画像スタック等を入力し、UC8型の画像が出力されます。

fie_hdr_flow.png

HDRの使い方

HDR合成の各手法の性質

fnFIE_hdr_calibrate_linear() + fnFIE_hdr_execute()とする場合、露光量入力や可視化の際のトーンマッピングは必要ですがキャリブレーションは高速です。自然な見た目の画像が得られます。

fnFIE_hdr_calibrate_robertson() + fnFIE_hdr_execute() では、露光量入力や可視化の際のトーンマッピングが必要で、キャリブレーションは高速ではありません。一方で物理的な整合性が高いHDR画像が得られます。

fnFIE_hdr_mertens() では、パラメータが少なくトーンマッピングも不要で手軽にHDR合成が行えます。出力画像はコントラストが低くなりがちなHDR合成において、比較的はっきりした画像になります。

トーンマッピングについて、基本的手法であるガンマ変換と、ガンマ変換より優れた結果になることが多いHoodの手法が利用出来ます。

手法 キャリブレーション 可視化のためのトーンマッピング 特徴
linear+tonemap 高速 必要 自然な見た目
パラメータが比較的少ない
Robertson+tonemap 低速 必要 物理的な整合性が高い
パラメータが比較的多い
Mertens 不要 不要(直接LDR画像生成) HDR画像は生成出来ない
低速
パラメータが比較的少ない
コントラストがはっきりしていることが多い

具体的な関数の使用方法は、サンプルコード を参照して下さい。


HDR合成の手法について

HDR合成は様々な手法がありますが、本ライブラリとかかわりのある手法を紹介します。また文中の放射輝度やカメラ応答関数について、分光応答で重み付けされた相対量とします。

カメラ応答関数、逆カメラ応答関数
カメラ応答関数(camera response function, crf)とは、カメラが光をどのように数値に変換するかを表す関数です。 より詳しくは、カメラのセンサが受け取った露光量(放射輝度と露光時間の積)から画素値への関数です。

HDR合成の分野では逆方向(画素値からセンサでの値)の関数がしばしば利用され、逆カメラ応答関数(inverse camera response function, icrf)と呼ばれます。

逆カメラ応答関数を推定し放射輝度画像を得る古典的な手法にはDebevecによる手法[1]が知られています。 本ライブラリでは、線形を仮定することでより単純化した手法と、Debevec法よりも安定した値が得られる傾向のあるRobertson法、応答関数を推定せずに直接にLDR画像を得られるMertens法を使用できます。


カメラ応答関数を線形とした手法

fnFIE_hdr_calibrate_linear() にてカメラ応答関数を取得した後、 fnFIE_hdr_execute() を実行することでHDR画像を得ます。

得られる画像や関数の性質として、パラメータが少なく手軽で、画像の見た目も大きく崩れにくいですが、カメラ応答関数は線形とは限らないため粗い近似となっています。また逆カメラ応答関数を推定する fnFIE_hdr_calibrate_robertson() 手法と比較すると、キャリブレーションが高速です。

fie_hdr_linear_hood35.png

linear crf + Hood


Robertsonによる逆カメラ応答関数の推定

Robertsonの手法[2]では逆カメラ応答関数を推定します。

Robertsonの手法では、逆カメラ応答関数と放射輝度を交互に推定し、変化が十分小さくなった逆カメラ応答関数から推定した放射輝度画像を得ます。

本ライブラリでは fnFIE_hdr_calibrate_robertson() にてカメラ応答関数を推定した後、 fnFIE_hdr_execute() を実行することでHDR画像を得ます。 また、一度逆カメラ応答関数を推定した光学系を再び使いHDR画像を作成する場合、 fnFIE_hdr_calibrate_robertson() は実行せずとも、 推定した逆カメラ応答関数を利用し fnFIE_hdr_execute() を利用することで高速にHDR画像を得ることが出来ます。

Robertson法の性質として、逆カメラ応答関数が安定した値となる傾向にあるため、HDR画像もその性質を引継ぎます。 一方で少なくとも一回は fnFIE_hdr_calibrate_robertson() を行う必要があり、このキャリブレーションに時間がかかることがあります。

fie_hdr_robertson_hood35.png

Robertson + Hood


fnFIE_hdr_execute()について

本ライブラリではカメラ逆応答関数をcalibrateした後、主に入力画像、露光量、逆カメラ応答関数を利用し重み付き平均をとりHDR合成を行います。 HDRオブジェクトのexecute_methodの初期値には、calibrationに合わせた重みや平均のとり方が設定されています。 通常は必要ありませんが、 fnFIE_hdr_set_execute_method() にて初期値の他の値に設定することもできます。 Debevecの合成手法と、Robertsonの合成手法を選ぶことが出来ます。


Mertensの手法

Mertensの手法[3]は上述のHDR合成の手法と異なり、露光量は使わずに、応答関数も推定せず、直接LDR画像が得られます。

本ライブラリでは fnFIE_hdr_mertens() にて利用できます。

Mertensの手法にて得られる画像の性質として、コントラストがはっきりしすることが多いです。

fie_hdr_mertens_pylevel10.png

Mertens

ピラミッド合成

Mertensの手法では入力画像から求めたガウシアンピラミッドとラプラシアンピラミッドを重みを付けて合成する処理を行います。 fnFIE_hdr_mertens()pyramid_level_limit でピラミッド合成で用いるピラミッドの深さを決めることが出来ます。 値が大きい程優れた結果になりやすいですが、時間もかかります。
fie_hdr_mertens_pylevel6.png

深さ6

fie_hdr_mertens_pylevel8.png

深さ8

fie_hdr_mertens_pylevel10.png

深さ10


トーンマッピング

本ライブラリの fnFIE_hdr_execute() では出力画像は通常のUC8型ではなく、より大きいDOUBLE型です。 レンジが広い画像では、そのまま利用しても人間の目にとって見やすい画像でない場合が多いです。例えば fnFIE_img_copy_ex() によりmin-max正規化を行っても、視認性は良くありません。 そのためHDR画像をLDR画像に変換するトーンマッピングが用いられます。 トーンマッピングは、人間の目の性質である「暗い箇所の輝度変化には敏感であるが、明るい箇所の輝度変化には鈍感である」 という性質と合う関数が選ばれます。 本ライブラリでは、ガンマ変換を用いたトーンマッピング( fnFIE_hdr_tonemap_gamma() )やHoodの手法を用いたトーンマッピング( fnFIE_hdr_tonemap_hood() )を利用できます。
fie_hdr_linear_copy_ex.png

fnFIE_img_copy_ex()による単純な正規化では視認性が悪い例

fie_hdr_linear_hood35.png

tonemapping(Hoodの手法)による改善例


ガンマ変換

入出力画像のmin-max正規化とガンマ変換によりトーンマッピングを行う関数です。

本ライブラリでは fnFIE_hdr_tonemap_gamma() にて利用できます。

ガンマ変換のガンマ値 gamma について、大きいほど明るい画像になりますが、同時に平坦さも強くなります。

fie_hdr_linear_gamma20.png

tonemappingはガンマ変換、ガンマ値=2.0

fie_hdr_linear_gamma25.png

tonemappingはガンマ変換、ガンマ値=2.5

fie_hdr_linear_gamma30.png

tonemappingはガンマ変換、ガンマ値=3.0


Hoodの手法

Hoodの手法[4]を利用できます。ガンマ変換より自然で優れた結果になることが多いです。

fnFIE_hdr_tonemap_hood() にて利用できます。

パラメータ alpha は、大きいほど明るくなりますが、同時に画像全体が平坦になります。

fie_hdr_linear_hood35.png

tonemappingはHood、alpha=0.35

fie_hdr_linear_hood50.png

tonemappingはHood、alpha=0.5

fie_hdr_linear_hood65.png

tonemappingはHood、alpha=0.65


使用例
サンプルコード

参考文献:


Documentation copyright © 2009-2026 TOKYO ELECTRON DEVICE LIMITED.
Generated on Tue Mar 24 10:11:00 2026 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2