項目描述
Tifffile是一個Python庫
- 將numpy數組存儲爲TIFF(標記圖像文件格式)文件,以及
- 從生物成像中使用的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 Cybernetics,Molecular Dynamics和Open Microscopy定義的定製擴展。環境財團分別。
對於命令行使用,運行
python -m tifffile --help
作者: | Christoph Gohlke |
---|---|
組織: | 加州大學爾灣分校熒光動力學實驗室 |
版: |
2018年11月28日 |
要求
- CPython 2.7或3.5+ 64位
- Numpy 1.14
- Imagecodecs 2018.11.8 (可選;用於解碼LZW,JPEG等)
- Matplotlib 2.2(可選;用於繪圖)
- Python 2.7需要'future','enum34'和'pathlib'。
例子
將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