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 网络编程常用代码段
Aug 28 Python
浅谈Python中带_的变量或函数命名
Dec 04 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
python 多个参数不为空校验方法
Feb 14 Python
Python判断有效的数独算法示例
Feb 23 Python
python如何将多个PDF进行合并
Aug 13 Python
Python pandas实现excel工作表合并功能详解
Aug 29 Python
python实现多线程端口扫描
Aug 31 Python
Python调用OpenCV实现图像平滑代码实例
Jun 19 Python
python Socket网络编程实现C/S模式和P2P
Jun 22 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
一个数据采集类
2007/02/14 PHP
linux下 C语言对 php 扩展
2008/12/14 PHP
PHP采集相关教程之一 CURL函数库
2010/02/15 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
PHP中list方法用法示例
2016/12/01 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
jQuery实现倒计时按钮功能代码分享
2014/09/03 Javascript
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
Javascript中replace()小结
2015/09/30 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
Python正则表达式如何匹配中文
2020/05/27 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
程序员跳槽必看面试题总结
2013/06/28 面试题
先进个人获奖感言
2014/01/24 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
药品开票员岗位职责
2015/04/15 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android