python 读取dicom文件,生成info.txt和raw文件的方法
目标:利用python读取dicom文件,并进行处理生成info.txt和raw文件
实现:通过pydicom读取dicom文件
代码:
importnumpy
importpydicom
importos
#dicom文件所在的文件夹目录
PathDicom='/home/lk/testdata/1.3.6.1.4.1.9328.50.1.42697596859477567872763647333745089432/'
#筛选出文件夹目录下所有的dicom文件
lstFilesDCM=[]
fordirName,subdirList,fileListinos.walk(PathDicom):
forfilenameinfileList:
if'.dcm'infilename.lower():
lstFilesDCM.append(os.path.join(dirName,filename))
#Getreffile
RefDs=pydicom.read_file(lstFilesDCM[0])
#Loaddimensionsbasedonthenumberofrows,columns,andslices(alongtheZaxis)
ConstPixelDims=(int(RefDs.Rows),int(RefDs.Columns),len(lstFilesDCM))
#Loadspacingvalues(inmm)
ConstPixelSpacing=(float(RefDs.PixelSpacing[0]),float(RefDs.PixelSpacing[1]),float(RefDs.SliceThickness))
#saveinfo.txt
info=ConstPixelDims+ConstPixelSpacing
f=open('/home/lk/testdata/1.3.6.1.4.1.9328.50.1.42697596859477567872763647333745089432/info.txt','w')
fornininfo:
f.write(str(n)+'')
f.close()
#Accordingtolocationsorting
location=[]
foriinrange(len(lstFilesDCM)):
ds=pydicom.read_file(lstFilesDCM[i])
location.append(ds.SliceLocation)
location.sort()
#Thearrayissizedbasedon'ConstPixelDims'
ArrayDicom=numpy.zeros((len(lstFilesDCM),RefDs.Rows,RefDs.Columns),dtype=RefDs.pixel_array.dtype)
#loopthroughalltheDICOMfiles
forfilenameDCMinlstFilesDCM:
#readthefile
ds=pydicom.read_file(filenameDCM)
#storetherawimagedata
ArrayDicom[location.index(ds.SliceLocation),:,:]=ds.pixel_array
#saveraw
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()
代码编写过程遇到的问题及解决方法:
Problemone:pydicom版本问题。
pydicom1.x中读取dicom文件调用pydicom.read_file(filename);
pydicom0.9中读取dicom文件调用dicom.read_file(filename);
Problemtwo:python中IO操作
(1)f=open(filename,mode)
其中filename为文件的路径,mode为操作标识符:‘r'表示读,‘w'表示写,‘a'表示既可读又可写,‘b'表示二进制文件。
(2)f.write(value)
其中参数value必须是字符串类型的。
当然还有一些其他的问题,在这里就不细说了,多入坑才能学的多,切不可烦躁,代码就是要多敲才能得心应手,共勉。
以上这篇python读取dicom文件,生成info.txt和raw文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。