欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

学习记录(一)医学影像中 png 格式和 nii 格式的相关转换 2022-10-06 - 因此,以 itk-snap 绘制的掩膜为例,记录学习 nii、png 和 np.array 之间格式转换的学习和踩坑过程,并将原图保存为 nii 格式。

最编程 2024-04-14 13:11:30
...

# 导入相关的包
import radiomics
import SimpleITK as sitk
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
import glob 

# 读取nii数据
itk_img=sitk.ReadImage('C:\\Users\\Administrator\\Desktop\\Untitled.nii')
img = sitk.GetArrayFromImage(itk_img)
img.shape   # 查看形状 (109, 512, 512) 共109张512*512的单通道灰度图片
plt.imshow(img[50],cmap='gray')  # 展示其中一张有mask的图片
image.png

(一)将nii转换为png格式,若批量加for循环即好

# 通过plt.imsave保存为png格式(此处有坑,有空了再补吧)
all_img=[]
for n,im in enumerate(img):
    plt.imsave('C:\\Users\\Administrator\\Desktop\\img\\mask_{:0>3d}.png'.format(n),im,cmap='gray')   # {:0>3d}字符串格式化右对齐3位,用0补齐
image.png

(二)通过批量读取png转为np.array储存,并转为nii格式

# 查看其中一个图片
mask_1=Image.open('C:\\Users\\Administrator\\Desktop\\img\\mask_051.png')
np.array(mask_1).shape   # mask的形状为(512, 512, 4) 4个通道的,需要转换为单个通道的灰度图
s=np.array(mask_1.convert('L'))  
s.shape  # mask转换后的形状(512, 512)

# 读取png的path
img_path=glob.glob('C:\\Users\\Administrator\\Desktop\\img\\'+'*')
allmask_array=[]
for i in img_path:
    mask_one=Image.open(i)
    mask_array=np.array(mask_one.convert('L'))    # 转变为单通道的灰度图
    allmask_array.append(mask_array)
print('总共图片数量:',len(allmask_array))    # 总共图片数量: 109
print(type(allmask_array))    #  <class 'list'>

# 将list转为np.array
allmask_array=np.array(allmask_array)
allmask_array.shape      # (109, 512, 512) 与之前读取的nii形状相同

# 通过sitk的包读取array,保存为nii
out_mask = sitk.GetImageFromArray(np.array(allmask_array))
sitk.WriteImage(out_mask,'C:\\Users\\Administrator\\Desktop\\out_mask.nii.gz')

(三)在itk-snap中打开新的out_mask,完美重合


image.png

注:本人为医学专业,自学影像组学和人工智能方向,其中的大部分学习资料及代码来自网上,仅以此纪录学习过程及后续复习所用。若有任何问题可联系:wzj9846@163.com
第一次发文,仅以此激励自己不断学习。