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实例之wxpython中Frame使用方法
Jun 09 Python
python使用socket创建tcp服务器和客户端
Apr 12 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
基于python的图片修复程序(实现水印去除)
Jun 04 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
深入浅析Python代码规范性检测
Jul 31 Python
python如何随机生成高强度密码
Aug 19 Python
python开根号实例讲解
Aug 30 Python
python实现人工蜂群算法
Sep 18 Python
Django如何实现防止XSS攻击
Oct 13 Python
python引入其他文件夹下的py文件具体方法
May 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
thinkphp的CURD和查询方式介绍
2013/12/19 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
javascript数组的使用
2013/03/28 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
python实现的重启关机程序实例
2014/08/21 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
浅述python2与python3的简单区别
2018/09/19 Python
使用python进行拆分大文件的方法
2018/12/10 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
python 录制系统声音的示例
2020/12/21 Python
幼儿园大班见习报告
2014/10/31 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
MySQL中order by的执行过程
2022/06/05 MySQL