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实现的简单万年历例子分享
Apr 25 Python
Python中的Matplotlib模块入门教程
Apr 15 Python
python抽象基类用法实例分析
Jun 04 Python
python黑魔法之参数传递
Feb 12 Python
详解Swift中属性的声明与作用
Jun 30 Python
使用Python3制作TCP端口扫描器
Apr 17 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
Python实现全排列的打印
Aug 18 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
wxPython窗体拆分布局基础组件
Nov 19 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
详解分布式系统中如何用python实现Paxos
May 18 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 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
JS高级笔记
2011/07/13 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
js实现返回顶部效果
2017/03/10 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
tensorflow之并行读入数据详解
2020/02/05 Python
django中的数据库迁移的实现
2020/03/16 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
局域网定义和特性
2016/01/23 面试题
新闻编辑自荐信
2013/11/03 职场文书
销售队伍口号
2014/06/11 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
建筑工程催款函
2015/06/24 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
javascript Number 与 Math对象的介绍
2021/11/17 Javascript