作成日:20231229
言語:Python3
tifffileとは
pythonで出力した画像をtif形式で保存したい時は、ライブラリ「tifffile」を使えば書き出しができます。tifffileは通常のtif以外にも、バイオ系でよく使われる画像ソフトや顕微鏡画像のフォーマットにも対応していて、メタデータも含めて読み書きすることができます。
(メタデータがない場合はscikit imageのio.imsaveなんかでも事足りそう。)
参考リンク:
元コード(作者のGitHub)はこちら。冒頭に一通り使い方の説明が書いてあります。
インストール
$ pip install tifffile
サンプルコード
### 画像作成
import numpy as np
img_stack=(np.random.rand(15,512,1024,3)*255).astype(np.uint8)
print(img_stack.shape)
## 出力結果
## (15,512,1024,3)
今回はz-stackが15枚、大きさが 512×1024 のRGB画像を想定しています。蛍光顕微鏡で撮影した画像等を、.tif形式でImageJで簡単に開ける形で保存したいとします。
今回はRGB画像なので、データ型をnp.uint8(8-bitの非負の整数)にしておきます。
### 画像の書き出し
import tifffile
with tifffile.TiffWriter('./img_tifffile.tif', imagej=True) as tif:
tif.save(img_stack[np.newaxis, :, np.newaxis, :, :, :])
#ImageJ assumes TZCYXS order. Beware that a color channel is 'S', not 'C'.
tifは6次元の画像ですが、次元の順番はTZCYXSの順番にしておきます。TZCYXSはそれぞれTime, Z stack, Channel(撮影時のチャンネル数), Y(height), X(width), Sample(カラー)のチャネルを指します。
Cがカラーではなくchannel(GFPとRFPで2チャネルで撮影した時などに使う)であることに注意。Sがカラー。
RGB(S=3)やRGBA(S=4)等のカラー画像を保存する際は、忘れずに画像のデータ型を8-bitにしておきましょう。
参考リンク:
TZCYXSの意味については、作者のGitHubを参照しました。
(https://forum.image.sc/t/what-is-s-in-tzcyxs/72225 ここに作者本人が回答していたのから遡りました)
scikit imageの古いdocumentationにも簡潔にまとまっています。
(何故scikit imageのdocumentationに説明があるのか気になって軽く調べてみたのですが、tifffileは現在は独立のパッケージですが、以前はscikit imageの一部として実装されていたようです。私の手元のskimage 0.15.0ではimport skimage.external.tifffile
ができましたが、最新バージョンではskimage.external.tifffileというモジュールはなくなっているようです。import tifffile
するのが安全なように思います。)
補足 (tifffileのその他の機能)
tifffileを使うと、画像全体の読み込み・保存だけでなく、画像を直接開くことなく一部だけ確認したり読んだりすることもできます。最初の1スライスだけ読み込むとか、1成分だけにアクセスするとかの操作で大きな画像をいちいち開く必要がなくなるので、処理を高速化できます。
参考リンク:
Qiita記事
(再掲)作者の元コードの冒頭にも一通り使い方が書いてあるので、こちらもご参照ください。