Pythonで48bitカラー画像を読み込んでRGBの単色16bit画像に分解する
- Pythonで48bitカラー画像を諧調を維持したまま取り扱うにはどうしたらよいか?
imageio
モジュールを使う。Pillow
とOpencv
は対応していないらしい。
※画像フォーマットはTiffです。PNGでもできると説明している記事がありましたが、今回は試していません。
python - Resizing a 48bit PNG retaining its 48bits, without dropping it to a 24bit file - Stack Overflow
サンプルプログラム
概要
48bitカラー画像をRGBに分解して、16bitの単色画像(計3枚)として保存するプログラムです。GIMPやImageJでも同じことができます。
そもそも48bitカラーはモニターが対応していないと恩恵がないのですが、このサンプルプログラムのように単色化もしくはグレースケール化して画素値(数値)を取り扱う分には有用だと思っています。例えば、24bitカラーよりも照明の微小な変化を拾うことができます。
テスト画像として、左から右に向かって赤→緑→青というように変化する画像をGIMPで作成しました。48bitカラーのTiff形式です。
これをRGBに分解して保存すると、ちゃんと赤緑青の領域で分かれてるのがわかります。深さも16bitで狙い通りです。
※解像度が何故か1dpiになっているのかわかりません…
ソースコード
#python 3.8.1 #imageio 2.9.0 import imageio img = imageio.imread('48bit.tif') imageio.imwrite('16bit_Red.tif', img[:,:,0]) imageio.imwrite('16bit_Green.tif', img[:,:,1]) imageio.imwrite('16bit_Blue.tif', img[:,:,2])