nii格式CT数据读取
遇到nii格式的CT数据,可以通过nibabel包进行数据的读、写、查看等操作。下面列出常见操作。
读写nii格式文件
nibabel读取数据会将图像旋转九十度,也就是各轴的对应关系为[z,x,y]
import nibabel as nb
img = nb.load(xxx.nii.gz) #读取nii格式文件
img_affine = img.affine
data = img.get_data()
存储nii格式文件,保存时要联通affine矩阵一起保存
import nibabel as nb
nb.Nifti1Image(data,img_affine).to_filename(xxx.nii.gz)
查看
from nibabel.viewers import OrthoSlicer3D
OrthoSlicer3D(data.transpose(1,2,0)).show()
重采样
CT图像的重采样是为了使体数据中大小不同的体素变得大小相同。由于CT不同轴的体素尺寸、粗细粒度不同,直接使用不利于进行深度模型的训练和推理。
首先我们可以获取先从nii文件的头文件中获取各轴单位体素对应的空间距离。
header = img.header
print(header)
打印出来可见如下信息:
print(header)
<class 'nibabel.nifti1.Nifti1Header'> object, endian='<'
sizeof_hdr : 348
data_type : b''
db_name : b''
extents : 0
session_error : 0
regular : b'r'
dim_info : 0
dim : [ 3 512 512 81 1 1 1 1]
intent_p1 : 0.0
intent_p2 : 0.0
intent_p3 : 0.0
intent_code : none
datatype : int16
bitpix : 16
slice_start : 0
pixdim : [-1. 0.881 0.881 5. 0. 0. 0. 0. ]
vox_offset : 0.0
scl_slope