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

您所在的位置:网站首页 salt头像 基于matlab的多种图像去噪代码实现

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

2023-06-20 01:54| 来源: 网络整理| 查看: 265

文章目录 概要整体架构流程技术名词解释小结

概要

本人第一次写博客,有生疏或者错误欢迎批评交流,提前谢谢包容~。(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