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


Posted in Python onJanuary 24, 2019

目标:利用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文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python将html转成PDF的实现代码(包含中文)
Mar 04 Python
python实现获取序列中最小的几个元素
Sep 25 Python
17个Python小技巧分享
Jan 23 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
解决Mac下使用python的坑
Aug 13 Python
Python requests.post方法中data与json参数区别详解
Apr 30 Python
python对输出的奇数偶数排序实例代码
Dec 04 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 Python
利用For循环遍历Python字典的三种方法实例
Mar 25 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
Jan 24 #Python
python Selenium实现付费音乐批量下载的实现方法
Jan 24 #Python
在python下读取并展示raw格式的图片实例
Jan 24 #Python
Python字典的核心底层原理讲解
Jan 24 #Python
使用PIL(Python-Imaging)反转图像的颜色方法
Jan 24 #Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 #Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 #Python
You might like
《心理测量者3》剧场版动画预告
2020/03/02 日漫
php上传中文文件名乱码问题处理方案
2015/02/03 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
在vue中给列表中的奇数行添加class的实现方法
2018/09/05 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
django使用xadmin的全局配置详解
2019/11/15 Python
年终总结会主持词
2014/03/25 职场文书
党支部公开承诺书
2014/03/28 职场文书
音乐教师求职信
2014/06/28 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
学生党员检讨书范文
2014/12/27 职场文书
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers