目标:利用python读取dicom文件,并进行处理生成info.txt和raw文件
实现:通过pydicom读取dicom文件
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/likanglearning/article/details/79475404