"""
Usage:
python --public /path/to/directory/
or
python --private /path/to/directory/
python --public --extension bak /path/to/directory/
rename -f 's/\.bak$//' *.bak
TODO:
http://docs.python.org/library/optparse.html#module-optparse
"""
import vtkgdcm
import vtk
import sys
import gdcm
def ProcessOneFilePublic(filename, outfilename, tmpfile):
vtkreader = vtkgdcm.vtkGDCMImageReader()
vtkreader.SetFileName( filename )
vtkreader.Update()
cast = vtk.vtkImageCast()
cast.SetInput( vtkreader.GetOutput() )
cast.SetOutputScalarTypeToUnsignedShort()
vtkwriter = vtkgdcm.vtkGDCMImageWriter()
vtkwriter.SetFileName( tmpfile )
vtkwriter.SetMedicalImageProperties( vtkreader.GetMedicalImageProperties() )
vtkwriter.SetDirectionCosines( vtkreader.GetDirectionCosines() )
print "Format:",vtkreader.GetImageFormat()
vtkwriter.SetImageFormat( vtkreader.GetImageFormat() )
vtkwriter.SetInput( cast.GetOutput() )
vtkwriter.Write()
tmpreader.SetFileName( tmpfile )
if not tmpreader.Read():
sys.exit(1)
reader.SetFileName( filename )
if not reader.Read():
sys.exit(1)
ds = reader.GetFile().GetDataSet()
tags = [
]
for tag in tags:
ds.Remove( tag )
writer.SetFileName( outfilename )
writer.SetImage( tmpreader.GetImage() )
writer.SetFile( reader.GetFile() )
if not writer.Write():
sys.exit(1)
def ProcessOneFilePrivate(filename, outfilename, tmpfile):
vtkreader = vtkgdcm.vtkGDCMImageReader()
vtkreader.SetFileName( filename )
vtkreader.Update()
reader.SetFileName( filename )
if not reader.Read():
sys.exit(1)
ds = reader.GetFile().GetDataSet()
el1 = ds.GetDataElement( tag1 )
el2 = ds.GetDataElement( tag2 )
print el1.GetByteValue()
v1 = eval(el1.GetByteValue().GetBuffer())
print el2.GetByteValue()
v2 = eval(el2.GetByteValue().GetBuffer())
print v1
shift = v1
print v2
scale = v2
ss = vtk.vtkImageShiftScale()
ss.SetInput( vtkreader.GetOutput() )
assert shift == 0
ss.SetShift( shift )
ss.SetScale( scale )
ss.SetOutputScalarTypeToUnsignedShort ()
ss.Update()
vtkwriter = vtkgdcm.vtkGDCMImageWriter()
vtkwriter.SetFileName( tmpfile )
vtkwriter.SetMedicalImageProperties( vtkreader.GetMedicalImageProperties() )
vtkwriter.SetDirectionCosines( vtkreader.GetDirectionCosines() )
vtkwriter.SetImageFormat( reader.GetImageFormat() )
vtkwriter.SetInput( ss.GetOutput() )
vtkwriter.Write()
tmpreader.SetFileName( tmpfile )
if not tmpreader.Read():
sys.exit(1)
writer.SetFileName( outfilename )
writer.SetImage( tmpreader.GetImage() )
writer.SetFile( reader.GetFile() )
if not writer.Write():
sys.exit(1)
if __name__ == "__main__":
tmpfile = "/tmp/philips_rescaled.dcm"
rescaletype = sys.argv[1]
assert rescaletype == "--public" or rescaletype == "--private"
dirname = sys.argv[2]
d.Load( dirname )
for f in d.GetFilenames():
ProcessOneFilePublic( f, f + ".bak", tmpfile )
print "success"