Anonymization¶
The Anonymizer provides functionality for anonymizing DICOM datasets
according to specified policies.
Policies¶
A Policy is a dictionary with the key bing a DICOM tag and the value a TagPolicy
This defines how individual tags or groups should be anonymized.
from icometrix_sdk.anonymizer.models import TagPolicy, Policy
from icometrix_sdk.anonymizer.hash_factory import SHA3
def replace_vl(el: DataElement, _):
    el.value = "Jane^Doe"
def sha3_hash(element: DataElement, _):
    element.value = SHA3(size=512).calculate_hash(element.value)[:64]
# A policy defining how tags should be anonymized
policy: Policy = {
    0x00080020: TagPolicy("keep", "StudyDate"), # Don't change the StudyDate
    0x0020000d: TagPolicy("hash", "StudyInstanceUID"), # Hash the StudyInstanceUID by the default hash function
    0x00100010: TagPolicy("replace", "PatientName", replace_fn=replace_vl), # Replace the PatientName by "Jane^Doe"
    0x00100020: TagPolicy("replace", "PatientID", replace_fn=sha3_hash), # Replace the PatientID by a sha3 hash of the PatientID
    0x00100030: TagPolicy("round", "PatientBirthday"), # Round the PatientBirthday to YYYY0101
}
# A policy defining how groups should be anonymized
group_policy: Policy = {
    0x0018: TagPolicy("keep", "Acquisition: mage acquisition device and imaging procedure"),
    0x5200: TagPolicy("keep", "Multi-frame Functional Groups"),
}
Anonymizer¶
The Anonymizer requires 3 parameters:
- policy: a Policy for DICOM tags 
- group_policy: a Policy for DICOM groups 
- hash_algo: The hash algorithm you want to use when using a hash - action
from icometrix_sdk.anonymizer.anonymizer import Anonymizer
from icometrix_sdk.anonymizer.hash_factory import HashFactory
from pydicom.data import get_testdata_file
hash_algo = HashFactory.create_hash_method("md5")
# You can use the policy examples above, make your own or import one:
# from icometrix_sdk.anonymizer.policy import policy, group_policy
anonymizer = Anonymizer(policy, group_policy, hash_algo)
dataset = pydicom.read_file(get_testdata_file("MR_small.dcm"))
anonymizer.anonymize(dataset).save_as("anonymized_MR_small.dcm")
Settings¶
Some default behaviour can be overwritten by setting environment variables:
- ROOT_UID: The root of UID used when hashing DICOM tags with the VR UI (https://dicom.nema.org/dicom/2013/output/chtml/part05/chapter_B.html) 
- VALIDATION_MODE: and int defining how validation should be done (0: ignore, 1:warn, 2: raise),