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中List的sort方法指南
Sep 01 Python
PyMongo安装使用笔记
Apr 27 Python
Python3读取zip文件信息的方法
May 22 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
分享一个简单的python读写文件脚本
Nov 25 Python
python画图--输出指定像素点的颜色值方法
Jul 03 Python
Python远程开发环境部署与调试过程图解
Dec 09 Python
python dumps和loads区别详解
Feb 04 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
python让函数不返回结果的方法
Jun 22 Python
Pandas的Apply函数具体使用
Jul 21 Python
python编写扎金花小程序的实例代码
Feb 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
解析dedecms空间迁移步骤详解
2013/05/15 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
Python开发的实用计算器完整实例
2017/05/10 Python
python队列queue模块详解
2018/04/27 Python
python实现关键词提取的示例讲解
2018/04/28 Python
python3 拼接字符串的7种方法
2018/09/12 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
财务方面个人工作的自我评价
2013/12/28 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
企业出纳岗位职责
2014/03/12 职场文书
会计的岗位职责
2014/03/15 职场文书
团日活动总结报告
2014/06/25 职场文书
创先争优标语
2014/06/27 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
MySQL数据库必备之条件查询语句
2021/10/15 MySQL
Mybatis是这样防止sql注入的
2021/12/06 Java/Android