lab9.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. from PIL import Image
  2. import numpy as np
  3. from PIL import ImageChops, ImageOps, ImageShow, ImageFilter
  4. from PIL import ImageStat as stat
  5. import matplotlib.pyplot as plt
  6. from PIL.ImageFilter import (
  7. CONTOUR, DETAIL, SHARPEN)
  8. def statystyki(im):
  9. s = stat.Stat(im)
  10. print("extrema ", s.extrema) # max i min
  11. print("count ", s.count) # zlicza
  12. print("mean ", s.mean) # srednia
  13. print("median ", s.median) # mediana
  14. print("stddev ", s.stddev) # odchylenie standardowe
  15. # Zadanie 1
  16. obraz = Image.open("image.png")
  17. print(obraz.mode)
  18. # obraz.show()
  19. obraz = obraz.convert("L")
  20. print(obraz.mode)
  21. # obraz_L.show()
  22. # Zadanie 2
  23. statystyki(obraz)
  24. hist = obraz.histogram()
  25. plt.title("histogram - zad2")
  26. plt.plot(hist)
  27. plt.savefig('zad2_hist.jpg', bbox_inches='tight', dpi=150)
  28. plt.show()
  29. # # Zadanie 3
  30. def histogram_norm(obraz):
  31. count=stat.Stat(obraz).count[0]
  32. hist = obraz.histogram()
  33. for i in range(len(hist)):
  34. hist[i] /= count
  35. plt.title("histogram - zad3")
  36. plt.plot(hist)
  37. plt.savefig('norm.jpg', bbox_inches='tight', dpi=150)
  38. plt.show()
  39. return hist
  40. histogram_norm(obraz)
  41. # # Zadanie 4
  42. def histogram_cumul(obraz):
  43. hist = histogram_norm(obraz)
  44. prev = 0
  45. for i in range(len(hist)):
  46. hist[i] += prev
  47. prev = hist[i]
  48. plt.title("histogram - zad4")
  49. plt.plot(hist)
  50. plt.savefig('kumul.jpg', bbox_inches='tight', dpi=150)
  51. plt.show()
  52. return hist
  53. # # img = obraz.point(lambda i: (lambda i,val: i/val)(i,stat.Stat(obraz).count[0]))
  54. # count=stat.Stat(obraz).count[0]
  55. # img = obraz.point(lambda i: i/val)
  56. # return hist
  57. histogram_cumul(obraz)
  58. # Zadanie 5
  59. def histogram_equalization(obraz):
  60. hist = histogram_cumul(obraz)
  61. img = obraz.point(lambda i: int(255*hist[i]))
  62. img.save("equalized.jpg")
  63. img.show()
  64. return img
  65. obraz_equalized = histogram_equalization(obraz)
  66. # Zadanie 6
  67. obraz_equalized1 = ImageOps.equalize(obraz, mask=None)
  68. obraz_equalized1.save("equalized1.jpg")
  69. # obraz_equalized.show()
  70. # 6.1
  71. diff = ImageChops.difference(obraz_equalized, obraz_equalized1)
  72. diff.save("diff.jpg")
  73. # diff.show()
  74. # 6.2
  75. plt.title("histogram - zad6.2")
  76. plt.bar(range(256), obraz_equalized.histogram(), color='r', alpha=0.5)
  77. plt.bar(range(256), obraz_equalized1.histogram(), color='b', alpha=0.5)
  78. plt.savefig('zad6_2.jpg', bbox_inches='tight', dpi=150)
  79. plt.show() # obrazy są praktycznie takie same
  80. # Zadanie 7.3
  81. statystyki(obraz_equalized)
  82. # extrema [(2, 255)]
  83. # count [41040]
  84. # mean [127.80631091617934]
  85. # median [127]
  86. # stddev [73.48236374675058]
  87. statystyki(obraz_equalized1)
  88. # extrema [(0, 255)] # niewielka róznica
  89. # count [41040] # to samo
  90. # mean [127.35402046783626] # niewielka róznica
  91. # median [127] # to samo
  92. # stddev [74.15058591629993] # niewielka róznica
  93. # Zadanie 8
  94. obraz1 = obraz.filter(ImageFilter.DETAIL)
  95. obraz2 = obraz.filter(ImageFilter.SHARPEN)
  96. obraz3 = obraz.filter(ImageFilter.CONTOUR)
  97. plt.figure(figsize=(16, 16))
  98. plt.subplot(2,2,1) # ile obrazów w pionie, ile w poziomie, numer obrazu
  99. plt.imshow(obraz1, 'gray')
  100. plt.axis('off')
  101. plt.subplot(2,2,2)
  102. plt.imshow(obraz2, 'gray')
  103. plt.axis('off')
  104. plt.subplot(2,2,3)
  105. plt.imshow(obraz3, 'gray')
  106. plt.axis('off')
  107. plt.subplot(2,2,4)
  108. plt.imshow(obraz_equalized1, 'gray')
  109. plt.axis('off')
  110. plt.subplots_adjust(wspace=0.05, hspace=0.05)
  111. plt.savefig('filtry.jpg', bbox_inches='tight', dpi=150)