一、Dicom简介

1、DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052)。它定义了质量能满足临床需要的可用于数据交换的医学图像格式。
      DICOM被广泛应用于放射医疗心血管成像以及放射诊疗诊断设备X射线,CT,核磁共振,超声等),并且在眼科和牙科等其它医学领域得到越来越深入广泛的应用。在数以万计的在用医学成像设备中,DICOM是部署最为广泛的医疗信息标准之一。当前大约有百亿级符合DICOM标准的医学图像用于临床使用。
      自从1985年DICOM标准第一版发布以来,DICOM给放射学实践带来了革命性的改变,X光胶片被全数字化的工作流程所代替。就像Internet成为信息传播应用的全新平台,DICOM使“改变临床医学面貌”的高级医学图像应用成为可能。比如在急诊科中,心脏负荷测试,乳腺癌的检查,DICOM为医生和病人服务,是医学成像有效工作的标准。
      DICOM标准中涵盖了医学数字图像的采集、归档、通信、显示及查询等几乎所有信息交换的协议;以开放互联的架构和面向对象的方法定义了一套包含各种类型的医学诊断图像及其相关的分析、报告等信息的对象集;定义了用于信息传递、交换的服务类与命令集,以及消息的标准响应;详述了标识各类信息对象的技术;提供了应用于网络环境(OSI或TCP/IP)的服务支持;结构化地定义了制造厂商的兼容性声明(Conformance Statement)。
      DICOM标准的推出与实现,大大简化了医学影像信息交换的实现,推动了远程放射学系统、图像管理与通信系统(PACS)的研究与发展,并且由于DICOM的开放性与互联性,使得与其它医学应用系统(HIS、RIS等)的集成成为可能。
      医学图像设备生成 DICOM 文件,医生使用 DICOM 阅读器(能够显示 DICOM 图像的计算机软件)阅读并对图像中发现的问题进行诊断.

基于C++的DCMTK、基于Java的dcm4che以及基于python的pydicom,都是非常优秀的解释DICOM标准的第三方库,通过在工程中引入它们可以避免软件开发人员去进行底层的解析工作,可为项目开发提高效率。

目前例如CT,核磁共振,超声等利用精确准直的X线束、γ射线、超声波等,与灵敏度极高的探测器一同围绕人体的某一部位作一个接一个的断面扫描,所以扫描后得到的图像是多层的图像,而我们把一层层的图像在z轴上堆叠起来就可以形成三维图像(这就涉及到三维重建的问题),这时,每一层的图像我们都可以存在dicom文件中(当然,dicom文件不是单纯的像素信息,它还有很多的数据头部信息),如下图,我们的目的就是要把在这些数据头部信息和像素信息从一系列dicom文件中读取出来。

二、Dicom的信息处理

①医学图像之DICOM格式解析
   1、DICOM内部信息详解(DICOM TagVR)
   2、利用python+pydicom这个库解析DICOM文件
   3、DICOM的三个切面)

②The usage of the Python programming language in scientific endeavors
      the primary purpose of this blog is to provide Python tutorials and promote time-saving yet little-known tools. Topics will include visualization, image processing, data analysis, high-performance computing etc etc.

③处理医疗影像的Python利器:PyDicom
Pydicom是一个用于处理DICOM格式文件的Python包,可以处理包括如医学图像(CT等)、报告等。

Pydicom支持DICOM格式的读取:可以将dicom文件读入python结构,同时支持修改后的数据集可以再次写入DICOM格式文件。但需要注意,它不是被设计为查看图像,主要是用来操作DICOM文件的各种数据元素。

三、Dicom格式转raw(python实现)

医学图像通常是通过dicom文件格式进行存储的,但为了便于读取和使用也常常将其转化为:每个病人一个mhd文件和一个同名的raw文件的格式,mhd即meta header data,数据头部信息,raw存储了像素信息。如下图所示:

      其中mhd文件存储了dicom的头部信息,由于头部信息很多生成mhd的方法有所不同,所以这里展示了通过ITK(ITK是美国国家卫生院下属的国立医学图书馆开发的一款医学图像处理软件包,是一个开源的、跨平台的影像分析扩展软件工具。)产生mhd文件的文件内容(利用写字板打开),有以下头部信息:

