【轉載】SimpleITK學習--圖像讀取

轉載地址:https://www.cnblogs.com/wzyuan/p/10495946.html

通常我會用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)

通過切片的索引來讀取屬於該切片的鍵,然後通過切片索引與鍵獲取相應的值,這裏的鍵值對與單張切片的形式一樣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章