pydicom:数据集没有属性'TransferSyntaxUID'

时间:2017-09-05 00:38:41

标签: python matlab dicom itk pydicom

您好我正在使用pydicom

阅读DICOM文件

这篇文章不同于 such as this one

这是我的代码

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?

而且,我可以通读MATLABVTKITK,但pydicom

所以现在我要做的是通过SimpleITK手动设置TransferSyntaxUID,然后通过pydicom再次阅读。

我会告诉你什么时候有效

提前致谢

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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