在《利用Python打开DICOM CT文件》一文中,我们利用pydicom.dcmread()读取了CT图像。本文中我们将修改load_scan()函数来读取RTstructure文件并获取勾画列表
1. 打开Jupyter notebook,导入需要的科学包
import numpy as npimport mathimport pydicomimport osimport matplotlib.pyplot as pltimport scipy.ndimagefrom skimage import measure, draw
2. 在load_scan()加入t.Modality == 'RTSTRUCT'作为判断读取RTstructure文件
def load_scan(path): temp = [pydicom.dcmread(path + f) for f in os.listdir(path)] RT = [t for t in temp if t.Modality == 'RTSTRUCT'] slices = [t for t in temp if t.Modality == 'CT'] slices.sort(key = lambda x: int(x.InstanceNumber)) try: slice_thickness = np.abs(slices[0].ImagePositionPatient[2] - slices[1].ImagePositionPatient[2]) except: slice_thickness = np.abs(slices[0].SliceLocation - slices[1].SliceLocation) for s in slices: s.SliceThickness = slice_thickness return slices, RT
3. 对RTstructure文件下的ROI名称进行逐个读取。
def get_roi_list(RTcontour): name = [] for s in RTcontour.StructureSetROISequence: name.append(s.ROIName)
StructureSetROISequence下的ROIName存储了该勾画的名称信息
4. 以HNSCC_01文件夹下的CT和RTstructure文件为例。后台回复“HNSCC01”获取相关文件。
# open CT_lung datasetdir_path_ct = './Data/HNSCC_01/'patient_ct, rtStructure = load_scan(dir_path_ct)
5. 利用get_roi_list()获取勾画列表
get_roi_list(rtStructure[0])>> ['Marked Isocenter', 'Final Isocenter', 'SCV Calc Pt', 'LAO MNB Isocenter', 'CTV 57', 'CTV 57 Sub', 'PTV 57', 'CTV 60', 'CTV 60 Sub', 'PTV 60', 'CTV 70', 'CTV 70 Sub', 'PTV 70', 'GTV', 'GTV Nodes', 'Cord', 'Cord_EXPANDED', 'Brainstem', 'Brainstem_EXPANDED', 'Rt Parotid', 'Lt Parotid', 'Mandible', 'Auditory <50', 'External', 'Contract', 'Ring', 'Bridge', 'Total', 'Avoid', 'Oral Avoid', 'C5C6']
看完本文有收获?请分享给更多人
推荐阅读
未经授权不得转载如有需要请添加助手微信PI3_141592653关注「质子重离子放疗」公众号
与中国物理师一同成长