有名なトンマッパ手法から基礎を勉強します。
Photographic Tone Reproduction for Digital Images
Reinhard 2002
Introduction
撮影の人工処理をまねします。
1.広いdynamic rangeをディスプレイが表示できる範囲にマップする時、経験でmiddle grayの値を選んで、中間値として使います。グローバルの手法に対応します。
2.画像の暗い部分を明るくするあるいは明るいところを暗くする。ローカルの手法に対応します。
Global
1.画像全体のlog average輝度を計算します。$L_{w}$は各ピクセルの輝度です。
$$\hat L_{w} = \frac{1}{N}e^{\sum \left ( log(\delta + L_{w}) \right )} \tag{1}$$
2.aでマップします。a∈(0,1)。全体的に輝度がノーマルの時、a = 0.18。
$$L = \frac{a}{\hat L_{w}}L_w \tag{2}$$
0.18にした原因: Renowned photographer Ansel Adams claimed that the globalaverage perceived luminance of mid-grey for photography is 18% of visible light [8], which has been the anchor for many TMOs.
3.画像に数少ないがとても明るいピクセル(空とか)があるため、明るい範囲を圧縮します。一番簡単な方法は
$$L_{d} = \frac {L}{1+L} \tag{3}$$
上方凸の関数です。
Local
全体のlog average輝度ではなく、ピクセルの近傍から平均値を計算し、Lとして使います。近傍になる条件は範囲内で大きな明暗差がないことです。一番大きいな近傍を探したいです。
1.各ピクセルに半径が違う二つのガウシアンフィルタをかけて、値の差を求めます。もし範囲内で激しい明暗変化がなければ、差は小さいはずです。
2.半径をかえつつ、差の一番大きい時の小さいほうのフィルタサイズを近傍にします。
3.log average輝度を計算し、(3)に代入します。これで、暗い近傍にある明るいピクセルはより明るくなって、明るい近傍にある暗いピクセルはより暗くなります。
実際使ってみましたが、コントラストが強くなった一方で、ノイズにも見えます。
A Tone Mapping Algorithm for High Contrast Images
Drago