Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.72 KB | None | 0 0
  1. clear all;
  2. close all;
  3.  
  4. calculate_psnr=@(f,g) 10*log10(1/mean2((f-g).^2));
  5.  
  6. original = im2double(imread('cameraman.tif'));
  7. degraded = im2double(imread('degraded.tif'));
  8. degraded_freq = fftshift(fft2(degraded));
  9.  
  10. figure;
  11.  
  12. subplot(1,4,1);
  13. imshow(original);
  14. title('original');
  15.  
  16. subplot(1,4,2);
  17. imshow(degraded);
  18. title('degraded');
  19.  
  20. % Estimate the noise variance as the variance of a flat region
  21. %degraded_flat = imcrop(degraded, getrect());
  22. %noise_variance = var(degraded_flat(:))
  23. noise_variance = 0.0101
  24.  
  25. % Lee filter
  26. local_mean = colfilt(degraded,[5,5],'sliding',@mean);
  27. local_var = colfilt(degraded,[5,5],'sliding',@var);
  28. K = (local_var-noise_variance)./local_var;
  29.  
  30. lee_filtered = K.*degraded + (1-K).*local_mean;
  31. lee_filtered_psnr = calculate_psnr(original,lee_filtered)
  32.  
  33. subplot(1,4,3);
  34. imshow(lee_filtered);
  35. title('Lee filtered, var=0.0101');
  36.  
  37. % Gaussian low pass filter stddev=30
  38. [h, w] = size(degraded);
  39. lp_gauss = fspecial('gaussian', [h, w], 30);
  40. lp_gauss = lp_gauss./max(lp_gauss(:));
  41.  
  42. lp_gauss_filtered = ifft2(ifftshift(degraded_freq.*lp_gauss));
  43. lp_gauss_filtered_psnr = calculate_psnr(original,lp_gauss_filtered)
  44.  
  45. subplot(1,4,4);
  46. imshow(abs(lp_gauss_filtered));
  47. title('Low pass (stddev=30) filtered');
  48.  
  49. % Lee filter, lower variance
  50. K = (local_var-0.001)./local_var;
  51. lee_filtered_lowvar = K.*degraded + (1-K).*local_mean;
  52. lee_filtered_lowvar_psnr = calculate_psnr(original,lee_filtered_lowvar)
  53.  
  54. % Lee filter, higher variance
  55. K = (local_var-0.02)./local_var;
  56. lee_filtered_highvar = K.*degraded + (1-K).*local_mean;
  57. lee_filtered_highvar_psnr = calculate_psnr(original,lee_filtered_highvar)
  58.  
  59. figure;
  60.  
  61. subplot(1,4,1);
  62. imshow(degraded);
  63. title('degraded');
  64.  
  65. subplot(1,4,2);
  66. imshow(lee_filtered);
  67. title('Lee filtered, var=0.0101');
  68.  
  69. subplot(1,4,3);
  70. imshow(lee_filtered_lowvar);
  71. title('Lee filtered, var=0.001');
  72.  
  73. subplot(1,4,4);
  74. imshow(lee_filtered_highvar);
  75. title('Lee filtered, var=0.02');
  76.  
  77. % Vary matrix size
  78.  
  79. K = (local_var-noise_variance)./local_var;
  80.  
  81. local_mean = colfilt(degraded,[3,3],'sliding',@mean);
  82. local_var = colfilt(degraded,[3,3],'sliding',@var);
  83.  
  84. lee_filtered_3x3 = K.*degraded + (1-K).*local_mean;
  85. lee_filtered_3x3_psnr = calculate_psnr(original,lee_filtered_3x3)
  86.  
  87. local_mean = colfilt(degraded,[7,7],'sliding',@mean);
  88. local_var = colfilt(degraded,[7,7],'sliding',@var);
  89.  
  90. lee_filtered_7x7 = K.*degraded + (1-K).*local_mean;
  91. lee_filtered_7x7_psnr = calculate_psnr(original,lee_filtered_7x7)
  92.  
  93. figure;
  94.  
  95. subplot(1,4,1);
  96. imshow(degraded);
  97. title('degraded');
  98.  
  99. subplot(1,4,2);
  100. imshow(lee_filtered);
  101. title('Lee filtered, 5x5');
  102.  
  103. subplot(1,4,3);
  104. imshow(lee_filtered_3x3);
  105. title('Lee filtered, 3x3');
  106.  
  107. subplot(1,4,4);
  108. imshow(lee_filtered_7x7);
  109. title('Lee filtered, 7x7');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement