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基于xmlrpc实现二进制文件传输的方法
Jun 02 Python
python实现线程池的方法
Jun 30 Python
Python读取Excel的方法实例分析
Jul 11 Python
Python字典实现简单的三级菜单(实例讲解)
Jul 31 Python
python 字典修改键(key)的几种方法
Aug 10 Python
python散点图实例之随机漫步
Aug 27 Python
python实现狄克斯特拉算法
Jan 17 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
Python3-异步进程回调函数(callback())介绍
May 02 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
Nov 10 Python
python 实现的车牌识别项目
Jan 25 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 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
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
解析php中heredoc的使用方法
2013/06/17 PHP
ThinkPHP安装和设置
2015/07/27 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
一篇不错的Python入门教程
2007/02/08 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
Python数据存储之 h5py详解
2019/12/26 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
大学生新闻专业个人自我评价
2013/11/12 职场文书
爱之链教学反思
2014/04/30 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
违规违纪检讨书范文
2015/05/06 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
java中如何截取字符串最后一位
2022/07/07 Java/Android