TIFF形式の画像データを読み込みたい (python3)
TIFFとは、様々な符号化方式に対応した、ビットマップ形式の画像データを保存するためのファイル形式の一つ。ファイル名の標準の拡張子は「.tif」あるいは「.tiff」。引用:TIFF(.tifファイル)とは - IT用語辞典
https://zshitake.hatenablog.com/entry/%E2%96%A0
今回は現在扱っているTIF形式の画像を読み込む方法を紹介したいと思います。
言語はpython3を使用します。
そもそもTIFF形式とは
TIFFとは、様々な符号化方式に対応した、ビットマップ形式の画像データを保存するためのファイル形式の一つ。ファイル名の標準の拡張子は「.tif」あるいは「.tiff」。
だそうです。
写真画像といえばJPEGが有名ですが、私もこのデータセットを扱うまでこのフォーマットを知りませんでした。
Tagged Image File Formatを略してTIFFだそうで、複数パターンの画像を一つのファイルに保存できるそうです。
その仕組みはよく分かりませんが、高解像度で使用する際にこの形式を用いるようで、画像の保存形式としては良いものなのでしょうね!
TIFF形式の画像を読み込む
画像を読み込む方法は有名なもので2つあります。
- load_img関数
from keras.preprocessing.image import load_img
でimportして使用します。引数については、
load_img(path, grayscale, color_mode, target_size, interpolation)
path : 読み込む画像のパス(jpgに限らない?)
grayscale : Trueならグレースケール、FalseならRGBで読み込む
color_mode : 'rgb', 'rgba', 'grayscale'を指定するとその形式に変換する
target_size : リサイズする大きさを指定(例えばtarget_size=(80,80))
interpolation : リサイズの際のアルゴリズム('nearest', 'bilinear', 'bicubic')
- imread関数
import cv2
でimportして使用します。引数については、
img = cv2.imread(path, option)
path : 読み込む画像のパス(.tif, .jpgなど多くの画像フォーマットに対応)
option : カラーモードを指定できる。
(cv2.IMREAD_COLOR, cv2.IMREAD_GRAYSCALE, cv2.IMREAD_UNCHANGED)
それぞれ1,0,-1ののように整数で指定することも可能
どちらを使えばいいのか?
両方試してみました。
その結果、
なぜかload_imgを使うと、全ての画素値が255(白色)となってロードされ、ちゃんとロードされませんでした。。。
tif形式は画像の複数パターンを一つの画像として扱っているために対応していないとそれらの画素値が足し合わされるのかな?
一方、
imread関数では、正常にロードされました!!!
しかし注意点があります。
みなさんが使用するときRGBで保存されることを期待していると思いますが、
imreadではBGRの順になってしまうので少し処理が必要となります。
この処理については以後記事をあげたいと思います。
まとめ
tiff形式の画像を読み込むならimread関数を用いるべき!