denoise0701.m
上传用户:lcj80317
上传日期:2007-01-26
资源大小:625k
文件大小:5k
源码类别:

波变换

开发平台:

Matlab

  1. % 对彩色图像进行去噪
  2. I = imread('lena_color.png', 'png');        % 读入图像
  3. X = im2double(I);                           % 转换成双精度类型
  4. x_noise = noise(X, 'gaussian', 0.01);       % 加入高斯噪声
  5. % 提取三个通道信息
  6. xr = x_noise(:, :, 1);                      % R通道
  7. xg = x_noise(:, :, 2);                      % G通道
  8. xb = x_noise(:, :, 3);                      % B通道
  9. % 估计三个通道的阈值
  10. [Cr, Sr] = wavedec2(xr, 2, 'sym4');
  11. [Cg, Sg] = wavedec2(xg, 2, 'sym4');
  12. [Cb, Sb] = wavedec2(xb, 2, 'sym4');
  13. thr_r = Donoho(xr);                        % R通道全局阈值
  14. thr_g = Donoho(xg);                        % G通道全局阈值
  15. thr_b = Donoho(xb);                        % B通道全局阈值
  16. thr_lvd_r = Birge_Massart(Cr, Sr);         % R通道局部阈值
  17. thr_lvd_g = Birge_Massart(Cg, Sg);         % G通道局部阈值
  18. thr_lvd_b = Birge_Massart(Cb, Sb);         % B通道局部阈值
  19. % 对三个通道分别进行去噪===================================================
  20. %   Donoho全局阈值 软阈值公式----------------------------------------------
  21. x_soft_r = wdenoise(xr, 'gbl', 's', thr_r, 'sym4', 2);
  22. x_soft_g = wdenoise(xg, 'gbl', 's', thr_g, 'sym4', 2);
  23. x_soft_b = wdenoise(xb, 'gbl', 's', thr_b, 'sym4', 2);
  24. %   -----------------------------------------------------------------------
  25. %   Donoho全局阈值 硬阈值公式----------------------------------------------
  26. x_hard_r = wdenoise(xr, 'gbl', 'h', thr_r, 'sym4', 2);
  27. x_hard_g = wdenoise(xg, 'gbl', 'h', thr_g, 'sym4', 2);
  28. x_hard_b = wdenoise(xb, 'gbl', 'h', thr_b, 'sym4', 2);
  29. %   -----------------------------------------------------------------------
  30. %   Bige-Massa策略 软阈值公式----------------------------------------------
  31. x_soft_lvd_r = wdenoise(xr, 'lvd', 's', thr_lvd_r, 'sym4', 2);
  32. x_soft_lvd_g = wdenoise(xg, 'lvd', 's', thr_lvd_g, 'sym4', 2);
  33. x_soft_lvd_b = wdenoise(xb, 'lvd', 's', thr_lvd_b, 'sym4', 2);
  34. %   -----------------------------------------------------------------------
  35. %   Bige-Massa策略 硬阈值公式----------------------------------------------
  36. x_hard_lvd_r = wdenoise(xr, 'lvd', 'h', thr_lvd_r, 'sym4', 2);
  37. x_hard_lvd_g = wdenoise(xg, 'lvd', 'h', thr_lvd_g, 'sym4', 2);
  38. x_hard_lvd_b = wdenoise(xb, 'lvd', 'h', thr_lvd_b, 'sym4', 2);
  39. %   -----------------------------------------------------------------------
  40. %   半软阈值---------------------------------------------------------------
  41. x1_r = den1(xr, 'sym4', 2, thr_r);
  42. x1_g = den1(xg, 'sym4', 2, thr_g);
  43. x1_b = den1(xb, 'sym4', 2, thr_b);
  44. %   -----------------------------------------------------------------------
  45. %   半软阈值 + 均值滤波----------------------------------------------------
  46. x1_5_r = den1_5_1(xr, 'sym4', 2, thr_r, 0.5*thr_r);
  47. x1_5_g = den1_5_1(xg, 'sym4', 2, thr_g, 0.5*thr_g);
  48. x1_5_b = den1_5_1(xb, 'sym4', 2, thr_b, 0.5*thr_b);
  49. %   -----------------------------------------------------------------------
  50. %   自适应阈值-------------------------------------------------------------
  51. x4_r = den4(xr, 'sym4', 2);
  52. x4_g = den4(xg, 'sym4', 2);
  53. x4_b = den4(xb, 'sym4', 2);
  54. %   -----------------------------------------------------------------------
  55. % =========================================================================
  56. % 恢复去噪后的图像=========================================================
  57. x_soft = cat(3, x_soft_r, x_soft_g, x_soft_b);                          % Donoho 软阈值
  58. x_hard = cat(3, x_hard_r, x_hard_g, x_hard_b);                          % Donoho 硬阈值
  59. x_soft_lvd = cat(3, x_soft_lvd_r, x_soft_lvd_g, x_soft_lvd_b);          %Birge-Massart 软阈值
  60. x_hard_lvd = cat(3, x_hard_lvd_r, x_hard_lvd_g, x_hard_lvd_b);          % Birge-Massart 硬阈值
  61. x1 = cat(3, x1_r, x1_g, x1_b);                                          % 半软阈值
  62. x1_5 = cat(3, x1_5_r, x1_5_g, x1_5_b);                                  % 半软阈值 + 均值滤波
  63. x4 = cat(3, x4_r, x4_g, x4_b);                                          % 自适应阈值
  64. % =========================================================================
  65. psnr_soft = PSNR_color(x_soft, X)
  66. psnr_hard = PSNR_color(x_hard, X)
  67. psnr_soft_lvd = PSNR_color(x_soft_lvd, X)
  68. psnr_hard_lvd = PSNR_color(x_hard_lvd, X)
  69. psnr1 = PSNR_color(x1, X)
  70. psnr1_5 = PSNR_color(x1_5, X)
  71. psnr4 = PSNR_color(x4, X)
  72. figure; imshow(X);          title('原图像');
  73. figure; imshow(x_noise);    title('带噪声图像');
  74. figure; imshow(x_soft);     title('Donoho 软阈值');
  75. figure; imshow(x_hard);     title('Donoho 硬阈值');
  76. figure; imshow(x_soft_lvd); title('Birge-Massart 软阈值');
  77. figure; imshow(x_hard_lvd); title('Birge-Massart 硬阈值');
  78. figure; imshow(x1);         title('半软阈值')';
  79. figure; imshow(x1_5);       title('半软阈值 均值滤波');
  80. figure; imshow(x4);         title('自适应阈值');
  81. % 中值滤波 均值滤波========================================================
  82. f = ones(3);
  83. % filter2函数用于图像均值滤波
  84. x_mean_r = meanfilter(xr,f);
  85. x_mean_g = meanfilter(xg,f);
  86. x_mean_b = meanfilter(xb,f);
  87. x_mean = cat(3, x_mean_r, x_mean_g, x_mean_b);
  88. % medfilt2函数用于图像中值滤波
  89. x_med_r = medfilter(xr, f);
  90. x_med_g = medfilter(xg, f);
  91. x_med_b = medfilter(xb, f);
  92. x_med = cat(3, x_med_r, x_med_g, x_med_b);
  93. psnr_mean = PSNR_color(x_mean, X)
  94. psnr_med = PSNR_color(x_med, X)
  95. figure; imshow(x_mean); title('均值滤波');
  96. figure; imshow(x_med);  title('中值滤波');
  97. % =========================================================================