通常我會用simpleitk來讀取dicom文件,主要是為了將dicom文件轉換為numpy矩陣,便於輸入神經網絡,讀取dicom文件可分為兩種情況,一.單獨的dicom文件 二.一系列dicom文件,前者只是一張切片,通常是X光片,后者是很多張切片,合在一起通常代表CT圖像。
一.
讀取dicom文件
file = sitk.ReadImage(filepath)
獲取基本信息,大小,像素間距,坐標原點,方向
file.GetSize()
file.GetOrigin()
file.GetSpacing()
file.GetDirection()
輸出信息類似下面這樣
還可以獲取很多其它信息,這些信息以字典的形式存儲,稱為元數據
上面是字典的鍵,具體為什么是這種形式,還不太清楚
字典的值形式如下
上面輸出的只是一小部分信息,利用microDicom軟件打開一個dicom文件,可以看到詳細的元信息
當然,最最重要的還是像素矩陣,這是我們用來訓練模型的原料啊
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)
通過切片的索引來讀取屬於該切片的鍵,然后通過切片索引與鍵獲取相應的值,這里的鍵值對與單張切片的形式一樣