SimpleITK學習(二)圖像讀取


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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM