Medical Imaging

Dicom Anonymization Using Python

Tools: Python, Pydicom

Mohammed El Amine Mokhtari
2 min readNov 13, 2022

--

Task

In this blog post, I will show you how you can anonymize Dicom files so that you can hide the identity of the patients.

The original article on my blog website here.

Packages to Install

pip install pydicom
pip install glob2

If you want to know more about this library, then you can check their documentation here.

The code

The idea behind this operation is to use Pydicom to load the Dicom file and then change the variable Dicom file. You can turn PatientName into anything you want: a random name, anonymous (the convention), or even an empty string.

import pydicom as pm

dicom_path = 'path/to/dicom/file'
dicom_file = pm.dcmread(dicom_path)

print('The patient name is: ', dicom_file.PatientName)

Here we print the actual patient name: (I put my name on it because it was already anonymized)

The patient name is: Mohammed El Amine Mokhtari

To do the Dicom anonymization:

output_path_dicom = 'anonymous_slice.dcm'
dicom_file.PatientName = 'Anonymous' # or 'Amine', or ' ', ...
dicom_file.save_as(output_path_dicom)

Now you have an anonymized slice, if you want to check then you can do the same thing, upload the Dicom file and print the PatientNamevariable.

Anonymize a Group of Dicom Files

The Dicom anonymization should be performed on all of the case’s slices; here is the code to do so.

import pydicom as pm
from glob import glob
import os

def anonymize_dicom(in_path, out_path, PatientName='Anonymous'):
dicom_file = pm.dcmread(in_path)
dicom_file.PatientName = PatientName
dicom_file.save_as(out_path)

if __name__ == '__main__':
path_to_dicoms = 'path/to/all/the/dicoms'
slices = glob(os.path.join(path_to_dicoms, '*'))

for slice_ in slices:
anonymize_dicom(slice_, slice_)

I put the same path for the in_path and the out_path so that we overwrite the same file, but if you prefer keeping the Dicoms having the exact names and creating new anonymized Dicoms, then you can give another out_path. For the PatientName argument, I kept it empty because by default it will be ‘Anonymous’ but if you want something else then you can add it to the arguments.

Note

In this blog post, I spoke only about changing the name of the patient, but you can change even other information such as StudyID, StudyData, PatientBirthDate, and so on.

dicom_file.PatientBirthDate = 'Something'
dicom_file.StudyID = 'Something'
dicom_file.StudyDate = 'Something'

This concludes this blog post; I hope you found it useful. If so, don’t forget to keep a reaction because it will help me do more :)

--

--

Mohammed El Amine Mokhtari
Mohammed El Amine Mokhtari

Written by Mohammed El Amine Mokhtari

I'm a computer vision research assistant, YouTuber and online content creator. Co-founder at: https://pycad.co/

No responses yet