def TestModifyFields(filename): outfilename = filename + ".rewrite" r = gdcm.Reader() r.SetFileName(filename) sucess = r.Read() #print r.GetFile().GetDataSet() ds = r.GetFile().GetDataSet() #print dir(ds) # eg, let's remove a tag removetag = gdcm.Tag(0x0043, 0x106f) if ds.FindDataElement(removetag): ds.Remove(removetag) # let's replace a value: replacetag = gdcm.Tag(0x0010, 0x0010) if ds.FindDataElement(replacetag): de = ds.GetDataElement(replacetag) #print dir(de) patname = "This^is^an^example" vl = gdcm.VL(len(patname)) de.SetByteValue(patname, vl) # let's insert a new dataelement # <entry group="0012" element="0062" vr="CS" vm="1" name="Patient Identity Removed"/> pir = gdcm.DataElement(gdcm.Tag(0x0012, 0x0062)) pir.SetVR(gdcm.VR(gdcm.VR.CS)) # specify the VR explicitely yes = "YES" pir.SetByteValue(yes, gdcm.VL(len(yes))) ds.Insert(pir) # try again but pretend we don't know the VR # <entry group="0012" element="0063" vr="LO" vm="1-n" name="De-identification Method"/> deidmethod = gdcm.Tag(0x0012, 0x0063) # retrieve the supreme global instance, sum of all knowledge in da whole universe: dicomdicts = gdcm.GlobalInstance.GetDicts() dictel = dicomdicts.GetDictEntry(deidmethod) #print dictel.GetVR() deid = gdcm.DataElement(deidmethod) deid.SetVR(dictel.GetVR()) methodstr = "Well known Company" #deid.SetByteValue( methodstr, gdcm.VL(len(methodstr)) ) deid.SetByteValue(methodstr, gdcm.VL(len(methodstr))) ds.Insert(deid) #w = gdcm.Writer() #w.SetFileName( outfilename ) #w.SetFile( r.GetFile() ) #sucess = w.Write() return sucess
def remove_grouplengths(f, ds): it = ds.GetDES().begin() while not it.equal(ds.GetDES().end()): de = it.next() t = de.GetTag() if t.IsGroupLength(): ds.GetDES().erase(it) else: vr = gdcm.DataSetHelper.ComputeVR(f, ds, t) if (vr.Compatible(gdcm.VR(gdcm.VR.SQ))): sq = de.GetValueAsSQ() if sq is not None \ and sq.GetNumberOfItems() > 0: n = sq.GetNumberOfItems() for i in range(1, n + 1): item = sq.GetItem(i) nested = item.GetNestedDataSet() remove_grouplengths(f, nested) de.SetValue(sq.GetPointer()) de.SetVLToUndefined() ds.Replace(de)
file1 = sys.argv[1] file2 = sys.argv[2] r = gdcm.Reader() r.SetFileName( file1 ) if not r.Read(): sys.exit(1) f = r.GetFile() ds = f.GetDataSet() #tsis = gdcm.Tag(0x0008,0x2112) # SourceImageSequence # Create a dataelement de = gdcm.DataElement(gdcm.Tag(0x0010, 0x2180)) de.SetByteStringValue("Occupation") de.SetVR(gdcm.VR(gdcm.VR.SH)) # Create an item it=gdcm.Item() it.SetVLToUndefined() # Needed to not popup error message #it.InsertDataElement(de) nds=it.GetNestedDataSet() nds.Insert(de) # Create a Sequence sq=gdcm.SequenceOfItems().New() sq.SetLengthToUndefined() sq.AddItem(it) # Insert sequence into data set des=gdcm.DataElement(gdcm.Tag(0x0400,0x0550))
if __name__ == "__main__": r = gdcm.Reader() # Will require Testing... dataroot = gdcm.Testing.GetDataRoot() filename = os.path.join( dataroot, '012345.002.050.dcm' ) r.SetFileName( filename ) r.Read() f = r.GetFile() ds = f.GetDataSet() uid = "1.2.840.10008.5.1.4.1.1.66" # f = gdcm.File() # ds = f.GetDataSet() de = gdcm.DataElement( gdcm.Tag(0x0008,0x0016) ) de.SetByteStringValue( uid ) vr = gdcm.VR( gdcm.VR.UI ) de.SetVR( vr ) ds.Replace( de ) ano = gdcm.Anonymizer() ano.SetFile( r.GetFile() ) ano.RemovePrivateTags() ano.RemoveGroupLength() taglist = [ gdcm.Tag(0x0008,0x0008), gdcm.Tag(0x0008,0x0022), gdcm.Tag(0x0008,0x0032), gdcm.Tag(0x0008,0x2111), gdcm.Tag(0x0008,0x1150), gdcm.Tag(0x0008,0x1155), gdcm.Tag(0x0008,0x0100),
""" import sys import gdcm if __name__ == "__main__": file1 = sys.argv[1] file2 = sys.argv[2] r = gdcm.Reader() r.SetFileName(file1) if not r.Read(): sys.exit(1) f = r.GetFile() ds = f.GetDataSet() # Create a dataelement de = gdcm.DataElement(gdcm.Tag(0x0051, 0x1011)) de.SetByteStringValue("p2") de.SetVR(gdcm.VR(gdcm.VR.SH)) ds.Insert(de) w = gdcm.Writer() w.SetFile(f) w.SetFileName(file2) if not w.Write(): sys.exit(1)