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利用hook技术破解https的实例代码
Mar 25 Python
解读Python中degrees()方法的使用
May 18 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
Jan 20 Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
python如何压缩新文件到已有ZIP文件
Mar 14 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 Python
python实现横向拼接图片
Mar 23 Python
关于Keras Dense层整理
May 21 Python
django form和field具体方法和属性说明
Jul 09 Python
详解Django中的FBV和CBV对比分析
Mar 01 Python
Python 键盘事件详解
Nov 11 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
mysql 字段类型说明
2007/04/27 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
php 数据结构之链表队列
2017/10/17 PHP
JavaScript While 循环基础教程
2007/04/05 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
Python Web框架Tornado运行和部署
2020/10/19 Python
用Python一键搭建Http服务器的方法
2018/06/01 Python
Django文件上传与下载(FileFlid)
2019/10/06 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
技校教师求职简历的自我评价
2013/10/20 职场文书
专科毕业生就业推荐信
2013/11/01 职场文书
市场营销专科应届生求职信
2013/11/24 职场文书
综合实践活动总结
2014/05/05 职场文书
中国梦团日活动总结
2014/07/07 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
暂停营业通知
2015/04/25 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
CSS3实现指纹特效代码
2022/03/17 HTML / CSS