匿名化后如何保存为dicom格式的Dicom图片?

How to save Dicom Image with dicom format after anonymization?

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)

好的,如果您像第一次尝试那样使用它,那么使用 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 文件中读取的,则它已经设置了这些属性。