python 讀取高光譜圖像

項目描述

Tifffile是一個Python庫

  1. 將numpy數組存儲爲TIFF(標記圖像文件格式)文件,以及
  2. 從生物成像中使用的TIFF文件中讀取圖像和元數據。

可以從TIFF,BigTIFF,OME-TIFF,STK,LSM,NIH,SGI,ImageJ,MicroManager,FluoView,ScanImage,SEQ,GEL,SVS,SCN,SIS,ZIF,QPI和GeoTIFF文件中讀取圖像和元數據。

Numpy數組可以以多頁,內存映射,平鋪,預測或壓縮形式寫入TIFF,BigTIFF和ImageJ hyperstack兼容文件。

僅支持TIFF規範的子集,主要是未壓縮和無損壓縮的1,8,16,32和64位整數,16,32和64位浮點,灰度和RGB(A)圖像。具體地,未實現讀取圖像數據的切片,CCITT和OJPEG壓縮,沒有JPEG壓縮的色度子採樣,或IPTC和XMP元數據。

TIFF(r),標記圖像文件格式,是Adobe Systems Incorporated的商標和控制之下。BigTIFF允許大於4 GB的文件。STK,LSM,FluoView,SGI,SEQ,GEL和OME-TIFF是由Molecular Devices(Universal Imaging Corporation),Carl Zeiss MicroImaging,Olympus,Silicon Graphics International,Media Cyber​​netics,Molecular Dynamics和Open Microscopy定義的定製擴展。環境財團分別。

對於命令行使用,運行

python -m tifffile --help
作者: Christoph Gohlke
組織: 加州大學爾灣分校熒光動力學實驗室
版:

2018年11月28日

 

要求

例子

將3D numpy數組保存爲多頁16位灰度TIFF文件:

>>> data = numpy.random.randint(0,2 ** 16,(4,301,219),'uint16')
>>> imwrite('temp.tif',data,photometric ='minisblack')

從TIFF文件中讀取整個圖像堆棧爲numpy數組:

>>> image_stack = imread('temp.tif')
>>> image_stack.shape
(4,301,219)
>>> image_stack.dtype
DTYPE( 'UINT16')

從TIFF文件中的第一頁(IFD)讀取圖像:

>>> image = imread('temp.tif',key = 0)
>>> image.shape
(301,219)

從一系列TIFF文件中讀取圖像爲numpy數組:

>>> image_sequence = imread(['temp.tif','temp.tif'])
>>> image_sequence.shape
(2,4,301,219)

將numpy數組保存到單頁RGB TIFF文件:

>>> data = numpy.random.randint(0,255,(256,256,3),'uint8')
>>> imwrite('temp.tif',data,photometric ='rgb')

使用zlib壓縮保存浮點數組和元數據:

>>> data = numpy.random.rand(2,5,3,301,219).astype('float32')
>>> imwrite('temp.tif',data,compress = 6,metadata = {'axes':'TZCYX'})

將xyz體素大小2.6755x2.6755x3.9474Âμm^ 3的​​卷保存到ImageJ文件:

>>> volume = numpy.random.randn(57 * 256 * 256).astype('float32')
>>> volume.shape = 1,57,1,256,256,1#維度,以TZCYXS順序排列
>>> imwrite('temp.tif',volume,imagej = True,resolution =(1./2.6755,1./2.6755),
... metadata = {'spacing':3.947368,'unit':'um'})

從ImageJ文件中讀取hyperstack和元數據:

>>>使用TiffFile('temp.tif')作爲tif:
... imagej_hyperstack = tif.asarray()
... imagej_metadata = tif.imagej_metadata
>>> imagej_hyperstack.shape
(57,56,256)
>>> imagej_metadata ['slices']
57

創建一個空的TIFF文件並寫入內存映射的numpy數組:

>>> memmap_image = memmap('temp.tif',shape =(256,256),dtype ='float32')
>>> memmap_image [255,255] = 1.0
>>> memmap_image.flush()
>>> memmap_image.shape,memmap_image.dtype
((256,256),dtype('float32'))
>>> del memmap_image

TIFF文件中的內存映射圖像數據:

>>> memmap_image = memmap('temp.tif',page = 0)
>>> memmap_image [255,255]
1.0
>>> del memmap_image

連續將圖像附加到BigTIFF文件:

>>> data = numpy.random.randint(0,255,(5,2,3,301,219),'uint8')
>>>使用TiffWriter('temp.tif',bigtiff = True)作爲tif:
...對於範圍內的i(data.shape [0]):
... tif.save(data [i],compress = 6,photometric ='minisblack')

 

將兩個圖像序列保存到TIFF文件:

>>> data0 = numpy.random.randint(0,255,(301,219,3),'uint8')
>>> data1 = numpy.random.randint(0,255,(5,301,219),'uint16')
>>>使用TiffWriter('temp.tif')作爲tif:
... tif.save(data0,compress = 6,photometric ='rgb')
... tif.save(data1,compress = 6,photometric ='minisblack')

從TIFF文件中讀取第二個圖像系列:

>>> series1 = imread('temp.tif',series = 1)
>>> series1.shape
(5,301,219)

使用文件名模式從一系列TIFF文件中讀取圖像堆棧:

>>> imwrite('temp_C001T001.tif',numpy.random.rand(64,64))
>>> imwrite('temp_C001T002.tif',numpy.random.rand(64,64))
>>> image_sequence = TiffSequence('temp_C001 * .tif',pattern ='axes')
>>> image_sequence.shape
(1,2)
>>> image_sequence.axes
'CT'
>>> data = image_sequence.asarray()
>>> data.shape
(1,2,64,64)

安裝

pip install tifffile

也可以從官網下載  https://pypi.org/project/tifffile/#files

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章