欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 读取dicom文件,生成info.txt和raw文件的方法

程序员文章站 2023-11-16 12:03:04
目标:利用python读取dicom文件,并进行处理生成info.txt和raw文件 实现:通过pydicom读取dicom文件 代码: import num...

目标:利用python读取dicom文件,并进行处理生成info.txt和raw文件

实现:通过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文件调用pydicom.read_file(filename);

pydicom0.9中读取dicom文件调用dicom.read_file(filename);

problem two:python中io操作

(1) f = open(filename, mode)

其中filename为文件的路径, mode为操作标识符:‘r' 表示读, ‘w'表示写,‘a'表示既可读又可写,‘b'表示二进制文件。

(2) f.write(value)

其中参数value必须是字符串类型的。

当然还有一些其他的问题,在这里就不细说了,多入坑才能学的多,切不可烦躁,代码就是要多敲才能得心应手,共勉。

以上这篇python 读取dicom文件,生成info.txt和raw文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。