最近又接触了一种影像数据格式: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]
画图为: