Advertisement
StevanovicMilan

9.4

Sep 18th, 2021
733
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.47 KB | None | 0 0
  1. '''
  2. Nad slikom snimak.png simulirati efekat degradacije atmosferske turbulencije definisane modelom:
  3.  
  4. gde su  (u,v)  prostorne koordinate DFT slike sa centrom u sredini slike a  k  parametar degradacije. Koristiti vrednosti  k=0.0025 .
  5.  
  6. Nad degradiranom slikom dodati AWGN varijanse 1 i pokušati ukloniti degradaciju inverznim filtriranjem a potom koristeći Wiener-ov filtar. Prikazati kako izgledaju karakteristike degradacije i Wiener-ovog filtra.
  7. -------------------------------------------------------
  8. Napomena: U okviru računanja fft2 koristiti simetrično proširenje slike.
  9. '''
  10. import plotly.express as px
  11. from skimage import io
  12. import numpy as np
  13.  
  14. img = io.imread('snimak.png')
  15. fig = px.imshow(img, zmin=0, zmax=255, color_continuous_scale='gray')
  16. fig.show()
  17.  
  18. pad = 128
  19. img_p = np.pad(img, pad_width = pad, mode='reflect')
  20.  
  21. IMG = np.fft.fftshift(np.fft.fft2(img_p))
  22. fig = px.imshow(np.log(np.abs(IMG)+1), color_continuous_scale='gray')
  23. fig.show()
  24.  
  25. k = 0.0025
  26.  
  27. u = np.arange(IMG.shape[0]).reshape(-1, 1) - np.floor(IMG.shape[0]/2)
  28. v = np.arange(IMG.shape[1]) - np.floor(IMG.shape[1]/2)
  29.  
  30. H = np.exp(-k*(u**2+v**2)**(5/6))
  31.  
  32. fig = px.imshow(np.log(np.abs(H)+1), color_continuous_scale='gray')
  33. fig.show()
  34.  
  35. IMG1 = IMG * H
  36. fig = px.imshow(np.log(np.abs(IMG1)+1), color_continuous_scale='gray')
  37. fig.show()
  38.  
  39. img1 = np.real(np.fft.ifft2(np.fft.ifftshift(IMG1)))
  40. img1 = img1[pad:-pad,pad:-pad]
  41.  
  42. fig = px.imshow(img1,zmin=0, zmax=255, color_continuous_scale='gray')
  43. fig.show()
  44.  
  45. rng = np.random.default_rng()
  46. noise = rng.standard_normal(size=img1.shape)*np.sqrt(1) + 0
  47.  
  48. img_noisy = img1 + noise
  49.  
  50. fig = px.imshow(img_noisy, zmin=0, zmax=255, color_continuous_scale='gray')
  51. fig.show()
  52.  
  53. img_noisy_p = np.pad(img_noisy, pad_width = pad, mode='reflect')
  54.  
  55. IMG_NOISY = np.fft.fftshift(np.fft.fft2(img_noisy_p))
  56.  
  57. fig = px.imshow(np.log(np.abs(IMG_NOISY)+1), color_continuous_scale='gray')
  58. fig.show()
  59.  
  60. #INVERZNO FILTRIRANJE
  61.  
  62. IMG_INVF = IMG_NOISY/H
  63.  
  64. img_invf = np.real(np.fft.ifft2(np.fft.ifftshift(IMG_INVF)))
  65. img_invf = img_invf[pad:-pad,pad:-pad]
  66.  
  67. fig = px.imshow(img_invf, color_continuous_scale='gray')
  68. fig.show()
  69.  
  70. K = 1/img.var()
  71.  
  72. W = np.conj(H)/(np.abs(H)**2+K)
  73.  
  74. fig = px.imshow(np.log(np.abs(W)+1), color_continuous_scale='gray')
  75. fig.show()
  76.  
  77. IMG_INVW = IMG_NOISY * W
  78.  
  79. img_invw = np.real(np.fft.ifft2(np.fft.ifftshift(IMG_INVW)))
  80. img_invw = img_invw[pad:-pad,pad:-pad]
  81.  
  82. fig = px.imshow(img_invw, zmin=0, zmax=255, color_continuous_scale='gray')
  83. fig.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement