一般我會用simpleitk來讀取dicom文件,主要是爲了將dicom文件轉換爲numpy矩陣,便於輸入神經網絡,讀取dicom文件可分爲兩種狀況,一.單獨的dicom文件 二.一系列dicom文件,前者只是一張切片,一般是X光片,後者是不少張切片,合在一塊兒一般表明CT圖像。網絡
一.spa
讀取dicom文件code
file = sitk.ReadImage(filepath)
獲取基本信息,大小,像素間距,座標原點,方向blog
file.GetSize() file.GetOrigin() file.GetSpacing() file.GetDirection()
輸出信息相似下面這樣索引
還能夠獲取不少其它信息,這些信息以字典的形式存儲,稱爲元數據ci
上面是字典的鍵,具體爲何是這種形式,還不太清楚it
字典的值形式以下io
上面輸出的只是一小部分信息,利用microDicom軟件打開一個dicom文件,能夠看到詳細的元信息class
固然,最最重要的仍是像素矩陣,這是咱們用來訓練模型的原料啊bfc
pixel_array = sitk.GetArrayFromImage(file)#這個file是以前讀取出來的文件
二.
讀取dicom序列
reader = sitk.ImageSeriesReader() reader.MetaDataDictionaryArrayUpdateOn()#這一步是加載公開的元信息 reader.LoadPrivateTagsOn()#這一步是加載私有的元信息 series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(directorypath)#根據文件夾獲取序列ID,一個文件夾裏面一般是一個病人的全部切片,會分爲好幾個序列 dicom_names = reader.GetGDCMSeriesFileNames( directorypath,series_ID)#選取其中一個序列ID,得到該序列的若干文件名 reader.SetFileNames(dicom_names)#設置文件名 image3D = reader.Execute()#讀取dicom序列
image3D是一個三維矩陣,也就是說是一個三維的立體的數據,能夠像讀取一張切片同樣,讀取它的原點,像素間隔,方向,等基本信息
可是元信息的讀取,不能經過image3D自己,要經過reader
reader.GetMetaDataKeys(slice_index) reader.GetMetaData(slice_index,key)
經過切片的索引來讀取屬於該切片的鍵,而後經過切片索引與鍵獲取相應的值,這裏的鍵值對與單張切片的形式同樣