当前位置: 代码迷 >> 综合 >> 【图像去噪】基于自适应中值滤波实现图像去噪matlab代码
  详细解决方案

【图像去噪】基于自适应中值滤波实现图像去噪matlab代码

热度:53   发布时间:2023-12-03 23:07:36.0

1 简介

由于图像噪声会对后续的图像处理结果产生影响,所以在对图像进行其他处理前应先对图像去噪.针对传统中值滤波器在去除均匀分布椒盐噪声时效果并不理想,设计出一种自适应阈值中值滤波器.分别用两种滤波器进行图像去噪实验,通过对比去噪后图像的信噪比,峰值信噪比以及视觉效果发现:较之传统的中值滤波器,新的自适应中值滤波器能更有效地去除椒盐噪声并减少图像失真.

2 完整代码

%*******************************************
%———自适应中值滤波法去除大密度椒盐噪声———
% 主要思想
% 判断当前像素是否为噪声点
%   1) NO ->不处理
%   2) YES->自适应中值滤波  
%   3) 边缘处理%******************************************
close all;clc;
clear all
set(0,'defaultfigurecolor','w')
%读取图像
I=imread('rice.png');
%变为灰度图
% I=rgb2gray(I);
%加椒盐噪声
In=imnoise(I,'salt & pepper',0.7);
%求图像最大最小值
max=max(max(In));
min=min(min(In));
%创建一幅图像
size=size(In);
J=zeros(size);
%自适应中值滤波
for i=2:size(1)-1for j=2:size(2)-1if(In(i,j)<max||In(i,j)>min)J(i,j)=I(i,j);elsefor k=1A=In(i-k:i+k,j-k:j+k);B=median(median(A));if(B<max||B>min)J(i,j)=B;break;endendendend
end
%边缘处理
%第一行
for i=2:size(2)-1a=round((In(1,i-1)+In(1,i)+In(1,i+1))/3);J(1,i)=a;
end
%最后一行
for i=2:size(2)-1a=round((In(size(1),i-1)+In(size(1),i)+In(size(1),i+1))/3);J(size(1),i)=a;
end
%第一列
for i=2:size(1)-1a=round((In(i-1,1)+In(i,1)+In(i+1,1))/3);J(i,1)=a;
end
%最后一列
for i=2:size(1)-1a=round((In(i-1,size(2))+In(i,size(2))+In(i+1,size(2)))/3);J(i,size(2))=a;
end
%左上角
J(1,1)=round((J(1,2)+J(2,1))/2);
%左下角
J(size(1),1)=round((J(size(1),2)+J(size(1)-1,1))/2);
%右上角
J(1,size(2))=round((J(1,size(2)-1)+J(2,size(2)))/2);
%右下角
J(size(1),size(2))=round((J(size(1),size(2)-1)+J(size(1)-1,size(2)))/2);
J=uint8(J);
%figure,imshow(I);
%用评价函数评价SMF处理结果
K=medfilt2(In);
snr_1=snr(I,K);
%用评价函数评价本算法处理结果
snr_2=snr(I,J);
%显示处理结果
subplot(131),imshow(I);title('原图')
subplot(132),imshow(In);title('加噪图')
subplot(133),imshow(J);title('去噪图')

3 仿真结果

?4 参考文献

[1]耿帅, and 王希常. "一种基于中值滤波的图像去噪算法." 计算机与现代化 11(2011):3.

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页

  相关解决方案