createGraphics.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import pydicom
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. import os
  5. import csv
  6. import math
  7. import wavelet
  8. pos = 0
  9. first = True
  10. firstImage = True
  11. def imagePreview(fileName):
  12. img = pydicom.dcmread(fileName).pixel_array
  13. plt.imshow(img)
  14. plt.savefig("graphics/plain.png")
  15. w = wavelet.wavelet(img)
  16. plt.imshow(w)
  17. plt.savefig("graphics/wavelet.png")
  18. w = wavelet.refine(img)
  19. plt.imshow(w)
  20. plt.savefig("graphics/wavelet_full.png")
  21. labels = []
  22. prediction = []
  23. titles = []
  24. film = {}
  25. with open("prediction.csv") as f:
  26. for row in csv.reader(f, delimiter=","):
  27. if first:
  28. first = False
  29. titles = row[8:12]
  30. continue
  31. if len(row) < 9:
  32. continue
  33. #if firstImage:
  34. # firstImage = False
  35. # fileName = row[0]
  36. # imagePreview(fileName)
  37. y = [float(row[8]), float(row[9]), float(row[10]), float(row[11])]
  38. z = [float(row[12]), float(row[13]), float(row[14]), float(row[15])]
  39. labels.append(y)
  40. prediction.append(z)
  41. k = f"{row[1]}_{row[2]}"
  42. if k in film:
  43. x = film[k]
  44. film[k] = (x[0] + 1, x[1], x[2] + [z])
  45. else:
  46. film[k] = (1, y, [z])
  47. pos += 1
  48. plt.show()
  49. filmx = []
  50. for k in film.keys():
  51. x = film[k]
  52. s = len(x[2])
  53. w = [0 for _ in range(s)]
  54. a = 0
  55. b = s - 1
  56. f = 1.0
  57. while a <= b:
  58. w[a] = f
  59. w[b] = f
  60. #f = f * 1.5
  61. a = a + 1
  62. b = b - 1
  63. s = sum(w)
  64. w = [a / s for a in w]
  65. z = [sum([f * a[n] for f, a in zip(w, x[2])]) for n in range(4)]
  66. #filmx.append( (x[0], x[1], [a / x[0] for a in x[2]]) )
  67. filmx.append( (x[0], x[1], z) )
  68. #filmx.append( x )
  69. #filmx = [(1, y, z) for y, z in zip(labels, prediction)]
  70. for n in range(4):
  71. keys = set([x[1][n] for x in filmx])
  72. boxes = [[] for _ in range(5)]
  73. for x in filmx:
  74. k = int(x[1][n]) - 1
  75. boxes[k].append(x[2][n])
  76. #plt.scatter([x[1][n] for x in filmx], [x[2][n] for x in filmx], c=[int(x[2][n] + 0.5) for x in filmx], label=titles[n])
  77. for y in [1.5,2.5,3.5,4.5]:
  78. plt.plot([0,5], [y, y], color="#cccccc")
  79. plt.boxplot(boxes)
  80. plt.savefig(f"graphics/prediction_{titles[n]}.pdf")
  81. plt.close()
  82. diffs = [abs(z[1][n] - z[2][n]) < 0.5 for z in filmx]
  83. good = 0
  84. bad = 0
  85. for x in diffs:
  86. if x:
  87. good += 1
  88. else:
  89. bad += 1
  90. print(f"{titles[n]}: {good} <-> {bad}")