python 讀取dicom文件,生成info.txt和raw文件的方法
目標(biāo):利用python讀取dicom文件,并進(jìn)行處理生成info.txt和raw文件
實現(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)識符:‘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文件的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中獲取網(wǎng)頁狀態(tài)碼的兩個方法
這篇文章主要介紹了Python中獲取網(wǎng)頁狀態(tài)碼的兩個方法,分別使用urllib模塊和requests模塊實現(xiàn),需要的朋友可以參考下2014-11-11
Python requests.post()方法中data和json參數(shù)的使用方法
這篇文章主要介紹了Python requests.post()方法中data和json參數(shù)的使用方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-08-08
Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)通過公共鍵對字典列表排序算法示例
這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)通過公共鍵對字典列表排序算法,結(jié)合實例形式分析了Python基于operator模塊中的itemgetter()函數(shù)對字典進(jìn)行排序的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
Python中使用sqlalchemy操作數(shù)據(jù)庫的問題總結(jié)
在探索使用?FastAPI,?SQLAlchemy,?Pydantic,Redis,?JWT?構(gòu)建的項目的時候,其中數(shù)據(jù)庫訪問采用SQLAlchemy,并采用異步方式,這篇文章主要介紹了在Python中使用sqlalchemy來操作數(shù)據(jù)庫的幾個小總結(jié),需要的朋友可以參考下2024-08-08
在Ubuntu系統(tǒng)中運行python代碼的幾個步驟
項目中需要在Linux上運行自己寫的python腳本,特此記錄一下操作流程,整個流程比較簡單,下面這篇文章主要給大家介紹了關(guān)于在Ubuntu系統(tǒng)中運行python代碼的幾個步驟,需要的朋友可以參考下2023-12-12
Python3實現(xiàn)的反轉(zhuǎn)單鏈表算法示例
這篇文章主要介紹了Python3實現(xiàn)的反轉(zhuǎn)單鏈表算法,結(jié)合實例形式總結(jié)分析了Python基于迭代算法與遞歸算法實現(xiàn)的翻轉(zhuǎn)單鏈表相關(guān)操作技巧,需要的朋友可以參考下2019-03-03

