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 对目录下的文件进行过滤删除
Dec 27 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
python远程连接服务器MySQL数据库
Jul 02 Python
Python3 单行多行万能正则匹配方法
Jan 07 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
Python交互式图形编程的实现
Jul 25 Python
Python API自动化框架总结
Nov 12 Python
pytorch forward两个参数实例
Jan 17 Python
pycharm 的Structure界面设置操作
Feb 05 Python
python中print格式化输出的问题
Apr 16 Python
python解析照片拍摄时间进行图片整理
Jul 23 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
15种PHP Encoder的比较
2007/04/17 PHP
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
js判断是否是手机页面
2017/03/17 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
讲解Python中fileno()方法的使用
2015/05/24 Python
简单理解Python中的装饰器
2015/07/31 Python
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
Python简单读取json文件功能示例
2017/11/30 Python
Python实现自动发送邮件功能
2021/03/02 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
家长学校实施方案
2014/03/15 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
2014年体育部工作总结
2014/11/13 职场文书
工作收入证明范本
2015/06/12 职场文书
如何撰写促销方案?
2019/07/05 职场文书
处理canvas绘制图片模糊问题
2022/05/11 Javascript