如何使用Python将uint16格式LZW压缩的多页3D TIFF栈转换为NRRD格式
适配工具清单
- Python生态:首选
tifffile(负责读取LZW压缩的uint16多页TIFF栈) +pynrrd(负责写入NRRD格式),二者对需求场景的适配度最高,无额外 heavy 依赖,兼容性好。 - 离线GUI/命令行工具:不需要写代码的场景可以用ImageJ/Fiji、ITK-SNAP、3D Slicer,均原生支持两种格式的导入导出。
Python实现步骤
1. 安装依赖
执行命令:pip install tifffile pynrrd numpy
2. 转换代码示例
import tifffile import nrrd import numpy as np # 读取LZW压缩的3D TIFF栈,直接读取得到shape为(Z, H, W)的uint16数组 tiff_stack = tifffile.imread("input_stack.tif") # 可选:配置NRRD元数据,比如空间间隔、原点等,根据你实际的图像参数修改 nrrd_header = { "type": "uint16", "dimension": 3, "space": "left-posterior-superior", # 可根据实际坐标系修改 "sizes": tiff_stack.shape, "space directions": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]], # 对应x/y/z轴的spacing "space origin": [0.0, 0.0, 0.0] } # 写入NRRD文件 nrrd.write("output.nrrd", tiff_stack, header=nrrd_header)
3. 注意事项
- 若需要保留TIFF原有的元数据(如空间分辨率、采集参数等),可通过
tifffile.TiffFile接口读取对应TIFF标签信息,补充到nrrd_header中即可。 tifffile原生支持LZW压缩格式的直接读取,无需额外解压步骤,uint16类型也会完整保留不会发生精度损失。- 如果需要生成压缩后的NRRD文件,可在
nrrd.write方法中增加compression='gzip'参数启用gzip压缩。
内容的提问来源于stack exchange,提问作者Aenaon
相关产品推荐
相关产品推荐

