segmentation.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import numpy
  2. import config
  3. import SimpleITK
  4. import os
  5. import getData
  6. def guessPixelPosition(sx=-1,sy=-1,sz=-1):
  7. #guess position of segments
  8. if sx<0:
  9. sx=12
  10. if sy<0:
  11. sy=28
  12. if sz<0:
  13. sz=32
  14. rz=4
  15. oz=0
  16. slc=[sx,sy,sz]
  17. p1=[sx,sy,sz]
  18. #tip
  19. fp={'0':[\
  20. [sx,sy,sz],
  21. [sx-5,sy,sz],\
  22. [sx-2,sy,sz-rz],\
  23. [sx+3,sy,sz-rz],\
  24. [sx-2,sy,sz+rz-1],\
  25. [sx+3,sy,sz+rz]],\
  26. '1':[\
  27. [sx,sy,sz],
  28. [sx-5,sy,sz],\
  29. [sx-1,sy-rz,sz],\
  30. [sx-1,sy+rz-1,sz],\
  31. [sx+3,sy-rz,sz],\
  32. [sx+3,sy+rz,sz]],\
  33. '2':[\
  34. [sx,sy,sz],
  35. [sx,sy+rz+oz,sz],\
  36. [sx,sy+0.3*rz+oz,sz-rz],\
  37. [sx,sy-0.3*rz+oz,sz-rz],\
  38. [sx,sy-rz+oz,sz],\
  39. [sx,sy-0.3*rz+oz,sz+rz],\
  40. [sx,sy+0.3*rz+oz,sz+rz]]}
  41. return fp
  42. def getPatientNIM(r,setup):
  43. locDir=config.getLocalDir(r,setup)
  44. fileName=config.getNodeName(r,setup,'NM',19)+'.nrrd'
  45. f=os.path.join(locDir,fileName)
  46. im=SimpleITK.ReadImage(f)
  47. nim=SimpleITK.GetArrayFromImage(im)
  48. return nim
  49. def writeSegmentation(db,r,setup):
  50. locDir=config.getLocalDir(r,setup)
  51. fileName='{}_Segmentation.txt'.format(config.getCode(r,setup))
  52. idFilter={'variable':'PatientId','value':config.getPatientId(r,setup),'oper':'eq'}
  53. visitFilter={'variable':'visitName','value':config.getVisitId(r,setup),'oper':'eq'}
  54. rows=getData.getSegmentation(db,setup,[idFilter,visitFilter])
  55. v=numpy.zeros((len(rows),3))
  56. for qr in rows:
  57. region=int(qr['regionId'])
  58. v[region,2]=float(qr['x'])
  59. v[region,1]=float(qr['y'])
  60. v[region,0]=float(qr['z'])
  61. #for i in range(len(rows)):
  62. # print(v[i,:])
  63. numpy.savetxt(os.path.join(locDir,fileName),v)