parseNPZ.py 995 B

123456789101112131415161718192021222324252627282930
  1. import SimpleITK
  2. import numpy
  3. def convertToITK(dt,label):
  4. #convert to SimpleITKimage to display it
  5. imgArray=dt[label]
  6. org=dt['{}origin'.format(label)]
  7. orient=dt['{}orientation'.format(label)]
  8. spacing=[numpy.linalg.norm(x) for x in orient]
  9. print(spacing)
  10. orient=[orient[i]/spacing[i] for i in range(3)]
  11. direction=numpy.reshape(orient,9)
  12. print(direction)
  13. img = SimpleITK.GetImageFromArray(imgArray)
  14. img.SetOrigin(org)
  15. img.SetDirection(direction)
  16. img.SetSpacing(spacing)
  17. return img
  18. def generateNiftyFromNPZ(infile):
  19. #generate nifty files for PET and CT stored in NPZ
  20. outdir=os.path.dirname(infile)
  21. baseName=os.path.basename(infile).replace('.npz','')
  22. dt=numpy.load(infile)
  23. ct=parseNPZ.convertToITK(dt,'CT')
  24. pet=parseNPZ.convertToITK(dt,'PET')
  25. SimpleITK.WriteImage(ct,os.path.join(outdir,f'{baseName}_CT.nii.gz'))
  26. SimpleITK.WriteImage(pet,os.path.join(outdir,f'{baseName}_PET.nii.gz'))
  27. del pet
  28. del ct