在《利用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']
看完本文有收獲?請分享給更多人
推薦閱讀
關注「質子重離子放療」公眾號
與中國物理師一同成長