python 讀取dicom文件,生成info.txt和raw文件的方法
目標(biāo):利用python讀取dicom文件,并進行處理生成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'表示二進制文件。
(2) f.write(value)
其中參數(shù)value必須是字符串類型的。
當(dāng)然還有一些其他的問題,在這里就不細說了,多入坑才能學(xué)的多,切不可煩躁,代碼就是要多敲才能得心應(yīng)手,共勉。
以上這篇python 讀取dicom文件,生成info.txt和raw文件的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python如何生成隨機數(shù)及random隨機數(shù)模塊應(yīng)用
這篇文章主要介紹了Python如何生成隨機數(shù)及random隨機數(shù)模塊應(yīng)用,首先我們要知道在python中用于生成隨機數(shù)的模塊是random,在使用前需要import。由此展開內(nèi)容介紹,需要的小伙伴可以參考一下2022-06-06
Flask進階之構(gòu)建RESTful?API和數(shù)據(jù)庫交互操作
這篇文章主要為大家介紹了Flask進階之構(gòu)建RESTful API和數(shù)據(jù)庫交互操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
一文帶你了解CNN(卷積神經(jīng)網(wǎng)絡(luò))
CNN是神經(jīng)網(wǎng)絡(luò)中的一種,它的權(quán)值共享網(wǎng)絡(luò)結(jié)構(gòu)使之更類似于生物神經(jīng)網(wǎng)絡(luò),降低了網(wǎng)絡(luò)模型的復(fù)雜度,減少了權(quán)值的數(shù)量。本文主要講解了CNN(卷積神經(jīng)網(wǎng)絡(luò))的基礎(chǔ)內(nèi)容,想了解更多的小伙伴可以看一看這篇文章2021-09-09
python利用pandas分析學(xué)生期末成績實例代碼
pandas是數(shù)據(jù)分析師最常用的工具之一,這篇文章主要給大家介紹了關(guān)于python如何利用pandas分析學(xué)生期末成績的相關(guān)資料,文中給出了詳細的實現(xiàn)方法,需要的朋友可以參考下2021-07-07

