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文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。