postprocess関数の引数のoutput_bpsに関して確認します。
postprocessに関しての詳細はこちら。
説明通りの動きをしてくれました。記事にする必要もありませんが、一応。
output bps
出力の画素値ビット数。8か16を指定
読んだ通りですね。動きとしてもこの通り動きました。8と16以外を指定すると落ちるようです。一応実験した結果を以下に載せます。
実験
以前auto_scaleの説明で使ったデータ生を現像してみました。グラフ(散布図)は横軸にno_auto_scale = Falseにしたもの、縦軸にno_auto_scale = Trueにしたものをプロットしています。使ったカメラの、rawデータのビット数が12bitなので、以前試した8bit出力時は、
8bitへの丸めにより、このようなかなり飛び飛びの階調になってしまっていました。(縦軸を64までにしています。)16bit出力にすることで、以下のように、
きれいに4095(12bitのMAX)までの階調がありそうです。(縦軸を64/255に相当する16484にしています。)ちゃんと16bitで出てそうです。
一応データタイプも確認してみました。
img1 = raw.postprocess(half_size=True, demosaic_algorithm=rawpy.DemosaicAlgorithm.LINEAR, output_bps=16, ) print(img1.dtype)
このコードでちゃんと、
uint16
と出力されました。unsignedの16bitデータで現像できてそうです。
この16bitのフォーマットですが、JPEGには存在しないので、TIFFで保存することで画像としても確認できます。
まとめ
画像の出力ビット数の指定、8と16以外はNG。
ドキュメントのままですね…。現像後の工程で、細かいトーン調整を行う必要があるのであれば、16bitで現像した方がよいです。
この postprocess 関数へのパラメータに、細かいトーン調整を行ってくれるものはなさそうです。基本的には線形なゲイン調整ばかり。例えばハイライトだけを落としたり、ダーク部だけを持ち上げたりだとか、そういった類の調整を行うのであれば、このオプションは16を指定する必要がありそうです。
コメント