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 相关文章推荐
在Django框架中运行Python应用全攻略
Jul 17 Python
Python+django实现简单的文件上传
Aug 17 Python
Python简单获取自身外网IP的方法
Sep 18 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
Python引用计数操作示例
Aug 23 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
python获取点击的坐标画图形的方法
Jul 09 Python
python实现证件照换底功能
Aug 20 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 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
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
JSON 学习之完全手册 图文
2007/05/29 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
js 判断数据类型的几种方法
2017/01/13 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
Python的Flask开发框架简单上手笔记
2015/11/16 Python
Python列表list排列组合操作示例
2018/12/18 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
北京银河万佳Java面试题
2012/03/21 面试题
RIP版本1跟版本2的区别
2013/12/30 面试题
电气自动化个人求职信范文
2014/02/03 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
自主招生自荐信格式
2015/03/04 职场文书
施工安全员岗位职责
2015/04/11 职场文书
求职信如何撰写?
2019/05/22 职场文书
python爬虫--selenium模块
2021/03/31 Python
Pyhton模块和包相关知识总结
2021/05/12 Python
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL