2023/05/30(火) [n年前の日記]
#2 [cg_tools] pfm画像の中身を目視したい
MiDaS の run.py は、処理結果を .png と .pfm (Portable Float Map) の2つで出力してくれる。.pfm にはどんな情報が含まれているのか確認してみたい。しかし、.pfm を開けそうなツールは存在するのだろうか。気になったので少し調べてみた。環境は Windows10 x64 22H2。
結論を先に書いておくと、.pfm を .exr に変換して使うのが妥当かなと…。
結論を先に書いておくと、.pfm を .exr に変換して使うのが妥当かなと…。
◎ GIMPで試した :
GIMP で開くことはできないのかな。ググってみたら、file-pnm で PFM を開けるように機能追加、という話を目にしたけど…。
_[gimp] plug-ins: add PFM reading support to file-pnm
GIMP 2.10.34 Portable で開いてみた。真っ白な画像しか出てこなかった。ただ、どれを開いてもそうなるわけでもなく…。一部の画像は隅っこのほうに黒いもやもやが入ってる。ただ、.png とは全く違う見た目なわけで…。どうも正常に開けているとは思えない。
_[gimp] plug-ins: add PFM reading support to file-pnm
GIMP 2.10.34 Portable で開いてみた。真っ白な画像しか出てこなかった。ただ、どれを開いてもそうなるわけでもなく…。一部の画像は隅っこのほうに黒いもやもやが入ってる。ただ、.png とは全く違う見た目なわけで…。どうも正常に開けているとは思えない。
◎ ImageMagickで試した :
ImageMagick 7.1.0-37 Q16-HDRI x64 で試してみた。とりあえず png に変換してみる。
GIMP と同様、真っ白な画像になった…。
_ImageMagick - Image Formats
上記ページによると、PFM は Read/Write対応済みと書いてあるように見えるのだけど…。うーん。
magick identify -verbose を使って画像の情報を眺めてみる。
別のフォーマットなのではと疑ったりもしたけど、PFM (Portable float format) と表示されてるから、画像ファイルであることは間違いなさそう。たぶん。
いきなり .pfm を開くのではなく、MiDaS が出力した .png を、ImageMagick を使って .pfm に変換して、各ツールで開けるのか試してみることにした。
.png から .pfm への変換は以下。
変換してできた .pfm を、ImageMagick に同梱されてるビューア、imdisplay で表示してみる。
つまり、ImageMagick (imdisplay) や GIMP で .pfm を開ける場合もある、ということだよな…。全ての .pfm が開けないわけではなさそう。ひょっとして、カラーの .pfm は開けるけど、グレースケールの .pfm は開けない、とか?
_Depth in float32 in meters units - Issue #36 - isl-org/MiDaS - GitHub
上記のやり取りによると、MiDaS が出力する .pfm には float32 が入ってる、と書いてある。最小値と最大値を調べて、各ドットの値を8bitに収めないと目視できる状態にならないと思うのだけど、各ツールはそういうことをしているのかどうか…。1000だの2000だのの値を取り出せても、0 - 255でクリッピングされていたら真っ白になっちゃいそうだけど…。
magick convert dog-dpt_beit_large_512.pfm out.png
GIMP と同様、真っ白な画像になった…。
_ImageMagick - Image Formats
上記ページによると、PFM は Read/Write対応済みと書いてあるように見えるのだけど…。うーん。
magick identify -verbose を使って画像の情報を眺めてみる。
> magick identify -verbose dog-dpt_beit_large_512.pfm Image: Filename: dog-dpt_beit_large_512.pfm Format: PFM (Portable float format) Class: DirectClass Geometry: 1546x1213+0+0 Units: Undefined Colorspace: Gray Type: Grayscale Endianness: LSB Depth: 32/16-bit Channel depth: Gray: 16-bit Channel statistics: Pixels: 1875298 Gray: min: -5.00881e+06 (-76.4295) max: 6.35226e+08 (9692.93) mean: 3.36157e+08 (5129.42) median: 1.78825e+08 (2728.69) standard deviation: 2.23969e+08 (3417.55) kurtosis: -1.66082 skewness: -0.306461 entropy: 5.32168e-05 Rendering intent: Undefined Gamma: 0.454545 Matte color: grey74 Background color: white Border color: srgb(223,223,223) Transparent color: none Interlace: None Intensity: Undefined Compose: Over Page geometry: 1546x1213+0+0 Dispose: Undefined Iterations: 0 Compression: Undefined Orientation: Undefined Properties: date:create: 2023-05-29T21:45:37+00:00 date:modify: 2023-05-29T00:41:42+00:00 signature: d65a7beee69bd2d2af7f3b85e73a82873cfe59fdf4777940af366f38d93ba316 Artifacts: verbose: true Tainted: False Filesize: 7.15372MiB Number pixels: 1.8753M Pixel cache type: Memory Pixels per second: 78.9084MP User time: 0.063u Elapsed time: 0:01.023 Version: ImageMagick 7.1.0-37 Q16-HDRI x64 1b8963a:20220605 https://imagemagick.org
別のフォーマットなのではと疑ったりもしたけど、PFM (Portable float format) と表示されてるから、画像ファイルであることは間違いなさそう。たぶん。
いきなり .pfm を開くのではなく、MiDaS が出力した .png を、ImageMagick を使って .pfm に変換して、各ツールで開けるのか試してみることにした。
.png から .pfm への変換は以下。
magick convert dog-dpt_beit_large_512.png out.pfm
変換してできた .pfm を、ImageMagick に同梱されてるビューア、imdisplay で表示してみる。
imdisplay out.pfmこれなら .png と似たような見た目になった。また、 GIMP 2.10.34 Portable でも開いてみたけど、そちらも .png と同じ見た目になった。
つまり、ImageMagick (imdisplay) や GIMP で .pfm を開ける場合もある、ということだよな…。全ての .pfm が開けないわけではなさそう。ひょっとして、カラーの .pfm は開けるけど、グレースケールの .pfm は開けない、とか?
_Depth in float32 in meters units - Issue #36 - isl-org/MiDaS - GitHub
上記のやり取りによると、MiDaS が出力する .pfm には float32 が入ってる、と書いてある。最小値と最大値を調べて、各ドットの値を8bitに収めないと目視できる状態にならないと思うのだけど、各ツールはそういうことをしているのかどうか…。1000だの2000だのの値を取り出せても、0 - 255でクリッピングされていたら真っ白になっちゃいそうだけど…。
◎ blenderで試した :
blenderで読み込めないものかなと、blender 3.3.7 x64 LTS で試してみたけど、.pfm という拡張子は画像として認識されなかった。
PFMに対応させるためのパッチが送られたこともあったらしいけど…。
_#28360 - Portable Floatmap format support - blender - Blender Projects
「マイナーなフォーマットをサポートしてたらキリが無いので」という理由で取り込まれることはなかった模様。
また、blender関係の掲示板を眺めてみたけど、「PFMを使いたい」という質問が出てくると「OpenEXRを使え」「PFM? そんなもん使ってるんじゃねえ」と言われることがほとんどのように見えた。OpenEXRは16bitの浮動小数点数で、PFMは32bitの浮動小数点数なんだけどな…。まあ、フツーは16bitで足りるやろという共通認識があるのだろう。
PFMに対応させるためのパッチが送られたこともあったらしいけど…。
_#28360 - Portable Floatmap format support - blender - Blender Projects
「マイナーなフォーマットをサポートしてたらキリが無いので」という理由で取り込まれることはなかった模様。
また、blender関係の掲示板を眺めてみたけど、「PFMを使いたい」という質問が出てくると「OpenEXRを使え」「PFM? そんなもん使ってるんじゃねえ」と言われることがほとんどのように見えた。OpenEXRは16bitの浮動小数点数で、PFMは32bitの浮動小数点数なんだけどな…。まあ、フツーは16bitで足りるやろという共通認識があるのだろう。
◎ exrに変換してみた :
以下のサービスを使って、.pfm を .exr に変換してみた。
_PFM EXR 変換。オンライン フリー - Convertio
得られた .exr を Luminance HDR 2.6.0 Build 50b31d で開いてみた。
_Luminance HDR
_Releases - LuminanceHDR/LuminanceHDR
それらしい形が目視できた。つまり、MiDaS が出力した .pfm には、ちゃんと情報が含まれているようだなと…。
得られた .exr を、blender 3.3.7 x64 LTS 上でディスプレイスモディファイアのソース画像として使ってみたところ、それらしい形状が得られた。ただ、かなり長い距離が得られるようで、縮小や移動をしてイイ感じのサイズにする作業が面倒…。奥行き方向の解像度が粗いとしても、グレースケールpng画像を利用したほうが使いやすそうだなと…。
余談。ImageMagick 7.1.0-37 Q16-HDRI x64 でも、.pfm から .exr に変換できた。
変換後の .exr を Luminance HDR 2.6.0 Build 50b31d で開いてみたけど、こちらもそれらしい形が目視できた。
_PFM EXR 変換。オンライン フリー - Convertio
得られた .exr を Luminance HDR 2.6.0 Build 50b31d で開いてみた。
_Luminance HDR
_Releases - LuminanceHDR/LuminanceHDR
それらしい形が目視できた。つまり、MiDaS が出力した .pfm には、ちゃんと情報が含まれているようだなと…。
得られた .exr を、blender 3.3.7 x64 LTS 上でディスプレイスモディファイアのソース画像として使ってみたところ、それらしい形状が得られた。ただ、かなり長い距離が得られるようで、縮小や移動をしてイイ感じのサイズにする作業が面倒…。奥行き方向の解像度が粗いとしても、グレースケールpng画像を利用したほうが使いやすそうだなと…。
余談。ImageMagick 7.1.0-37 Q16-HDRI x64 でも、.pfm から .exr に変換できた。
magick convert dog-dpt_beit_large_512.pfm out.exr
変換後の .exr を Luminance HDR 2.6.0 Build 50b31d で開いてみたけど、こちらもそれらしい形が目視できた。
◎ Darktableで試した :
Darktable 4.2.1 x64 で .pfm を開いてみた。
_darktable
最初に開いた時は真っ白だったけど、コントラスト、明るさ、その他を色々弄ってたらそれらしい形が見え始めた。ただ、どのあたりを変更すればどうなるのかがさっぱり分らない…。それでも一応、.pfm の中にそれらしい情報が入ってることぐらいは分かるけど…。
_darktable
最初に開いた時は真っ白だったけど、コントラスト、明るさ、その他を色々弄ってたらそれらしい形が見え始めた。ただ、どのあたりを変更すればどうなるのかがさっぱり分らない…。それでも一応、.pfm の中にそれらしい情報が入ってることぐらいは分かるけど…。
◎ 2023/05/31追記 :
ググっているうちに、 HDRViewというビューアと遭遇。「シンプルな研究指向の深度マップおよびハイダイナミックレンジ画像ビューア」とのこと。PFM、EXR、HDR をサポートしているらしい。
_GitHub - cdcseacave/HDRView
_Releases - cdcseacave/HDRView - GitHub
HDRView_Windows_x64.7z を解凍して、中に入っている HDRView.exe を実行してみた。ウインドウに .pfm をエクスプローラからドラッグアンドドロップしてみたら、それっぽい形が一発で表示された。素晴らしい…。これを使えば .pfm の中身がざっくり分かりそう。ありがたや。
_GitHub - cdcseacave/HDRView
_Releases - cdcseacave/HDRView - GitHub
HDRView_Windows_x64.7z を解凍して、中に入っている HDRView.exe を実行してみた。ウインドウに .pfm をエクスプローラからドラッグアンドドロップしてみたら、それっぽい形が一発で表示された。素晴らしい…。これを使えば .pfm の中身がざっくり分かりそう。ありがたや。
[ ツッコむ ]
以上です。