【数据处理】使用pymic库裁剪nii.gz文件

本文介绍了如何使用Python库pymic和SimpleITK处理nii.gz格式的图像数据,通过mask裁剪出心脏区域,以解决临床问题中的感兴趣区提取。作者详细展示了代码实现步骤和结果展示。
摘要由CSDN通过智能技术生成

  nii.gz文件处理起来总是那么麻烦,学到了一个新的工具,用来裁剪nii.gz文件。

  数据处理系列篇:
  【数据处理】Python读取.mat文件的方法
  【数据处理】Python读取.dcm文件的方法
  【数据处理】Python解析json文件
  【数据处理】Python解析多类别分割标签的json文件
  【数据处理】nii文件解析
  【数据处理】Python解析nii.gz文件


0、所需安装

pip install pymic

1、场景描述

  我有一个图像文件为nii.gz格式,做了一个分割,得到了一个mask,格式也为nii.gz,我需要根据mask,设定一个box框,裁剪对应的图像文件。对应到一个临床问题上就是,心脏核磁数据,我需要裁剪关于心脏的感兴趣区域,其他部分舍弃掉。

  原始图像数据:

在这里插入图片描述

  分割得到的mask数据:

在这里插入图片描述

  目标:根据mask框定心脏区域


2、代码实现

import numpy as np
import SimpleITK as sitk
from pymic.util.image_process import crop_ND_volume_with_bounding_box, get_ND_bounding_box
from pymic.io.image_read_write import save_array_as_nifty_volume

mask_path = './Cine_pred_mask/myops_test_201_C0.nii.gz'
mask_crop_path = './mask_crop_test.nii.gz'
image_path = './Cine/myops_test_201_C0.nii.gz'
image_crop_path= './image_crop_test.nii.gz'

margin = [0, 30, 30]  # 预留边缘
mask_sitk = sitk.ReadImage(mask_path)  # 数据读取
mask_npy = sitk.GetArrayFromImage(mask_sitk)  # 获得numpy数组
mask_shape = mask_npy.shape
crop_bbox_min, crop_bbox_max = get_ND_bounding_box(mask_npy, margin=margin)  # 获得外矩形框

crop_bbox_min[0] = 0
crop_bbox_max[0] = mask_shape[0]
print(crop_bbox_min, crop_bbox_max)

# 裁剪mask后的数组
mask_output_npy = crop_ND_volume_with_bounding_box(mask_npy, crop_bbox_min, crop_bbox_max)

# 保存裁剪后的数组为nii.gz
# mask_output_npy: 输出裁剪后的数组
# mask_crop_path: 输出的路径
# mask_path: 参考数据的路径, 原始的mask路径
save_array_as_nifty_volume(mask_output_npy, mask_crop_path, mask_path)

# image的裁剪与保存(与mask同)
image_sitk = sitk.ReadImage(image_path)
image_npy = sitk.GetArrayFromImage(image_sitk)
image_output_npy = crop_ND_volume_with_bounding_box(image_npy, crop_bbox_min, crop_bbox_max)
save_array_as_nifty_volume(image_output_npy, image_crop_path, image_path)

# 也可以只保存一张
save_array_as_nifty_volume(image_output_npy[3][np.newaxis, :, :], './one_image_crop_test.nii.gz', image_path)

  裁剪后的mask显示:

在这里插入图片描述

  裁剪后的image显示:

在这里插入图片描述

  裁剪完成后就可以接着做后续处理啦。


  其实自己写代码,直接去处理nii.gz读取获得的numpy数组也可以完成目标,但是麻烦一点~

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值