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代码与数据下载地址
见博客主页