基于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;

小结

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

  • 11
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值