Saturday, October 22, 2011

32bitグレースケールはfloatで[0,1]の値

グレースケール形式にハマりました.

一般的なグレースケール画像は8bitグレースケールですが,より分解能が高い形式もあり,16, 32, 64bitグレースケールがあります.(たぶん今後はもっと分解能上がる)

8bitグレースケールは,画素あたり[0,255]整数で表現されるので,一般的に整数で表現します.
プログラミングでの書き出しもこの範囲の整数で書きだします.
しかし,同じノリで16,32,64も整数で記述するものと思っていたのですが,違ったようです.
32,64は整数で扱うソフトウェアがかなり少なく,浮動小数点形式が一般的のようです.
このような情報をどこかに明記してくれていればありがたいのですが,見つからなかったので,photoshopでグレースケール画像を生成して,tiff形式で保存して,tiff画像のタグを見ることで,知ることができました.

はじめに,16bitと32bitグレースケールをtiff形式で作ります.
次に,TIFFの分析ソフトを使ってタグを見ます.私はTiffAnalyzerを使いました.
http://www.vector.co.jp/soft/mac/art/se136821.html

タグを見た結果,16bitグレースケールのときは,タグなしだったのに,32bitグレースケールでは,sampleformatが3になっていました.
sampleformatが3の意味は,浮動小数点形式で画素を表現するということです.
下のページは,TIFFのタグ「sampleformat」について書かれたページです.
http://www.awaresystems.be/imaging/tiff/tifftags/sampleformat.html


32bitで浮動小数点といえば,floatなので,保存はデータをfloat形に変換して出力することがわかります.
また,実験的に生成したグラデーションのデータを観察すると[0,1]表現だったので,32bitグレースケールはfloatの[0,1]で表現することがわかります.

この条件を満たすように32bitグレースケールを生成して,いろんなソフトで開けるかを実験します.
作った32bitグレースケール画像は,ウィンドウズ7の標準のビューワーやphotoshopなどなど複数のソフトウェアで開くことができました.
一方,実験の中で作った,整数型のグレースケールは32bit指定しても,多くのソフトウェアで開けませんでした.

ということで,既存のソフトウェアで32bitグレースケール画像を開けるような画像を生成したときは,floatに変換して書きだす必要があります.

No comments: