【数据处理】Python解析nii.gz文件

  最近又接触了一种影像数据格式:nii.gz文件,记录一下python读取方式。

  数据处理系列篇:
  【数据处理】Python读取.mat文件的方法
  【数据处理】Python读取.dcm文件的方法
  【数据处理】Python解析json文件
  【数据处理】Python解析多类别分割标签的json文件
  【数据处理】nii文件解析


  采用nibabel库:

pip install nibabel

  示例选用2019年肾肿瘤分割挑战赛nii.gz数据:KITS数据集下载

import numpy as np
import nibabel as nib
import matplotlib.pyplot as plt

image_path = "H:/datasets_deeplearning/KITS/case_00000/imaging.nii.gz"
mask_path = "H:/datasets_deeplearning/KITS/case_00000/segmentation.nii.gz"

# 数据加载
image_obj = nib.load(image_path)
mask_obj = nib.load(mask_path)
print("数据加载格式:", type(image_obj), '\n')
print("图像成像信息:", image_obj.header.keys(), '\n')

# 查看图像平面与空间分辨率
pixdim = image_obj.header['pixdim']
print(f"平面×空间:[{pixdim[2]}×{pixdim[3]}{pixdim[1]}\n")

# 获得numpy数据
image_data = image_obj.get_fdata()
mask_data = mask_obj.get_fdata()
print("numpy数据格式:", type(image_data), '\n')

# 查看图像大小, 层数及像数值
depth, height, width = image_data.shape
print(f"The image object height: {height}, width:{width}, depth:{depth}\n")
print(f'image value range: [{image_data.min()}, {image_data.max()}]\n')

# 选一层来画图
i = 160
plt.figure(dpi=300)
plt.subplot(1, 2, 1)
plt.imshow(image_data[i, :, :], cmap='gray')
plt.title(f"image of {i}th layer")
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(mask_data[i, :, :], cmap='gray')
plt.title(f"mask of {i}th layer")
plt.axis('off')
plt.show()

输出为:

数据加载格式: <class 'nibabel.nifti1.Nifti1Image'> 

图像成像信息: ['sizeof_hdr', 'data_type', 'db_name', 'extents', 'session_error', 'regular', 'dim_info', 'dim', 'intent_p1', 'intent_p2', 'intent_p3', 'intent_code', 'datatype', 'bitpix', 'slice_start', 'pixdim', 'vox_offset', 'scl_slope', 'scl_inter', 'slice_end', 'slice_code', 'xyzt_units', 'cal_max', 'cal_min', 'slice_duration', 'toffset', 'glmax', 'glmin', 'descrip', 'aux_file', 'qform_code', 'sform_code', 'quatern_b', 'quatern_c', 'quatern_d', 'qoffset_x', 'qoffset_y', 'qoffset_z', 'srow_x', 'srow_y', 'srow_z', 'intent_name', 'magic'] 

平面×空间:[0.919921875×0.919921875]×0.5

numpy数据格式: <class 'numpy.ndarray'> 

The image object height: 512, width:512, depth:611

image value range: [-1024.0, 1413.0]

画图为:
在这里插入图片描述

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值