python 讀取dicom文件,生成info.txt和raw文件的方法
目標(biāo):利用python讀取dicom文件,并進(jìn)行處理生成info.txt和raw文件
實(shí)現(xiàn):通過pydicom讀取dicom文件
代碼:
import numpy import pydicom import os # dicom文件所在的文件夾目錄 PathDicom = '/home/lk/testdata/1.3.6.1.4.1.9328.50.1.42697596859477567872763647333745089432/' # 篩選出文件夾目錄下所有的dicom文件 lstFilesDCM = [] for dirName, subdirList, fileList in os.walk(PathDicom): for filename in fileList: if '.dcm' in filename.lower(): lstFilesDCM.append(os.path.join(dirName, filename)) # Get ref file RefDs = pydicom.read_file(lstFilesDCM[0]) # Load dimensions based on the number of rows, columns, and slices (along the Z axis) ConstPixelDims = (int(RefDs.Rows), int(RefDs.Columns), len(lstFilesDCM)) # Load spacing values (in mm) ConstPixelSpacing = (float(RefDs.PixelSpacing[0]), float(RefDs.PixelSpacing[1]), float(RefDs.SliceThickness)) # save info.txt info = ConstPixelDims + ConstPixelSpacing f = open('/home/lk/testdata/1.3.6.1.4.1.9328.50.1.42697596859477567872763647333745089432/info.txt', 'w') for n in info: f.write(str(n)+' ') f.close() # According to location sorting location = [] for i in range(len(lstFilesDCM)): ds = pydicom.read_file(lstFilesDCM[i]) location.append(ds.SliceLocation) location.sort() # The array is sized based on 'ConstPixelDims' ArrayDicom = numpy.zeros((len(lstFilesDCM), RefDs.Rows, RefDs.Columns), dtype=RefDs.pixel_array.dtype) # loop through all the DICOM files for filenameDCM in lstFilesDCM: # read the file ds = pydicom.read_file(filenameDCM) # store the raw image data ArrayDicom[location.index(ds.SliceLocation), :, :] = ds.pixel_array # save raw ds = ArrayDicom.tostring() f = open('/home/lk/testdata/1.3.6.1.4.1.9328.50.1.42697596859477567872763647333745089432/1.raw', 'wb') f.write(ds) f.close()
代碼編寫過程遇到的問題及解決方法:
Problem one: pydicom版本問題。
pydicom1.x中讀取dicom文件調(diào)用pydicom.read_file(filename);
pydicom0.9中讀取dicom文件調(diào)用dicom.read_file(filename);
Problem two:python中IO操作
(1) f = open(filename, mode)
其中filename為文件的路徑, mode為操作標(biāo)識(shí)符:‘r' 表示讀, ‘w'表示寫,‘a(chǎn)'表示既可讀又可寫,‘b'表示二進(jìn)制文件。
(2) f.write(value)
其中參數(shù)value必須是字符串類型的。
當(dāng)然還有一些其他的問題,在這里就不細(xì)說了,多入坑才能學(xué)的多,切不可煩躁,代碼就是要多敲才能得心應(yīng)手,共勉。
以上這篇python 讀取dicom文件,生成info.txt和raw文件的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中獲取網(wǎng)頁(yè)狀態(tài)碼的兩個(gè)方法
這篇文章主要介紹了Python中獲取網(wǎng)頁(yè)狀態(tài)碼的兩個(gè)方法,分別使用urllib模塊和requests模塊實(shí)現(xiàn),需要的朋友可以參考下2014-11-11Python requests.post()方法中data和json參數(shù)的使用方法
這篇文章主要介紹了Python requests.post()方法中data和json參數(shù)的使用方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-08-08Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)通過公共鍵對(duì)字典列表排序算法示例
這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)通過公共鍵對(duì)字典列表排序算法,結(jié)合實(shí)例形式分析了Python基于operator模塊中的itemgetter()函數(shù)對(duì)字典進(jìn)行排序的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03Python中使用sqlalchemy操作數(shù)據(jù)庫(kù)的問題總結(jié)
在探索使用?FastAPI,?SQLAlchemy,?Pydantic,Redis,?JWT?構(gòu)建的項(xiàng)目的時(shí)候,其中數(shù)據(jù)庫(kù)訪問采用SQLAlchemy,并采用異步方式,這篇文章主要介紹了在Python中使用sqlalchemy來操作數(shù)據(jù)庫(kù)的幾個(gè)小總結(jié),需要的朋友可以參考下2024-08-08在Ubuntu系統(tǒng)中運(yùn)行python代碼的幾個(gè)步驟
項(xiàng)目中需要在Linux上運(yùn)行自己寫的python腳本,特此記錄一下操作流程,整個(gè)流程比較簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于在Ubuntu系統(tǒng)中運(yùn)行python代碼的幾個(gè)步驟,需要的朋友可以參考下2023-12-12Python基于Django實(shí)現(xiàn)驗(yàn)證碼登錄功能
驗(yàn)證碼登錄是一種常見的身份驗(yàn)證方式,它可以有效防止惡意攻擊和機(jī)器人登錄,本文將介紹如何基于Python?Django實(shí)現(xiàn)驗(yàn)證碼登錄功能,需要的可以參考一下2023-05-05Python3實(shí)現(xiàn)的反轉(zhuǎn)單鏈表算法示例
這篇文章主要介紹了Python3實(shí)現(xiàn)的反轉(zhuǎn)單鏈表算法,結(jié)合實(shí)例形式總結(jié)分析了Python基于迭代算法與遞歸算法實(shí)現(xiàn)的翻轉(zhuǎn)單鏈表相關(guān)操作技巧,需要的朋友可以參考下2019-03-03