当前位置:   article > 正文

基于matlab的多种图像去噪代码实现_图像去噪matlab代码

图像去噪matlab代码

概要

本人第一次写博客,有生疏或者错误欢迎批评交流,提前谢谢包容~。(matlab版本2021a)

本文主要用大作业要求的均值滤波、中值滤波、高斯低通滤波器、巴特沃斯低通滤波器、小波变换等方法进行图像的去噪处理

Matlab架构流程

图1 压缩包内容

 重点结构为main.m和tiSgrcfilter.m,函数有点多,建议先看这两个m文件

  1. %main.m
  2. clear;
  3. clc;
  4. close all;
  5. %% 输入图像
  6. barbara= imread('原始图像/barbara.png');lena= imread('原始图像/lena.png');peppers256= imread('原始图像/peppers256.png');
  7. lena_salt = imread('椒盐噪声/lena_salt-pepper.png');peppers256_salt = imread('椒盐噪声/peppers256_salt-pepper.png');barbara_salt = imread('椒盐噪声/barbara_salt-pepper.png');
  8. lena_gaussian=imread('高斯噪声/lena_gaussian.png');peppers256_gaussian=imread('高斯噪声/peppers256_gaussian.png');barbara_gaussian=imread('高斯噪声/barbara_gaussian.png');
  9. peppers256_speckle=imread('乘性噪声/peppers256_speckle.png');lena_speckle=imread('乘性噪声/lena_speckle.png');barbara_speckle=imread('乘性噪声/barbara_speckle.png');
  10. %% 加入噪声及滤波器
  11. %lena salt
  12. [g]=tiSgrcfilter(lena,lena_salt);
  13. [M,N,a]=size(g);
  14. for i=1:a
  15. m=g(:,:,i);
  16. [PSNR(1,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i));
  17. end
  18. %lena gaussian
  19. [g]=tiSgrcfilter(lena,lena_gaussian);
  20. [M,N,a]=size(g);
  21. for i=1:a
  22. m=g(:,:,i);
  23. [PSNR(2,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i));
  24. end
  25. %lena speckle
  26. [g]=tiSgrcfilter(lena,lena_speckle);
  27. [M,N,a]=size(g);
  28. for i=1:a
  29. m=g(:,:,i);
  30. [PSNR(3,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i));
  31. end
  32. %barbara_salt
  33. [g]=tiSgrcfilter(barbara,barbara_salt);
  34. [M,N,a]=size(g);
  35. for i=1:a
  36. m=g(:,:,i);
  37. [PSNR(4,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i));
  38. end
  39. %barbara_gaussian
  40. [g]=tiSgrcfilter(barbara,barbara_gaussian);
  41. [M,N,a]=size(g);
  42. for i=1:a
  43. m=g(:,:,i);
  44. [PSNR(5,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i));
  45. end
  46. %barbara_speckle
  47. [g]=tiSgrcfilter(barbara,barbara_speckle);
  48. [M,N,a]=size(g);
  49. for i=1:a
  50. m=g(:,:,i);
  51. [PSNR(6,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i));
  52. end
  53. %peppers256_salt
  54. [g]=tiSgrcfilter(peppers256,peppers256_salt);
  55. [M,N,a]=size(g);
  56. for i=1:a
  57. m=g(:,:,i);
  58. [PSNR(7,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i));
  59. end
  60. %peppers256_gaussian
  61. [g]=tiSgrcfilter(peppers256,peppers256_gaussian);
  62. [M,N,a]=size(g);
  63. for i=1:a
  64. m=g(:,:,i);
  65. [PSNR(8,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i));
  66. end
  67. %peppers256_speckle
  68. [g]=tiSgrcfilter(peppers256,peppers256_speckle);
  69. [M,N,a]=size(g);
  70. for i=1:a
  71. m=g(:,:,i);
  72. [PSNR(9,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i));
  73. end
  74. %% 数据处理
  75. figure;
  76. x=1:1:6;
  77. [M1,N1]=size(PSNR);
  78. ylim([0 40]) %y轴显示的范围,根据需要调整
  79. ylabel('PSNR数值','FontName', '宋体','FontSize',18)
  80. bar1=PSNR';
  81. GO = bar(bar1,1,'EdgeColor','black');
  82. % 图例
  83. legend({'lena salt','lena gaussian','lena speckle','barbara salt','barbara gaussian','barbara speckle','peppers256 salt','peppers256 gaussian','peppers256 speckle'},'fontsize',18);
  84. set(gca,'Xticklabel', ["均值滤波","中值滤波","高斯低通滤波","Butterworth低通滤波器","小波变换","PCA"]) ;%gca 坐标的句柄
  85. xlabel('滤波器','fontsize',18,'FontName','宋体','Fontweight','bold');
  86. title("各滤波器针对不同噪声不同图像效果对比",'Fontsize',20);

技术名词解释

图1中除了两个重要的文件外,还用到了psnr评估标准,如下

图2 PSNR评估公式 

如果只是想知道效果,那么PSNR具体是什么不用太留意,知道PSNR越高说明去噪效果越好即可。

  1. %tiSgrc_psnr.m
  2. function [PSNR,o]=tiSgrc_psnr(H,height,width,g)%H原始图像,height图像矩阵行,width图像矩阵列,g去噪后图像的图像\
  3. o=0;
  4. p=0;
  5. for i=1:height
  6. for j=1:width
  7. o=o+(double(H(i,j))-double(g(i,j)))^2;
  8. end
  9. end
  10. p=255^2/(o/(height*width));
  11. p=double(p);
  12. p1=log(p);
  13. p1=p1/log(10);
  14. PSNR=p1*10;

小结

本次上传的代码比较简单,可以做一个初学者的了解进行,但是深入研究还是需要具体的理论分析。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/705523
推荐阅读
相关标签
  

闽ICP备14008679号