python对DICOM图像的读取方法详解


Posted in Python onJuly 17, 2017

DICOM介绍

DICOM3.0图像,由医学影像设备产生标准医学影像图像,DICOM被广泛应用于放射医疗,心血管成像以及放射诊疗诊断设备(X射线,CT,核磁共振,超声等),并且在眼科和牙科等其它医学领域得到越来越深入广泛的应用。在数以万计的在用医学成像设备中,DICOM是部署最为广泛的医疗信息标准之一。当前大约有百亿级符合DICOM标准的医学图像用于临床使用。

看似神秘的图像文件,究竟是如何读取呢?网上随便 一搜,都有很多方法,但缺乏比较系统的使用方法,下文综合百度资料,结合python2.7,讲解如何读取及使用DICOM图像。

读取DICOM图像,需要以下几个库:pydicom、CV2、numpy、matplotlib。pydicom专门处理dicom图像的python专用包,numpy高效处理科学计算的包,依据数据绘图的库。

安装:

pip install matplotlib
pip install opencv-python #opencv的安装,小度上基本都是要下载包,安装包后把包复制到某个文件夹下,
#后来我在https://pypi.python.org/pypi/opencv-python找到这种pip的安装方法,亲测可用
pip install pydicom
pip install numpy

如果没有记错,安装pydicom时,也会自动把numpy安装上。

安装好这些库后,就可以对dicom文件操作。

具体看下面代码:

#-*-coding:utf-8-*-
import cv2
import numpy
import dicom
from matplotlib import pyplot as plt

dcm = dicom.read_file("AT0001_100225002.DCM")
dcm.image = dcm.pixel_array * dcm.RescaleSlope + dcm.RescaleIntercept

slices = []
slices.append(dcm)
img = slices[ int(len(slices)/2) ].image.copy()
ret,img = cv2.threshold(img, 90,3071, cv2.THRESH_BINARY)
img = numpy.uint8(img)

im2, contours, _ = cv2.findContours(img,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
mask = numpy.zeros(img.shape, numpy.uint8)
for contour in contours:
 cv2.fillPoly(mask, [contour], 255)
img[(mask > 0)] = 255


kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(2,2))
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)


img2 = slices[ int(len(slices)/2) ].image.copy()
img2[(img == 0)] = -2000


plt.figure(figsize=(12, 12))
plt.subplot(131)
plt.imshow(slices[int(len(slices) / 2)].image, 'gray')
plt.title('Original')
plt.subplot(132)
plt.imshow(img, 'gray')
plt.title('Mask')
plt.subplot(133)
plt.imshow(img2, 'gray')
plt.title('Result')
plt.show()

在DICOM图像里,包含了患者的相关信息的字典,我们可以通过dir查看DICOM文件有什么信息,可以通过字典返回相关的值。

import dicom
import json
def loadFileInformation(filename):
 information = {}
 ds = dicom.read_file(filename)
 information['PatientID'] = ds.PatientID
 information['PatientName'] = ds.PatientName
 information['PatientBirthDate'] = ds.PatientBirthDate
 information['PatientSex'] = ds.PatientSex
 information['StudyID'] = ds.StudyID
 information['StudyDate'] = ds.StudyDate
 information['StudyTime'] = ds.StudyTime
 information['InstitutionName'] = ds.InstitutionName
 information['Manufacturer'] = ds.Manufacturer
 print dir(ds)
 print type(information)
 return information

a=loadFileInformation('AT0001_100225002.DCM')
print a

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python运算符重载用法实例
May 28 Python
Python实现多并发访问网站功能示例
Jun 19 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
Python模块WSGI使用详解
Feb 02 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
Python中利用xpath解析HTML的方法
May 14 Python
详解Python 协程的详细用法使用和例子
Jun 15 Python
浅谈python下tiff图像的读取和保存方法
Dec 04 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
Python 统计位数为偶数的数字代码详解
Mar 15 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 Python
Python中使用subprocess库创建附加进程
May 11 Python
Python实现excel转sqlite的方法
Jul 17 #Python
PyChar学习教程之自定义文件与代码模板详解
Jul 17 #Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 #Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 #Python
Python 的类、继承和多态详解
Jul 16 #Python
PyQt 线程类 QThread使用详解
Jul 16 #Python
Pycharm技巧之代码跳转该如何回退
Jul 16 #Python
You might like
浅谈PHP语法(1)
2006/10/09 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
PHP实现八皇后算法
2019/05/06 PHP
JS继承 笔记
2011/07/13 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
python图像常规操作
2017/11/11 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
python 字符串只保留汉字的方法
2018/11/16 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Python3进制之间的转换代码实例
2019/08/24 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
财务副总经理工作职责
2013/11/25 职场文书
骨干教师培训感言
2014/01/16 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
小学假期安全广播稿
2014/09/28 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
公司周年庆典致辞
2015/07/30 职场文书
教师网络培训心得体会
2016/01/09 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB