DICOM-RT struct使用python脚本转换为nii.gz

DICOM-RT struct使用python脚本转换为nii.gz,第1张

其实Github上有很多这样的库和脚本,但是都大同小异,掌握关键那部分代码就可以。

  • 要明确一点,SimpleITK不支持对DICOM-RT struct格式
  • 大部分脚本都是用pydicom读取,然后再用numpy等进行切片等 *** 作。
1. 使用MIScnn库来完成转换

安装

sudo pip install miscnn # linux
pip install miscnn --user # Windows

使用

from miscnn.data_loading.interfaces.dicom_io import DICOM_interface

# 创建需要的标记的interface
structure_dict = {"Lung_L": 1, "Lung_R": 1}
interface = DICOM_interface(structure_dict = structure_dict, classes=2, annotation_tag="1.000000-.simplified")

# 获取mask文件列表
from miscnn.data_loading.data_io import Data_IO

data_io = Data_IO(interface, data_path)
sample_list = data_io.get_indiceslist()
sample_list.sort() # sample_list中有 LICENSE 记得处理删除掉
sample_list=[i for i in sample_list if "LICENSE" not in i ]

# 获取原图的坐标系信息
single_mask_path="../NiiGZ/label255/Test-S1-101.nii.gz"
mask_img=sitk.ReadImage(single_mask_path)  

origin =  mask_img.GetOrigin()
spacing = mask_img.GetSpacing()
direction = mask_img.GetDirection()

# 开始转换
for i in sample_list[:3]:
    sample = data_io.sample_loader(i)
    segmentations = sample.seg_data
    
    mask_img_convert=sitk.GetImageFromArray(segmentations)
    # 恢复到世界坐标系
    mask_img_convert.SetOrigin(origin)
    mask_img_convert.SetSpacing(spacing)
    mask_img_convert.SetDirection(direction)
    
    name="../NiiGZ/lunglabel/"+i[6:]+'.nii.gz'
    print(name)
    sitk.WriteImage(mask_img_convert,name)

原图,DICOM格式的图像 + DICOM-RT Struct格式的mask

转换后的图像,Nii.gz的图像格式+Nii.gz的标记格式

2. 现有转换库
  • Github repo:KeremTurgutlu/dicom-contour
    • 主要就是3个功能:
    • ① 读取DICOM-RT struct转为contour;
    • ② 绘图;
    • ③ 转为numpy格式
    • RadNetAIDemo/AIDemonstrationPractical.ipynb里的代码直接借鉴了这个库里的部分代码
  • Github repo: Sikerdebaard/dcmrtstruct2nii
  • Github repo:brianmanderson/Dicom_RT_and_Images_to_Mask
    • 这个代码看着乱乱的
  • Github repo:qurit/rt-utils
    • 这个看起来不错
  • frankkramer-lab/MIScnn ,这也是个比较正规的库
    • 其中和我遇到的DICOM-RT Struct数据直接相关的是这个文件:MIScnn/examples/LCTSC_DICOMInterface.ipynb
    • 关于DICOM格式的源码位于:MIScnn/miscnn/data_loading/interfaces/dicom_io.py
  • Feyn-Man/lctsc-contour-extraction_minimum-example.ipynb,我以前直接用的脚本代码

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/738291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存