2017-09-05 586 views
0

嗨,我是从阅读DICOM文件与pydicompydicom:数据集没有属性 'TransferSyntaxUID'

这个职位的痛苦不同于 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'. 

I t匿名时出现错误。 我想知道为什么会发生这种情况。

正在删除与DICOM标准相关的TransferSyntaxUID?

而且,我可以通读MATLABVTKITKpydicom

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

,我会让你知道什么时候该工作

在此先感谢

回答

0

的pydicom库有一个更新是宽容缺失转移语法。作为一种解决方法,直到下一个版本,你可以修改filereader.py中的几行,如图所示here

+0

嗨达西,感谢您的回答,我会检查您链接的pydicom问题,我会让你知道的 – JessieB

0

从我对DICOM标准的理解看来,Transfer Syntax UID(0002,0010)是一个强制标记。这是一个type 1 tag它指示它is required

虽然这是标准所说的,但即使缺少这个标签,库仍然可以读取这些文件。我猜这是因为该标准还定义了一个default transfer syntax

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

+0

HI zivy,是谢谢你的回答,我同意你的观点,即Transfer Syntax是强制性的,但我想知道DICOM标准中的匿名协议允许使用空传输语法,正如PS 3.15中的表E.1-1所述。 [PS.3.15 pdf](http://dicom.nema.org/medical/dicom/current/output/pdf/part15.pdf) – JessieB

+0

嗨JessieB,不幸匿名化超出了我的DICOM专业知识。鉴于匿名数据不适用于患者治疗,我对DICOM规范之后的匿名者持怀疑态度。我怀疑他们不遵循标准是很常见的(只是基于个人对软件开发经验的看法)。 – zivy