匿名化后如何保存为dicom格式的Dicom图片?
How to save Dicom Image with dicom format after anonymization?
- 我读了一张包含所有元数据的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)
好的,如果您像第一次尝试那样使用它,那么使用 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_endian
和 is_implicit_VR
的说明:仅当您编写未设置传输语法的新数据集时才需要这些属性。 Here 是这种情况的一个例子。如果数据集是从有效的 DICOM 文件中读取的,则它已经设置了这些属性。
- 我读了一张包含所有元数据的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)
好的,如果您像第一次尝试那样使用它,那么使用 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_endian
和 is_implicit_VR
的说明:仅当您编写未设置传输语法的新数据集时才需要这些属性。 Here 是这种情况的一个例子。如果数据集是从有效的 DICOM 文件中读取的,则它已经设置了这些属性。