【问题标题】:pydicom : Dataset does not have attribute 'TransferSyntaxUID'pydicom:数据集没有属性“TransferSyntaxUID”
【发布时间】:2017-09-05 00:38:40
【问题描述】:

您好,我正在为使用 pydicom 读取 DICOM 文件而苦恼

这篇文章不同于 pydicom 'Dataset' object has no attribute 'TransferSyntaxUID'

这是我的代码

import dicom
dicom.read_file(file,force=True)

这会导致错误

        AttributeError                            Traceback (most recent call last)
    <ipython-input-32-a32aef2d2178> in <module>()
    ----> 1 dicom.read_file(raw_path + pat_lst[0] + '\\' + pat_dcm_lst[0],force=True)

    D:\Program Files\Anaconda2\lib\site-packages\dicom\filereader.pyc in read_file(fp, defer_size, stop_before_pixels, force)
        612     try:
        613         dataset = read_partial(fp, stop_when, defer_size=defer_size,
    --> 614                                force=force)
        615     finally:
        616         if not caller_owns_file:

    D:\Program Files\Anaconda2\lib\site-packages\dicom\filereader.pyc in read_partial(fileobj, stop_when, defer_size, force)
        520     if preamble:
        521         file_meta_dataset = _read_file_meta_info(fileobj)
    --> 522         transfer_syntax = file_meta_dataset.TransferSyntaxUID
        523         if transfer_syntax == dicom.UID.ImplicitVRLittleEndian:
        524             pass

    D:\Program Files\Anaconda2\lib\site-packages\dicom\dataset.pyc in __getattr__(self, name)
        254         if tag not in self:
        255             raise AttributeError("Dataset does not have attribute "
    --> 256                                  "'{0:s}'.".format(name))
        257         else:  # do have that dicom data_element
        258             return self[tag].value

    AttributeError: Dataset does not have attribute 'TransferSyntaxUID'.

我认为匿名时出了点问题。 我想知道为什么会这样。

是否删除了与 DICOM 标准相关的 TransferSyntaxUID?

而且,我可以阅读MATLABVTKITKpydicom

所以现在我要做的是通过 SimpleITK 手动设置 TransferSyntaxUID 并通过 pydicom 再次读取。

我会告诉你什么时候有效

提前致谢

【问题讨论】:

    标签: python matlab dicom itk pydicom


    【解决方案1】:

    pydicom 存储库有一个更新,可以容忍丢失的传输语法。作为下一个版本之前的解决方法,您可以修改 filereader.py 中的几行,如图所示 here

    【讨论】:

      【解决方案2】:

      根据我对 DICOM 标准的理解,传输语法 UID (0002,0010) 似乎是一个强制性标签。这是一个type 1 tag,表示它是is required

      虽然这是标准所说的,但即使缺少此标记,库也可能能够读取此类文件。我猜这是因为标准还定义了default transfer syntax

      关于使用 SimpleITK 设置值,这绝对可以。此外,如果您需要验证您的文件是否符合标准,您可以使用 David Clunie 的 dicom3tools,特别是 dciodvfy 和 dcdump。

      【讨论】:

      • HI zivy,是的,谢谢您的回答,我同意您的观点,即传输语法是强制性的,但我想知道 DICOM 标准中的匿名协议允许空传输语法,如表 E 中所述。 PS 3.15 中的 1-1。 PS.3.15 pdf
      • 嗨 JessieB,很遗憾,匿名化超出了我的 DICOM 专业知识范围。我对遵循 DICOM 规范的匿名者持怀疑态度,因为匿名数据不打算用于患者治疗。我怀疑他们不遵循标准是很常见的(只是基于个人软件开发经验的意见)。
      猜你喜欢
      • 1970-01-01
      • 2017-05-18
      • 2021-04-12
      • 2021-07-28
      • 1970-01-01
      • 2020-06-03
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多