"""
GDCM 1.x would write out MR Image Storage as Secondary Capture Object while still setting Rescale Slope/Intercept
and saving the Pixel Spacing in (0028,0030)
"""
import gdcm
import sys,os
def CheckSecondaryCaptureObjectIsMRImageStorage(r):
ds = r.GetFile().GetDataSet()
if ds.FindDataElement(
gdcm.Tag(0x0008,0x2112) ):
sis = ds.GetDataElement(
gdcm.Tag(0x0008,0x2112) )
sqsis = sis.GetSequenceOfItems()
if sqsis.GetNumberOfItems():
item1 = sqsis.GetItem(1)
nestedds = item1.GetNestedDataSet()
if nestedds.FindDataElement(
gdcm.Tag(0x0008,0x1150) ):
ReferencedSOPClassUID = nestedds.GetDataElement(
gdcm.Tag(0x0008,0x1150) )
raw = ReferencedSOPClassUID.GetByteValue().GetPointer()
ms.SetFromDataSet(ds)
msuid = ms.GetString()
uids.SetFromUID( msuid )
msuidname = uids.GetName()
uids.SetFromUID( raw )
sqmsuidname = uids.GetName()
if( sqmsuidname == 'MR Image Storage' and msuidname == 'Secondary Capture Image Storage' ):
return True
return False
if __name__ == "__main__":
filename = sys.argv[1]
r.SetFileName( filename )
if not r.Read():
sys.exit(1)
f = r.GetFile()
if( CheckSecondaryCaptureObjectIsMRImageStorage(r) ):
image.SetSpacing(0, mrspacing[0] )
image.SetSpacing(1, mrspacing[1] )
image.SetSpacing(2, mrspacing[2] )
image.SetIntercept( ris[0] )
image.SetSlope( ris[1] )
outfilename = sys.argv[2]
w.SetFileName( outfilename )
w.SetFile( r.GetFile() )
w.SetImage( image )
if not w.Write():
sys.exit(1)
sys.exit(0)