2016-12-11 5 views
1

私はTIF画像を持っています。そのタイプはfloat32です。形状は(128*128)(グレースケール画像)です。すべてのピクセル値は範囲です[0.0, 1.0]画像を読み込んで再び画面に表示するときのフォーマットの変更

skimageを使用して読み取った場合、matplotlibを使用して出力します。出力イメージはRGBイメージのように見えます。私が代わりにmatplotliboutput=plt.imread(os.path.join(image_path,raw_image_name))を使用して画像を読み込むしかし

enter image description here

from skimage import io 
import matplotlib.pyplot as plt 
output=io.imread(os.path.join(image_path,raw_image_name)) 
print(output.dtype) 
print(output.shape) 
print(output.max()) 
print(output.min()) 
plt.imshow(output) 
plt.show() 

、。ピクセル値が255と0になることがわかりました。出力画像は、2番目の画像に示すように黒くなります。私は混乱していますが、これはどのように機能しますか?私の推測では、読書プロセス中にいくつかのdtypeの変更が起こっているということです。

enter image description here

答えて

1

あなたは画像を表示するときだけそうのようにそれをcmap='gray'を与えるmatplotlibskimageを読む:

plt.imshow(output,cmap='gray') 

これはあなたのデータのグレースケール画像を与える必要があります。また、answerもチェックしてください。

あなたはmatplotlibのを使用してTIFイメージで読んだとき、それは唯一のthe docsに応じてuint8の値を扱うTIFFを、処理するために、PILにフォールバックするので、それは、0〜255の範囲に物事を変換しようとします:

副作用として、PILで処理できる唯一のデータ型はuint8です。 Matplotlibのプロットはfloat32とuint8を処理できますが、PNG以外の形式の画像の読み書きはuint8データに制限されています。

+0

ありがとうございました。したがって、画像がtifやunit8の代わりにtypeのファイルとして保存された場合、matplotlibを使用して画像を読むのは正しくありません。私の理解は正しいのですか? – user297850

+0

ほとんどのTIF画像はuint8などで保存されると思いますが、少なくとも顕微鏡画像データの場合、私は0と1の間の値を持つtifファイルが見つかったとは思わないと思います。 uint8でないデータを読み込むにはmatplotlibを使用しないでください。uint16/uint32でどのように実行されるか分かりません。 – lhcgeneva

関連する問題