分析物的文件在当地蟒蛇
题
什么是最简单和最python的方式来分析一个物的文件?
本机Python执行而不使用非蟒蛇图书馆将更优先。物是标准格式的文件在数字的医疗成像(看起来 在这里, 更多信息)。
有一些C/C++库,支持阅读(a子集)的物文件。两个或三个他们甚至有Python绑定。本机Python分析器将服务于两个目的,对我说:
- 没有必要建立任何外部C/C++库。
- 了解有关物文件的格式。
解决方案
截至今天,还有另一个纯Python包可以读取DICOM文件: pydicom
其他提示
这些天我正在大量使用 pydicom 。 / p>
开始玩它很容易:
import dicom
data = dicom.read_file("yourdicomfile.dcm")
从“数据”中获取有趣的东西。对象,某种类似于 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格式,请参阅“医学数字成像和通信(DICOM):实用入门和生存指南”。作者:Oleg Pianykh非常易读,并对关键的DICOM概念进行了很好的介绍。 Springer-Verlag是本书的出版商。当然,完整的DICOM标准是最终的参考,尽管它有点令人生畏。它可以从NEMA( http://medical.nema.org )获得。
文件格式实际上不如您想象的那么深奥,并且由前导码后跟一系列数据元素组成。前导码包含ASCII文本“DICM”。以及几个未使用的保留字节。序言之后是一系列数据元素。每个数据元素由元素的大小,表示值表示的双字符ASCII码,DICOM标记和值组成。文件中的数据元素按其DICOM标记号排序。图像本身只是另一个具有大小,值表示等的数据元素。
值表示确切地指定了如何解释该值。这是一个数字吗?它是一个字符串吗?如果是字符串,是短字还是长字,允许哪些字符?值表示代码告诉您。
DICOM标签是由2字节“组”组成的4字节十六进制代码。数字和2字节“元素”数。组号是一个标识符,用于告诉您标签应用于哪个信息实体(例如,组0010指的是患者,组0020指的是研究)。元素编号标识值的解释(诸如患者的ID号,系列描述等项目)。要了解如何解释该值,您的代码将在字典文件中查找DICOM标记。
还涉及其他一些细节,但这就是它的本质。您可以做的最有意义的事情是了解文件格式,可以使用示例DICOM文件,使用十六进制编辑器查看它,然后完成解析它的过程。我建议不要试图通过查看现有的开源实现来了解DICOM,至少在最初阶段。它更容易混淆而不是启发。全局了解更为重要。一旦你掌握了全局,那么你就可以陷入微妙之中。
上面提到的 pydicom 库似乎是一个访问DICOM数据结构的绝佳库。用它来访问例如RT DOSE数据,我想有人会做类似
的事情import dicom,numpy
dose = dicom.ReadFile("RTDOSE.dcm")
d = numpy.fromstring(dose.PixelData,dtype=numpy.int16)
d = d.reshape((dose.NumberofFrames,dose.Columns,dose.Rows))
然后,如果你在mayavi,
from enthought.mayavi import mlab
mlab.pipeline.scalar_field(d)
这会给出错误的坐标和剂量缩放,但原则应该是合理的。
CT数据应该非常相似。
现在发生了更新的gdcm开发:
它支持python上的Java和C#。
为什么要编写又一个 dicom实现,当您可以集中单个C ++实现并让它可以访问这么多不同的语言时
几年前我一直在寻找相同的东西并发现了这个: Python DICOM lib
我对代码印象不是很深刻,但它是本机Python读取DICOM文件。
物是一个真正的疼痛...即使制造商的标准。如果你写你自己的物图书馆,你会发现不同的制造商DICOMs是有效地与其他供应商[引文。
我尝试了(在我的业余时间)编写C物分析器借重从一个漂亮的小红宝石parser我碰巧妙地叫做'红宝石-物'.它实际上是非常可读的编码(我看着一个较小的早期版本)。
最头痛是试图积累的库的标题标记与预期的数据类型。有的标准定义的标签和商标签。红宝石物的文件包含一个图书馆的标签,在一个文本格式,可以很容易检查。
我放弃了官方的文献,因为我是唯一感兴趣的文件的格式似乎只能在10个或以巨大的Pdf文件。
我当地的物件文件不被压缩,并按照标准便于代码位安排,但是准备对各种压缩和奇怪的12位的图像存储在8位的集装箱或大或小的字节序和没有填补的位...
我放弃了一次时间变得非常匮乏。
蟒蛇可能是一个更好的选择,而不是C对于这种风格的头分析虽然...
我想知道原始海报尝试了什么以及哪些方法有效并且不适用于他。我从未使用过DICOM,但快速谷歌搜索“DICOM python”给了几个有趣的结果。看来这个项目: http://www.creatis.univ-lyon1.fr / Public / Gdcm / 应该提供您想要的。它有python绑定和非常活跃的邮件列表。