用原生Python解析DICOM文件

2024-05-17 03:20:17 发布

您现在位置:Python中文网/ 问答频道 /正文

解析DICOM文件的最简单、最恶毒的方法是什么?

最好是不使用非Python库的本地Python实现。DICOM是数字医学成像中的标准文件格式(有关详细信息,请参阅here)。

<>有一些C/C++库支持DICOM文件的读取(子集)。其中两三个甚至有Python绑定。本机Python解析器有两个用途:

  1. 不需要构建任何外部C/C++库。
  2. 了解DICOM文件格式。

Tags: 文件方法解析器标准here请参阅详细信息数字
3条回答

这些天我在大量使用pydicom,而且它很厉害。

开始玩它很容易:

import dicom 
data = dicom.read_file("yourdicomfile.dcm")

要从“data”对象中获取有趣的内容,以某种方式类似于dcmdump输出:

for key in data.dir():        
    value = getattr(data, key, '')
    if type(value) is dicom.UID.UID or key == "PixelData":
        continue

    print "%s: %s" % (key, value)

我认为了解dicom格式的一个很好的方法是打开类似的文件,编写代码,根据不同的方面对它们进行比较:学习描述、窗口宽度和中心、像素表示等等。

玩得开心!:)

如果你想了解DICOM格式,Oleg Pianykh的《医学数字成像与通信(DICOM):实用介绍与生存指南》(DICOM:A Practical Introduction and Survival Guide)是一本可读性很强的书,它很好地介绍了DICOM的关键概念。斯普林格·维拉格是这本书的出版商。当然,完整的DICOM标准是最终的参考,尽管它有点吓人。可从NEMA(http://medical.nema.org)获得。

文件格式实际上比您想象的要不那么深奥,它由一个前导码和一系列数据元素组成。前导码包含ASCII文本“DICM”和几个未使用的保留字节。前导之后是一系列数据元素。每个数据元素由元素的大小、表示值表示的两个字符的ASCII代码、DICOM标记和值组成。文件中的数据元素按其DICOM标记号排序。图像本身只是另一个具有大小、值表示等的数据元素

值表示确切地指定了如何解释该值。是个号码吗?是字符串吗?如果是字符串,是短字符串还是长字符串?允许使用哪些字符?值表示代码告诉您这一点。

DICOM标记是一个4字节的十六进制代码,由一个2字节的“组”号和一个2字节的“元素”号组成。组号是一个标识符,它告诉您标签应用于哪个信息实体(例如,组0010表示患者,组0020表示研究)。元素编号标识值的解释(如患者的ID号、序列描述等)。为了找出应该如何解释该值,您的代码在字典文件中查找DICOM标记。

还有其他一些细节,但这是它的本质。也许学习文件格式最有启发性的事情就是以一个DICOM文件为例,用hex编辑器查看它,然后在思想上分析它。我建议不要试图通过查看现有的开源实现来了解DICOM,至少在最初是这样。它更容易混淆而不是启发。了解全局更为重要。一旦你掌握了大局,你就可以进入微妙的阶段。

从今天起,还有一个纯Python包可以读取DICOM文件:pydicom

相关问题 更多 >