PYTHON 实现代码:

import cv2
import os
import pydicom
import numpy
import SimpleITK# 路径和列表声明
# 与python文件同一个目录下的文件夹,存储dicom文件,该文件路径最好不要含有中文
PathDicom = "D:/dicom_image/V"
# 与python文件同一个目录下的文件夹,用来存储mhd文件和raw文件,该文件路径最好不要含有中文
SaveRawDicom = "D:/dicom_image/V/SaveRaw"
lstFilesDCM = []# 将PathDicom文件夹下的dicom文件地址读取到lstFilesDCM中
for dirName, subdirList, fileList in os.walk(PathDicom):for filename in fileList:if ".dcm" in filename.lower():  # 判断文件是否为dicom文件print(filename)lstFilesDCM.append(os.path.join(dirName, filename))  # 加入到列表中# 第一步:将第一张图片作为参考图片,并认为所有图片具有相同维度
RefDs = pydicom.read_file(lstFilesDCM[0])  # 读取第一张dicom图片# 第二步:得到dicom图片所组成3D图片的维度
ConstPixelDims = (int(RefDs.Rows), int(RefDs.Columns), len(lstFilesDCM))  # ConstPixelDims是一个元组# 第三步:得到x方向和y方向的Spacing并得到z方向的层厚
ConstPixelSpacing = (float(RefDs.PixelSpacing[0]), float(RefDs.PixelSpacing[1]), float(RefDs.SliceThickness))# 第四步:得到图像的原点
Origin = RefDs.ImagePositionPatient# 根据维度创建一个numpy的三维数组,并将元素类型设为:pixel_array.dtype
ArrayDicom = numpy.zeros(ConstPixelDims, dtype=RefDs.pixel_array.dtype)  # array is a numpy array# 第五步:遍历所有的dicom文件,读取图像数据,存放在numpy数组中
i = 0
for filenameDCM in lstFilesDCM:ds = pydicom.read_file(filenameDCM)ArrayDicom[:, :, lstFilesDCM.index(filenameDCM)] = ds.pixel_arraycv2.imwrite("out_" + str(i) + ".png", ArrayDicom[:, :, lstFilesDCM.index(filenameDCM)])i += 1# 第六步:对numpy数组进行转置,即把坐标轴(x,y,z)变换为(z,y,x),这样是dicom存储文件的格式,即第一个维度为z轴便于图片堆叠
ArrayDicom = numpy.transpose(ArrayDicom, (2, 0, 1))# 第七步:将现在的numpy数组通过SimpleITK转化为mhd和raw文件
sitk_img = SimpleITK.GetImageFromArray(ArrayDicom, isVector=False)
sitk_img.SetSpacing(ConstPixelSpacing)
sitk_img.SetOrigin(Origin)
SimpleITK.WriteImage(sitk_img, os.path.join(SaveRawDicom, "sample" + ".mhd"))
参考:Dicom文件转mhd,raw文件格式(https://www.cnblogs.com/XDU-Lakers/p/10781321.html)

参考文献:
1、https://www.cnblogs.com/XDU-Lakers/p/9863114.html
2、https://pyscience.wordpress.com/2014/09/08/dicom-in-python-importing-medical-image-data-into-numpy-with-pydicom-and-vtk/
3、https://www.cnblogs.com/XDU-Lakers/p/10781321.html
4、https://zhuanlan.zhihu.com/p/59413289

有关dicom格式医学影像的分析相关推荐

  1. AI+医疗:使用神经网络进行医学影像识别分析 ⛵

  2. 2D分割算法应用于医学影像3D图像

    一.医学影像领域深度学习概念 1.模态:一种信息的来源或传播形式称为模态,比如嗅觉.听觉.雷达.红外等采集到的数据都不同模态.同时模态也有广泛定义,比如不同语言.不同情况所采集的数据等也称为不同模态. ...

  3. 转:常见的医学影像数据格式(1)

    常见的医学影像数据格式 在fMRI的早期,由于大多数据都用不同研究脉冲序列采集,然后离线大量重建,而且各研究中心文件格式各不相同.大多数的分析软件也都是各研究单位内部编写运用.如果这些数据不同其他中心 ...

  4. 当医学影像遇上深度学习 | 影像数据类型一览

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 写在前面 随着医学成像技术的发展与进步,图像处理在医学研究与临床医 ...

  5. 五问“ChatGPT+医学影像”:新一代的AI能否成为放射科医生的一把利器?

    自ChatGPT引爆人工智能领域以来,迅速吸引了来自不同领域的科学家和从业者的目光,期待着这一里程碑式的技术为自己的行业带来新的变革. 近日,上海科技大学生物医学工程学院创始院长.联影智能联席CEO沈 ...

  6. 磁共振t1t2信号记忆顺口溜_医学影像分割入门、MRI、t1、t2等序列概念

    医学影像分割,是深度学习与医学的结合,通过对医学影像的分析处理,实现对病灶部位的自动分割. MRI MRI是磁共振成像(Megnetic Resonace Imaging),原理是依据释放的能量(也可 ...

  7. 医学影像分割入门MRI关于T1、T2、Flair等概念

    医学影像分割入门MRI关于T1.T2.Flair等概念 相关概念:医学影像分割,是深度学习与医学的结合,通过对医学影像的分析处理,实现对病灶部位的自动分割. MRI MRI是磁共振成像(Megneti ...

  8. Dicom批量转nii(医学影像格式转换,SPM)

    Dicom批量转nii(医学影像格式转换,SPM) 实验中需要用spm12进行配准,spm12 配准只能导入nii格式,但影像是dicom格式的,需要先进行格式转换. spm12有自带的dicom转n ...

  9. ct是计算机软件分析报告吗,ct影像工作站|ct诊断报告系统|ct图文工作站|dicom软件系统|技易科技-医学影像软件网...

    ct影像工作站 ct医学影像工作站的常见名称:ct工作站.CT图文报告系统. ct影像工作站 .ct影像软件等. ct影像工作站与CT设备连接,获取影像,辅助医师管理病历.书 写诊断报告,统计分析,并 ...

最新文章

  1. SAP QM 检验批号码跳号问题之对策
  2. linux重置网络协议,Linux 内核网络协议栈 ------ tcp_ack 函数处理接收到的ACK包之后 ....
  3. Python(8):模块内置变量
  4. Machine Schedule为什么UVA过了POJ过不了
  5. 四六级php,详解四六级查询API+网页
  6. output.properties data exceeds its limit [2048] HUE执行脚本异常
  7. office另存为pdf的加载项_pdf怎么转换成word?打工人必备的丛林法则
  8. 为什么oracle的环境这么复杂_(草稿)兽医执业环境为什么如此复杂?这次我们谈谈需求...
  9. 查看/提取某文件夹中所有文件
  10. 游戏筑基开发之结构体定义动态数组及常见问题(C语言)
  11. spark入门Intellj环境配置scalark入门Intellj环境配置scala
  12. Wingdings特殊字符及符号对照表
  13. 差分GPS(differential GPS-DGPS,DGPS)
  14. Failed to open the host Key database file
  15. 特征工程——用转换器抽取特征
  16. PS-制作燃烧的字体
  17. matlab标定工具箱 使用,关于 matlab 标定工具箱的使用 | 学步园
  18. 【整理】图形学EI论文部分整理
  19. Android应用内跳转到google play或者其他应用市场详情页下载或者评价
  20. 即时通信---环信SDK(IOS)使用教程

热门文章

  1. python lambda if elif_Lambda包括if…elif…els
  2. Dubbo服务注册与发现的流程?
  3. 一文看懂激光点云滤波处理
  4. python fig.colorbar_python3 matplotlib自定义colorbar颜色条
  5. can总线不加末端电阻_小电阻之大作用——CAN终端电阻
  6. 盘点Salesforce导出Excel那点坑
  7. 测试前世死因软件,心理测试:进来测一测你前世的死因
  8. python职场应用英语作文_职场实用英语作文
  9. 这家创业公司技术进步,加深了物联网商业的三个前途
  10. Element Upload 上传图片