您好我正在使用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?
而且,我可以通读MATLAB
,VTK
,ITK
,但pydicom
所以现在我要做的是通过SimpleITK
手动设置TransferSyntaxUID,然后通过pydicom
再次阅读。
我会告诉你什么时候有效
提前致谢
答案 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。