2017年12月5日火曜日

HDR画像の作成

HDRモニタはSDRモニタと比べて輝度比と色域が大きくなったため現実の輝度比や色の再現が可能になってきている。
そのためにも写真の輝度や色を実物に近づけて現像したい

ブラケット撮影。RawTherapeeで現像。スクリプトでHDRに統合しexrで書き出した。

rawデータは本当に線形なのかを確認してみる

例えば半分の明るさで撮影したらRGB値も半分ということなので、半分の明るさで撮影したものは2倍の明るさにすれば同じRGBになるはず
このように線形に値が保たれることにより、露光違いのrawデータから簡単にHDRに復元することが可能になる。

カラーチェッカーの撮影と現像を行う際に、あえて暗く撮影したものでも同じようになるかを試した
以下の現像はRawTherapeeを使用した

適正露出の他にあえて暗く撮影したものでテスト

現像設定 : プロファイル無し、ホワイトバランスのみ固定調整、出力プロファイルsRGB
彩度が低いのはカメラ色空間のため。

適正な露光量で撮影(1倍) 3EV暗く撮影(1/8倍) 5EV暗く撮影(1/32倍)

暗く撮影した分を現像時に明るくすると同じ色になるのか

カラーチェッカーが正しい輝度になるように現像側で微調整するが、暗く撮影したものは更に露光量の逆補正をして、ほぼ同じ見え方になることを確認した。

中段は一部を切り抜いた等倍サイズなので、明るくした分ノイズが多くなっていることが確認できる。
下段はカラーパッチの色を一色(平均化)にしたもの。
ただし、これ以上暗く撮影していくとノイズが多くなりすぎてしまうこととそれによって色まで変わってきてしまう。
なので暗く撮影されている部分はHDR合成の時に評価してはいけない。

0.25EV明るく現像(1.19倍) 3.25EV明るく現像(9.51倍) 5.25EV明るく現像(38.1倍)


以下は「RAW_to_sRGB」のカラーマトリクスを掛けてsRGB色空間へ変換したもので、同じように線形性が高いことが確認できる



ノイズ

rawデータは12~14bitあるのでダイナミックレンジは広いがノイズが無視できないためHDR合成で評価するレンジはそこまで広くしないほうがよい。

カメラの用語では「ダイナミックレンジ」や「SNR(s/n比)」等といわれる項目に関係している。
「ノイズが少ない」=「ダイナミックレンジが広い」 = 「s/n比が高い」だと思う。
ノイズが少ないカメラほどHDR合成に余裕があり、ブラケット撮影の露光差を大きくして、枚数を減らすことができる。

HDR現像の結果


100[nit]くらいの明るさが1.0になるようにすべてを現像しダイナミックレンジを実感しやすいように並べた。
太陽を除いても明るいところ10,0000[nit]~暗いところ1[nit]までコントラスト比が10万。

等倍の明るさで表示 約7EVの露光量に相当
100[nt]くらいの明るさが丁度よく見える(オフィスの照明内やPCモニタの白くらいの明るさ)。
照度300[lux]位のEV値
 
各写真の平均輝度と最大輝度[nit](オリジナル解像度で計測)
平均           140    
最大      11,700    
平均         1,480    
最大       69,700    
平均      1,500      
最大  150,000      
平均      4,270      
最大  190,000      
平均        1,990    
最大    305,000    
平均            150    
最大     158,000    
平均      1,610      
最大  158,000      
平均      6,350      
最大1060,000      
平均      49,500    
最大 8,140,000    
平均            816    
最大         4,860    
平均         122      
最大      5,740      
平均         384      
最大    20,000      
平均             56.3 
最大      19,500    
平均              10.8 
最大       80,900    
平均             0.64 
最大    51,700      
平均             1.4   
最大      4,460      

1/10の明るさで表示  約10EVの露光量に相当
1000[nit]くらいの明るさが丁度よく見える。明るい看板や夕暮れに近い時間の空等。
照度3,000[lux]位のEV値
 

さらに1/10の明るさで表示(1/100)  約13.5EVの露光量に相当
10.000[nit]くらいの明るさが丁度よく見える。晴天の青空くらいの明るさが見える。
照度30,000[lux]位のEV値

さらに1/10の明るさで表示(1/1000)  約17EVの露光量に相当
100,000[nit]が収まる明るさ。夜の屋外の街頭でこのくらい明るいものもある
照度300,000[lux]位のEV値


さらに1/10の明るさで表示(1/10,000) 約20EVの露光量に相当


さらに1/10の明るさで表示(1/100,000) 約23.5EVの露光量に相当
太陽はここまでしか撮影できなかった(絞り値f/36 露出時間1/4000s -22EV)
これ以上撮影する場合はNDフィルタが必要。
実際の太陽の輝度は1,865,000,000[nit]と言われていてEVにするとたぶん-31EVは必要。


10倍の明るさで表示  約3.5EVの露光量に相当
照度30[lux]位のEV値


さらに10倍の明るさで表示(100倍)  約0.3EVの露光量に相当
1[nit]の明るさが見えるような露光量。
照度3[lux]位のEV値
ちなみに月明りだけの屋外は0.2ルクス程度なのでこれに照らされた白い紙の輝度は約0.06[nit]となりもっと暗い画像となる



ホワイトバランス

現像時のホワイトバランスは6500ケルビンくらいで固定した。
6500kのライトが白くなるようなホワイトバランスで現像するということであり、現像ソフト側の数値が必ずしも6500kといいうことではない。
こうすることでハロゲンランプは2800ケルビンくらいの暖色の色として現像され、晴天の日陰の中では1万ケルビン以上の青い色で現像される

輝度

個人的には100[nit]を1.0とすることが好み。
pcモニタの白がちょうど100[nit]くらいだし、それを1.0とするとイメージしやすいから。

100[nit]は白い紙の反射の明るさと考えると314ルクスくらい当たっていることになり
1ルクスから10万ルクスまで表現するとしたら比率としては中間くらいの位置になる(314*314 ≒ 10万)

カメラのEVと輝度の関係は0EV=約2.5ルクスが基準とされているので、
0EVでちょうど白で現像されるものは約0.8[nit]ということ。
5EVでちょうど白なら32倍の約25[nit]ということになる。
ただし今回α6300では100[nit]にキャリブレーションされたモニタの白を現像したら理論値より0.6段くらい暗く現像されたのでその補正を入れている

厳密には撮影倍率によって輝度が変わってしまうけど普通に撮影する場合はあまり気にしなくてもいいと思う。

HDR現像

python版openCVで作成した。
露出違いのRaw色空間でHDR現像して、その後に色変換マトリクスを掛けてsRGB等の目的の色空間に変換する。
前回カメラRawからXYZに変換するマトリクスを作成したがそれを利用した。
マトリクスがわからなければDxOMarkに掲載されているのでもいいかもしれない

色域外をクランプすると見た目が良くないことがある。
色域外になるとrgbどこかが0になっている状態になることがあり、明るくしても白に近づくことができないため不自然に感じる。
なのでギリギリのところでクランプを回避しているがこの辺りは適当にやっている。

HDR現像スクリプト

後で記載

0 件のコメント:

コメントを投稿