Note
Go to the end to download the full example code.
Anonymize DICOM data¶
This example is a starting point to anonymize DICOM data.
It shows how to read data and replace tags: person names, patient ID, optionally remove curves and private tags, and write the results in a new file.
Anonymize a single file¶
(0010,0020) Patient ID LO: '4MR1'
(0010,0030) Patient's Birth Date DA: ''
We can define a callback function to find all tags corresponding to a person names inside the dataset. We can also define a callback function to remove curves tags.
We can use the different callback function to iterate through the dataset but also some other tags such that patient ID, etc.
ds.PatientID = "id"
ds.walk(person_names_callback)
ds.walk(curves_callback)
pydicom allows to remove private tags using remove_private_tags
method
ds.remove_private_tags()
Data elements of type 3 (optional) can be easily deleted using del
or
delattr
.
if "OtherPatientIDs" in ds:
delattr(ds, "OtherPatientIDs")
if "OtherPatientIDsSequence" in ds:
del ds.OtherPatientIDsSequence
For data elements of type 2, this is possible to blank it by assigning a blank string.
Finally, this is possible to store the image
for keyword in ["PatientID", "PatientBirthDate"]:
print(ds.data_element(keyword))
path = tempfile.NamedTemporaryFile().name
ds.save_as(path)
(0010,0020) Patient ID LO: 'id'
(0010,0030) Patient's Birth Date DA: '19000101'
Total running time of the script: (0 minutes 0.007 seconds)