Как сохранить изображение Dicom в формате dicom после анонимизации? - PullRequest
0 голосов
/ 25 апреля 2020
  • Я прочитал изображение dicom со всеми метаданными и анонимизировал некоторые поля, после этого я хочу написать его снова, но получаю сообщение об ошибке: if None in (dataset.is_little_endian, dataset.is_implicit_VR): AttributeError: 'dict' object has no attribute 'is_little_endian'
  • Я прочитал документация по 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)

1 Ответ

3 голосов
/ 25 апреля 2020

Хорошо, использование 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, его изменения и записи обратно. Но если вы проверите базовую c документацию по набору данных , вы должны найти большую часть необходимой информации.

Примечание относительно упомянутых свойств is_little_endian и is_implicit_VR: они необходимы только в том случае, если вы пишете новый набор данных, для которого не установлен синтаксис передачи. Здесь является примером для этого случая. Если набор данных читается из действительного файла DICOM, у него уже установлены эти свойства.

...