1
14
15"""
16Usage:
17
18 python --public /path/to/directory/
19or
20 python --private /path/to/directory/
21
22 python --public --extension bak /path/to/directory/
23
24rename -f 's/\.bak$//' *.bak
25
26TODO:
27http://docs.python.org/library/optparse.html#module-optparse
28"""
29
30import vtkgdcm
31import vtk
32import sys
33import gdcm
34
35def ProcessOneFilePublic(filename, outfilename, tmpfile):
37 vtkreader = vtkgdcm.vtkGDCMImageReader()
38 vtkreader.SetFileName( filename )
39 vtkreader.Update()
40
41 cast = vtk.vtkImageCast()
42 cast.SetInput( vtkreader.GetOutput() )
43 cast.SetOutputScalarTypeToUnsignedShort()
44
45
46
47 vtkwriter = vtkgdcm.vtkGDCMImageWriter()
48 vtkwriter.SetFileName( tmpfile )
49 vtkwriter.SetMedicalImageProperties( vtkreader.GetMedicalImageProperties() )
50 vtkwriter.SetDirectionCosines( vtkreader.GetDirectionCosines() )
51 print "Format:",vtkreader.GetImageFormat()
52 vtkwriter.SetImageFormat( vtkreader.GetImageFormat() )
53 vtkwriter.SetInput( cast.GetOutput() )
54
55 vtkwriter.Write()
56
57
58
60 tmpreader.SetFileName( tmpfile )
61 if not tmpreader.Read():
62 sys.exit(1)
63
65 reader.SetFileName( filename )
66 if not reader.Read():
67 sys.exit(1)
68
69
70 ds = reader.GetFile().GetDataSet()
71 tags = [
75 ]
76 for tag in tags:
77 ds.Remove( tag )
78
80 writer.SetFileName( outfilename )
81
82 writer.SetImage( tmpreader.GetImage() )
83
84 writer.SetFile( reader.GetFile() )
85 if not writer.Write():
86 sys.exit(1)
87
88def ProcessOneFilePrivate(filename, outfilename, tmpfile):
89 vtkreader = vtkgdcm.vtkGDCMImageReader()
90 vtkreader.SetFileName( filename )
91 vtkreader.Update()
92
93
94
95
96
97
100
101
102
103
105 reader.SetFileName( filename )
106 if not reader.Read():
107 sys.exit(1)
108
109 ds = reader.GetFile().GetDataSet()
110
111 el1 = ds.GetDataElement( tag1 )
112 el2 = ds.GetDataElement( tag2 )
113
114
115
116
117
118
119 print el1.GetByteValue()
120 v1 = eval(el1.GetByteValue().GetBuffer())
121 print el2.GetByteValue()
122 v2 = eval(el2.GetByteValue().GetBuffer())
123
124 print v1
125 shift = v1
126 print v2
127 scale = v2
128
129 ss = vtk.vtkImageShiftScale()
130 ss.SetInput( vtkreader.GetOutput() )
131
132 assert shift == 0
133 ss.SetShift( shift )
134 ss.SetScale( scale )
135 ss.SetOutputScalarTypeToUnsignedShort ()
136 ss.Update()
137
138
139
140 vtkwriter = vtkgdcm.vtkGDCMImageWriter()
141 vtkwriter.SetFileName( tmpfile )
142 vtkwriter.SetMedicalImageProperties( vtkreader.GetMedicalImageProperties() )
143 vtkwriter.SetDirectionCosines( vtkreader.GetDirectionCosines() )
144 vtkwriter.SetImageFormat( reader.GetImageFormat() )
145
146 vtkwriter.SetInput( ss.GetOutput() )
147
148 vtkwriter.Write()
149
150
151
153 tmpreader.SetFileName( tmpfile )
154 if not tmpreader.Read():
155 sys.exit(1)
156
158 writer.SetFileName( outfilename )
159
160 writer.SetImage( tmpreader.GetImage() )
161
162 writer.SetFile( reader.GetFile() )
163 if not writer.Write():
164 sys.exit(1)
165
166if __name__ == "__main__":
167
170
171
172 tmpfile = "/tmp/philips_rescaled.dcm"
173
174 rescaletype = sys.argv[1]
175 assert rescaletype == "--public" or rescaletype == "--private"
176 dirname = sys.argv[2]
178 d.Load( dirname )
179
180 for f in d.GetFilenames():
181
182 ProcessOneFilePublic( f, f + ".bak", tmpfile )
183
184
185print "success"
Class for manipulation directories.
Definition gdcmDirectory.h:43
static void SetForceRescaleInterceptSlope(bool)
ImageReader.
Definition gdcmImageReader.h:34
ImageWriter.
Definition gdcmImageWriter.h:33
Class to represent a Private DICOM Data Element (Attribute) Tag (Group, Element, Owner)
Definition gdcmPrivateTag.h:39
Reader ala DOM (Document Object Model)
Definition gdcmReader.h:54
Class to represent a DICOM Data Element (Attribute) Tag (Group, Element).
Definition gdcmTag.h:39