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日

 

要求

  • 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

也可以从官网下载  https://pypi.org/project/tifffile/#files

你可能感兴趣的:(机器学习)