其实Github上有很多这样的库和脚本,但是都大同小异,掌握关键那部分代码就可以。
- 要明确一点,SimpleITK不支持对
DICOM-RT struct
格式 - 大部分脚本都是用
pydicom
读取,然后再用numpy等进行切片等 *** 作。
安装
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的标记格式
- 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,我以前直接用的脚本代码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)