【问题标题】:How to save Dicom Image with dicom format after anonymization?匿名化后如何以dicom格式保存Dicom图像?
【发布时间】:2020-04-25 12:29:20
【问题描述】:
  • 我读取了包含所有元数据的 dicom 图像,并对某些字段进行了匿名化,之后我想再次编写它,但出现错误:if None in (dataset.is_little_endian, dataset.is_implicit_VR): AttributeError: 'dict' object has no attribute 'is_little_endian'
  • 我看了documentation of pydicom,但不明白怎么做!
  • 如何在一个工作指令中重新编写它?
  • 编辑:出生日期更改为 None 而不是 'None',并且 dcmwrite 被替换为 save_as
import pydicom
from pydicom.misc import is_dicom

fp ='1.dcm'
dico = pydicom.filereader.dcmread(fp)
if(is_dicom(dico)):
        dico['PatientID']= 'None'
        dico['PatientBirthDate'] = None
        dico['is_little_endian'] = True
        dico['is_implicit_VR'] = True
        path = '/dataset'
        # dico.save_as(os.path.join(path,'Anonymous.dcm'))
        pydicom.dcmwrite(os.path.join(path,'Anonymous.dcm'), dico)

【问题讨论】:

  • 使用pydicom.dcmwrite(filename, dico)。此外,"None" 不是有效日期 - 您的意思是 None
  • @MrBeanBremen 我把生日改成None,用pydicom.dcmwrite(filename, dico),得到如下错误:AttributeError: 'dict' object has no attribute 'is_little_endian'
  • 啊,是的,您必须在数据集中设置is_little_endianis_implicite。应该在某个地方的文档中,我可以在今天晚些时候查找(现在没有时间)。
  • @MrBeanBremen 提前致谢。

标签: pydicom


【解决方案1】:

好的,如果您在第一次尝试中使用save_as,那么它实际上应该可以工作。这是应该工作的代码:

import pydicom
from pydicom.misc import is_dicom

dico = pydicom.filereader.dcmread('1.dcm')
dico.PatientID = 'None'
dico.PatientBirthDate = None
path = '/dataset'
dico.save_as(os.path.join(path,'Anonymous.dcm'))
# alternatively:
# dcmwrite(os.path.join(path,'Anonymous.dcm', dico)

请注意,我已将 dico['PatientID'] 更改为 dico.PatientID。这不仅是一个方便的快捷方式,而且改变了语义:如果你分配给dico['PatientID'],你必须分配一个DataElement

dico['PatientID'] = DataElement(0x00100020, 'PN', b'None')

而如果使用关键字,则可以直接分配值(在内部转换为DataElement)。

我同意文档在这方面有些欠缺 - 我认为添加一个简单的示例来读取 DICOM 文件、修改它并写回它是有意义的。但是,如果您查看the basic dataset documentation,您应该会找到大部分需要的信息。

关于上述属性is_little_endianis_implicit_VR 的注释:仅当您编写没有设置传输语法的新数据集时才需要这些属性。 Here 就是这种情况的一个例子。如果数据集是从有效的 DICOM 文件中读取的,则它已经设置了这些属性。

【讨论】:

  • @mrbean-bermen dico.save_as(os.path.join(path,'Anonymous.dcm')) AttributeError: 'dict' object has no attribute 'save_as',在读取dicom图像后它变成了字典,我怎样才能将它再次转换为FileDataset对象才能做到save_as跨度>
  • 这很奇怪 - 这不应该发生。您使用哪个 pydicom 版本?你是说type(dico)在分配后说dict吗?
  • @MrBean-Bermen 现在可以使用了,谢谢,我已经将数据从一个文件复制到另一个文件,所以它们已经转换了,我会修复它,再次感谢。
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多