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 按照固定长度分割字符串的方法小结
Apr 30 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
python实现大文件分割与合并
Jul 22 Python
python3.x提取中文的正则表达式示例代码
Jul 23 Python
python线程定时器Timer实现原理解析
Nov 30 Python
python离线安装外部依赖包的实现
Feb 13 Python
Python编程快速上手——正则表达式查找功能案例分析
Feb 28 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
20行Python代码实现视频字符化功能
Apr 13 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 Python
pyqt5打包成exe可执行文件的方法
May 14 Python
python通过opencv调用摄像头操作实例分析
Jun 07 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 array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
在Windows XP下安装Apache+MySQL+PHP环境
2015/02/22 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
自己的js工具 Event封装
2009/08/21 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
js点击按钮实现带遮罩层的弹出视频效果
2015/12/19 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
python提示No module named images的解决方法
2014/09/29 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
深入浅析Python字符编码
2015/11/12 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
python实现字符串和数字拼接
2020/03/02 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
python属于软件吗
2020/06/18 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
安全负责人任命书
2014/06/06 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
电影开国大典观后感
2015/06/04 职场文书
MATLAB 全景图切割及盒图显示的实现步骤
2021/05/14 Python
mysq启动失败问题及场景分析
2021/07/15 MySQL
vscode内网访问服务器的方法
2022/06/28 Servers