露光時間1000μs |
露光時間6000μs |
露光時間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型の画像が出力されます。
HDRの使い方
fnFIE_hdr_calibrate_robertson() + fnFIE_hdr_execute() では、露光量入力や可視化の際のトーンマッピングが必要で、キャリブレーションは高速ではありません。一方で物理的な整合性が高いHDR画像が得られます。
fnFIE_hdr_mertens() では、パラメータが少なくトーンマッピングも不要で手軽にHDR合成が行えます。出力画像はコントラストが低くなりがちなHDR合成において、比較的はっきりした画像になります。
トーンマッピングについて、基本的手法であるガンマ変換と、ガンマ変換より優れた結果になることが多いHoodの手法が利用出来ます。
| 手法 | キャリブレーション | 可視化のためのトーンマッピング | 特徴 |
|---|---|---|---|
| linear+tonemap | 高速 | 必要 | 自然な見た目 パラメータが比較的少ない |
| Robertson+tonemap | 低速 | 必要 | 物理的な整合性が高い パラメータが比較的多い |
| Mertens | 不要 | 不要(直接LDR画像生成) | HDR画像は生成出来ない 低速 パラメータが比較的少ない コントラストがはっきりしていることが多い |
具体的な関数の使用方法は、サンプルコード を参照して下さい。
HDR合成の分野では逆方向(画素値からセンサでの値)の関数がしばしば利用され、逆カメラ応答関数(inverse camera response function, icrf)と呼ばれます。
逆カメラ応答関数を推定し放射輝度画像を得る古典的な手法にはDebevecによる手法[1]が知られています。 本ライブラリでは、線形を仮定することでより単純化した手法と、Debevec法よりも安定した値が得られる傾向のあるRobertson法、応答関数を推定せずに直接にLDR画像を得られるMertens法を使用できます。
得られる画像や関数の性質として、パラメータが少なく手軽で、画像の見た目も大きく崩れにくいですが、カメラ応答関数は線形とは限らないため粗い近似となっています。また逆カメラ応答関数を推定する fnFIE_hdr_calibrate_robertson() 手法と比較すると、キャリブレーションが高速です。
linear crf + Hood
Robertsonの手法では、逆カメラ応答関数と放射輝度を交互に推定し、変化が十分小さくなった逆カメラ応答関数から推定した放射輝度画像を得ます。
本ライブラリでは fnFIE_hdr_calibrate_robertson() にてカメラ応答関数を推定した後、 fnFIE_hdr_execute() を実行することでHDR画像を得ます。 また、一度逆カメラ応答関数を推定した光学系を再び使いHDR画像を作成する場合、 fnFIE_hdr_calibrate_robertson() は実行せずとも、 推定した逆カメラ応答関数を利用し fnFIE_hdr_execute() を利用することで高速にHDR画像を得ることが出来ます。
Robertson法の性質として、逆カメラ応答関数が安定した値となる傾向にあるため、HDR画像もその性質を引継ぎます。 一方で少なくとも一回は fnFIE_hdr_calibrate_robertson() を行う必要があり、このキャリブレーションに時間がかかることがあります。
Robertson + Hood
本ライブラリでは fnFIE_hdr_mertens() にて利用できます。
Mertensの手法にて得られる画像の性質として、コントラストがはっきりしすることが多いです。
Mertens
深さ6 |
深さ8 |
深さ10 |
fnFIE_img_copy_ex()による単純な正規化では視認性が悪い例 |
tonemapping(Hoodの手法)による改善例 |
本ライブラリでは fnFIE_hdr_tonemap_gamma() にて利用できます。
ガンマ変換のガンマ値 gamma について、大きいほど明るい画像になりますが、同時に平坦さも強くなります。
tonemappingはガンマ変換、ガンマ値=2.0 |
tonemappingはガンマ変換、ガンマ値=2.5 |
tonemappingはガンマ変換、ガンマ値=3.0
|
fnFIE_hdr_tonemap_hood() にて利用できます。
パラメータ alpha は、大きいほど明るくなりますが、同時に画像全体が平坦になります。
tonemappingはHood、alpha=0.35 |
tonemappingはHood、alpha=0.5 |
tonemappingはHood、alpha=0.65
|