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魔法方法-属性访问控制详解
Jul 25 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
Python Socket编程之多线程聊天室
Jul 28 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
简述python Scrapy框架
Aug 17 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+dbfile开发小型留言本
2006/10/09 PHP
10条PHP编程习惯助你找工作
2008/09/29 PHP
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
php密码生成类实例
2014/09/24 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
js实现分割上传大文件
2016/03/09 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
python图书管理系统
2020/04/05 Python
numpy返回array中元素的index方法
2018/06/27 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
使用Pycharm分段执行代码
2020/04/15 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
打印机墨盒:123Inkjets
2017/02/16 全球购物
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang
Golang 并发下的问题定位及解决方案
2022/03/16 Golang
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技