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模块学习 filecmp 文件比较
Aug 27 Python
centos系统升级python 2.7.3
Jul 03 Python
python opencv之SIFT算法示例
Feb 24 Python
python构建基础的爬虫教学
Dec 23 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 Python
python的scipy实现插值的示例代码
Nov 12 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
python绘图模块之利用turtle画图
Feb 12 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
Mar 04 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下几种删除目录的方法总结
2007/08/19 PHP
php技巧小结【推荐】
2017/01/19 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
ES6数组的扩展详解
2017/04/25 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
webpack3之loader全解析
2017/10/26 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
python生成词云的实现方法(推荐)
2017/06/13 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
python搜索算法原理及实例讲解
2020/11/18 Python
css3中transition属性详解
2014/09/02 HTML / CSS
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
数学教学随笔感言
2014/02/17 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
解除聘用合同证明书范本
2014/09/11 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书