基于matlab的多种图像去噪代码实现 |
您所在的位置:网站首页 › salt头像 › 基于matlab的多种图像去噪代码实现 |
文章目录
概要整体架构流程技术名词解释小结
概要
本人第一次写博客,有生疏或者错误欢迎批评交流,提前谢谢包容~。(matlab版本2021a) 本文主要用大作业要求的均值滤波、中值滤波、高斯低通滤波器、巴特沃斯低通滤波器、小波变换等方法进行图像的去噪处理 Matlab架构流程 图1 压缩包内容重点结构为main.m和tiSgrcfilter.m,函数有点多,建议先看这两个m文件 %main.m clear; clc; close all; %% 输入图像 barbara= imread('原始图像/barbara.png');lena= imread('原始图像/lena.png');peppers256= imread('原始图像/peppers256.png'); lena_salt = imread('椒盐噪声/lena_salt-pepper.png');peppers256_salt = imread('椒盐噪声/peppers256_salt-pepper.png');barbara_salt = imread('椒盐噪声/barbara_salt-pepper.png'); lena_gaussian=imread('高斯噪声/lena_gaussian.png');peppers256_gaussian=imread('高斯噪声/peppers256_gaussian.png');barbara_gaussian=imread('高斯噪声/barbara_gaussian.png'); peppers256_speckle=imread('乘性噪声/peppers256_speckle.png');lena_speckle=imread('乘性噪声/lena_speckle.png');barbara_speckle=imread('乘性噪声/barbara_speckle.png'); %% 加入噪声及滤波器 %lena salt [g]=tiSgrcfilter(lena,lena_salt); [M,N,a]=size(g); for i=1:a m=g(:,:,i); [PSNR(1,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i)); end %lena gaussian [g]=tiSgrcfilter(lena,lena_gaussian); [M,N,a]=size(g); for i=1:a m=g(:,:,i); [PSNR(2,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i)); end %lena speckle [g]=tiSgrcfilter(lena,lena_speckle); [M,N,a]=size(g); for i=1:a m=g(:,:,i); [PSNR(3,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i)); end %barbara_salt [g]=tiSgrcfilter(barbara,barbara_salt); [M,N,a]=size(g); for i=1:a m=g(:,:,i); [PSNR(4,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i)); end %barbara_gaussian [g]=tiSgrcfilter(barbara,barbara_gaussian); [M,N,a]=size(g); for i=1:a m=g(:,:,i); [PSNR(5,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i)); end %barbara_speckle [g]=tiSgrcfilter(barbara,barbara_speckle); [M,N,a]=size(g); for i=1:a m=g(:,:,i); [PSNR(6,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i)); end %peppers256_salt [g]=tiSgrcfilter(peppers256,peppers256_salt); [M,N,a]=size(g); for i=1:a m=g(:,:,i); [PSNR(7,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i)); end %peppers256_gaussian [g]=tiSgrcfilter(peppers256,peppers256_gaussian); [M,N,a]=size(g); for i=1:a m=g(:,:,i); [PSNR(8,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i)); end %peppers256_speckle [g]=tiSgrcfilter(peppers256,peppers256_speckle); [M,N,a]=size(g); for i=1:a m=g(:,:,i); [PSNR(9,i),o(i)]=tiSgrc_psnr(lena,M,N,g(:,:,i)); end %% 数据处理 figure; x=1:1:6; [M1,N1]=size(PSNR); ylim([0 40]) %y轴显示的范围,根据需要调整 ylabel('PSNR数值','FontName', '宋体','FontSize',18) bar1=PSNR'; GO = bar(bar1,1,'EdgeColor','black'); % 图例 legend({'lena salt','lena gaussian','lena speckle','barbara salt','barbara gaussian','barbara speckle','peppers256 salt','peppers256 gaussian','peppers256 speckle'},'fontsize',18); set(gca,'Xticklabel', ["均值滤波","中值滤波","高斯低通滤波","Butterworth低通滤波器","小波变换","PCA"]) ;%gca 坐标的句柄 xlabel('滤波器','fontsize',18,'FontName','宋体','Fontweight','bold'); title("各滤波器针对不同噪声不同图像效果对比",'Fontsize',20); 技术名词解释图1中除了两个重要的文件外,还用到了psnr评估标准,如下 图2 PSNR评估公式如果只是想知道效果,那么PSNR具体是什么不用太留意,知道PSNR越高说明去噪效果越好即可。 %tiSgrc_psnr.m function [PSNR,o]=tiSgrc_psnr(H,height,width,g)%H原始图像,height图像矩阵行,width图像矩阵列,g去噪后图像的图像\ o=0; p=0; for i=1:height for j=1:width o=o+(double(H(i,j))-double(g(i,j)))^2; end end p=255^2/(o/(height*width)); p=double(p); p1=log(p); p1=p1/log(10); PSNR=p1*10;小结 本次上传的代码比较简单,可以做一个初学者的了解进行,但是深入研究还是需要具体的理论分析。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |