pytho将nii数据转PNG图片
python将.nii格式转png的方法
在医疗图像里面MRI图像存储为nii的时候,三维图像。四维则带上了时间标签。
nii数据解压以后如下图:
在这里插入图片描述
都是压缩包,在Python打开时后面要加上.gz
nii数据读取
import matplotlib
matplotlib.use('TkAgg')
from matplotlib import pylab as plt
import nibabel as nib
from nibabel import nifti1
from nibabel.viewers import OrthoSlicer3D
example_filename = './training/training/patient001/patient001_4d.nii.gz'
img = nib.load(example_filename)
print(img)
print(img.header['db_name']) # 输出头信息
#显示图像
width, height, queue ,S= img.dataobj.shape
OrthoSlicer3D(img.dataobj).show()
批量将某个文件夹下3维的转为png代码
import numpy as np
import os # 遍历文件夹
import nibabel as nib # nii格式一般都会用到这个包
import imageio # 转换成图像
def nii_to_image(niifile):
filenames = os.listdir(filepath) # 读取nii文件夹
print(filenames)
slice_trans = []
for f in filenames[2:6]:
# 开始读取nii文件
img_path = os.path.join(filepath, f)
img = nib.load(img_path) # 读取nii
img_fdata = img.get_fdata()
fname = f.replace('.nii', '') # 去掉nii的后缀名
img_f_path = os.path.join(imgfile, fname)
# 创建nii对应的图像的文件夹
if not os.path.exists(img_f_path):
os.mkdir(img_f_path) # 新建文件夹
# 开始转换为图像
(x, y, z) = img.shape
for i in range(z): # z是图像的序列
silce = img_fdata[:, :, i] # 选择哪个方向的切片都可以
imageio.imwrite(os.path.join(img_f_path, '{}.png'.format(i)), silce)
# 保存图像
if __name__ == '__main__':
处理多个文件
filepath1 = './training/training/'
filenames2 = os.listdir(filepath1)
for i in filenames2:
filepath= os.path.join('./training/training/', i)
#处理单个文件
#filepath = './training/training/patient001'
imgfile = './iamge'
print(filepath)
nii_to_image(filepath)