Python CT图像预处理——nii格式读取、重采样、窗宽窗位设置_python读取nii-CSDN博客
基于原文指出以下几个问题:文件路径设置模糊;nilabel里面使用的get_data()
方法已经过时;需要导入scikit-image,还要导入一个matplotlib。
一、文件路径设置
二、导入
参考:Python安装skimage的方法 pip install scikit-image_skimage安装-CSDN博客
导入方法(Mac):
conda env list
source activate python39
pip install +需要安装的库
miniforge的安装和连接:MAC M3安装miniforge并连接Pycharm(保姆教程)_pycharm miniforge-CSDN博客
三、更新后代码:
import skimage
import nibabel as nbimg = nb.load('/Users/wangrenxiang/PycharmProjects/PythonProject/.venv/data/A_006_401 iDose.nii.gz') #读取nii格式文件
img_affine = img.affine
data = img.get_fdata()nb.Nifti1Image(data,img_affine).to_filename('A_006_401 iDose.nii.gz')from nibabel.viewers import OrthoSlicer3D
OrthoSlicer3D(data.transpose(1,2,0)).show()header = img.header
print(header)width, height, channel = img.dataobj.shape
print(width, height, channel)### Get original space
width, height, channel = img.dataobj.shape
ori_space = [width,height,channel]def resample(data,ori_space, header, spacing):### Calculate new spacenew_width = round(ori_space[0] * header['pixdim'][1] / spacing[0])new_height = round(ori_space[1] * header['pixdim'][2] / spacing[1])new_channel = round(ori_space[2] * header['pixdim'][3] / spacing[2])new_space = [new_width, new_height, new_channel]data_resampled = skimage.transform.resize(data,new_space,order=1, mode='reflect', cval=0, clip=True, preserve_range=False, anti_aliasing=True, anti_aliasing_sigma=None)return data_resampled# Resample to have 1.0 spacing in all axes
spacing = [1.0, 1.0, 1.0]
data_resampled = resample(data,ori_space, header, spacing)
OrthoSlicer3D(data_resampled).show()