1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
############################################################################
#
# Program: GDCM (Grassroots DICOM). A DICOM library
#
# Copyright (c) 2006-2011 Mathieu Malaterre
# All rights reserved.
# See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even
# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the above copyright notice for more information.
#
############################################################################
"""
This example shows how one can use the gdcm.Anonymizer in 'dumb' mode.
This class becomes really handy when one knows which particular tag to fill in.
Usage:
python DumbAnonymizer.py gdcmData/012345.002.050.dcm out.dcm
"""
import gdcm
# http://www.oid-info.com/get/1.3.6.1.4.17434
THERALYS_ORG_ROOT = "1.3.6.1.4.17434"
tag_rules={
# Value
(0x0012,0x0010):("Value","MySponsorName"),
(0x0012,0x0020):("Value","MyProtocolID"),
(0x0012,0x0021):("Value","MyProtocolName"),
(0x0012,0x0062):("Value","YES"),
(0x0012,0x0063):("Value","MyDeidentificationMethod"),
# Method
#(0x0002,0x0003):("Method","GenerateMSOPId"),
#(0x0008,0x1155):("Method","GenerateMSOPId"),
(0x0008,0x0018):("Method","GenerateMSOPId"),
(0x0010,0x0010):("Method","GetSponsorInitials"),
(0x0010,0x0020):("Method","GetSponsorId"),
(0x0012,0x0030):("Method","GetSiteId"),
(0x0012,0x0031):("Method","GetSiteName"),
(0x0012,0x0040):("Method","GetSponsorId"),
(0x0012,0x0050):("Method","GetTPId"),
(0x0018,0x0022):("Method","KeepIfExist"),
(0x0018,0x1315):("Method","KeepIfExist"),
(0x0020,0x000d):("Method","GenerateStudyId"),
(0x0020,0x000e):("Method","GenerateSeriesId"),
(0x0020,0x1002):("Method","GetNumberOfFrames"),
(0x0020,0x0020):("Method","GetPatientOrientation"),
# Other:
(0x0012,0x0051):("Patient Field","Type Examen"),
(0x0018,0x1250):("Sequence Field","Receive Coil"),
(0x0018,0x0088):("Sequence Field","Spacing Between Slice"),
(0x0018,0x0095):("Sequence Field","Pixel Bandwidth"),
(0x0018,0x0082):("Sequence Field","Invertion Time"),
}
class MyAnon:
def __init__(self):
self.studyuid = None
self.seriesuid = None
generator = gdcm.UIDGenerator()
if not self.studyuid:
self.studyuid = generator.Generate()
if not self.seriesuid:
self.seriesuid = generator.Generate()
def GetSponsorInitials(self):
return "dummy^foobar"
def GenerateStudyId(self):
return self.studyuid
def GenerateSeriesId(self):
return self.seriesuid
#def GenerateMSOPId(self):
def GenerateMSOPId(self):
generator = gdcm.UIDGenerator()
return generator.Generate()
def GetSiteId(self):
return "MySiteId"
def GetSiteName(self):
return "MySiteName"
def GetSponsorId(self):
return "MySponsorId"
def GetTPId(self):
return "MyTP"
if __name__ == "__main__":
import sys
gdcm.FileMetaInformation.SetSourceApplicationEntityTitle( "DumbAnonymizer" )
gdcm.UIDGenerator.SetRoot( THERALYS_ORG_ROOT )
r = gdcm.Reader()
filename = sys.argv[1]
r.SetFileName( filename )
if not r.Read(): sys.exit(1)
obj = MyAnon()
w = gdcm.Writer()
ano = gdcm.Anonymizer()
ano.SetFile( r.GetFile() )
ano.RemoveGroupLength()
for tag,rule in tag_rules.items():
if rule[0] == 'Value':
print tag,rule
ano.Replace( gdcm.Tag( tag[0], tag[1] ), rule[1] )
elif rule[0] == 'Method':
print tag,rule
# result = locals()[rule[1]]()
methodname = rule[1]
if hasattr(obj, methodname):
_member = getattr(obj, methodname)
result = _member()
ano.Replace( gdcm.Tag( tag[0], tag[1] ), result )
else:
print "Problem with: ", methodname
outfilename = sys.argv[2]
w.SetFileName( outfilename )
w.SetFile( ano.GetFile() )
if not w.Write(): sys.exit(1)
|