StevanovicMilan

10.7

Sep 18th, 2021
917
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '''
  2. Na svaku od komponenti boja slike peppers_color.bmp u RGB sistemu dodati AWGN varijanse 400.
  3. Šum ukloniti aritmetičkim usrednjivačem veličine 3 x 3 sa svake od RGB komponenti.
  4. Isti filtar upotrebiti pojedinačno na svaku od HSV komponenti i prikazati rezultat.
  5. '''
  6.  
  7. import plotly.express as px
  8. from skimage import io
  9.  
  10. img = io.imread('peppers_color.png')
  11. fig = px.imshow(img)
  12. fig.show()
  13.  
  14. import numpy as np
  15.  
  16. rng = np.random.default_rng()
  17. img_noisy = img + rng.standard_normal(size=img.shape)*np.sqrt(400) + 0
  18. img_noisy[img_noisy > 255] = 255
  19. img_noisy[img_noisy < 0] = 0
  20.  
  21. fig = px.imshow(img_noisy)
  22. fig.show()
  23.  
  24. from scipy import ndimage
  25.  
  26. # 3x3 aritmeticki usrednjivac
  27. kernel = np.ones((3,3))/9
  28.  
  29. img_f = img_noisy.copy()
  30. img_f[:,:,0] = ndimage.convolve(img_f[:,:,0], kernel, mode = 'reflect')
  31. img_f[:,:,1] = ndimage.convolve(img_f[:,:,1], kernel, mode = 'reflect')
  32. img_f[:,:,2] = ndimage.convolve(img_f[:,:,2], kernel, mode = 'reflect')
  33.  
  34. fig = px.imshow(img_f)
  35. fig.show()
  36.  
  37. psnr = 10*np.log10(255**2/((img - img_noisy)**2).mean())
  38. print("PSNR pre filtriranja je {}".format(psnr))
  39.  
  40. psnr = 10*np.log10(255**2/((img - img_f)**2).mean())
  41. print("PSNR za box filtar dimenzije {} je {}".format(kernel.shape, psnr))
  42.  
  43. '''
  44. Isti filtar upotrebiti pojedinačno na svaku od HSV komponenti i prikazati rezultat.
  45. '''
  46.  
  47. from skimage import color
  48. img_hsv = color.rgb2hsv(img_noisy)
  49.  
  50. '''
  51. Filtriranje H komponente u HSV sistemu dovodi do promene boja na slici što je nepoželjan efekat.
  52. '''
  53.  
  54. img_f1 = img_hsv.copy()
  55. img_f1[:,:,0] = ndimage.convolve(img_f1[:,:,0], kernel, mode = 'reflect')
  56. img_f1 = color.hsv2rgb(img_f1)
  57.  
  58. fig = px.imshow(img_f1)
  59. fig.show()
  60.  
  61. '''
  62. Filtriranje S komponente dovodi samo do promene zasićenja bez uticaja na šum.
  63. '''
  64.  
  65. img_f2 = img_hsv.copy()
  66. img_f2[:,:,1] = ndimage.convolve(img_f2[:,:,1], kernel, mode = 'reflect')
  67. img_f2 = color.hsv2rgb(img_f2)
  68.  
  69. fig = px.imshow(img_f2)
  70. fig.show()
  71.  
  72. '''
  73. Filtriranje V komponente dovodi do promene osvetljaja na slici, takođe bez značajnog uklanjanja šuma.
  74. '''
  75.  
  76. img_f3 = img_hsv.copy()
  77. img_f3[:,:,2] = ndimage.convolve(img_f3[:,:,2], kernel, mode = 'reflect')
  78. img_f3 = color.hsv2rgb(img_f3)
  79.  
  80. fig = px.imshow(img_f3)
  81. fig.show()
RAW Paste Data