目标:利用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