有效去除图像中脉冲噪声的新型滤波算法(曲延锋等)

%imfledfilt.m
%有效去除图像中脉冲噪声的新型滤波算法
%检测窗口5*5,滤波窗口3*3
function [R] = imfledfilt(x,Noiserate)
[e,f]=size(x);
Nmax=2; %确定最大的滤波半径,那么滤波窗口或者检测窗口最大为5
%下面是边界扩展,图像上下左右各增加Nmax像素
z=zeros(e+2*Nmax,f+2*Nmax);%引入一个新矩阵,用以贴上图片
z(Nmax+1:e+Nmax,Nmax+1:f+Nmax)=x;%将图片贴在新矩阵的中心位置

%扩展图像边界
z(1:Nmax,Nmax+1:f+Nmax)=x(1:Nmax,1:f);                 %扩展上边界
z(1:e+Nmax,f+Nmax+1:f+2*Nmax)=z(1:e+Nmax,f:f+Nmax-1);  %扩展右边界
z(e+Nmax+1:e+2*Nmax,Nmax+1:f+2*Nmax)=z(e:e+Nmax-1,Nmax+1:f+2*Nmax); %扩展下边界
z(1:e+2*Nmax,1:Nmax)=z(1:e+2*Nmax,Nmax+1:2*Nmax);       %扩展左边界
%z即为一个扩展后的图像
y=z;%y复制z,y为最后输出的图像

F=zeros(e+2*Nmax,f+2*Nmax);%判断每个像素点是否是噪声的二值化矩阵.F(i,j)=0为信号点,F(i,j)=1为噪声点,开始时默认所有点为信号点(毕竟噪声点很少)

%%%第一步,检测每个像素是否为噪声点
for i=Nmax+1:e+Nmax
  for j=Nmax+1:f+Nmax
    %检测窗口开始用5*5
    z0=z(i-2:i+2,j-2:j+2);
    z1=z0(1:end);
    %if  z(i,j) == max(z1) | z(i,j) == min(z1)%疑似噪声点,需要进一步判断
    if  z(i,j) == 0 | z(i,j) == 255 %疑似噪声点,需要进一步判断
      F(i,j) = 1;
    end
 end
end

%由文献条件
if Noiserate < 0.6
  Wf = 3;
else
  Wf = 5;
end
%%%第二步,噪声滤波
%while F ~= zeros(e+2*Nmax,f+2*Nmax)%当去噪未彻底,那需要反复滤波去噪
%H = 3;
%while H ~= 0
  for i=Nmax+1:e+Nmax
    for j=Nmax+1:f+Nmax
      if F(i,j) == 1%若像素为噪声点
         M = sum(sum( F(i-( (Wf-1)/2 ):i+( (Wf-1)/2 ),j-( (Wf-1)/2 ):j+( (Wf-1)/2 )) == 0 ));%窗口内信号点的个数
         if M >0
           z1 =zeros(1,M);
           for i1=i-( (Wf-1)/2 ):i+( (Wf-1)/2 )
            for j1=j-( (Wf-1)/2 ):j+( (Wf-1)/2 )
              if F(i1,j1) == 0%寻找到信号点
                z1(1,M) = y(i1,j1);
                M = M -1;
              end
            end
           end
          y(i,j) = median(z1);%求取信号点的中值
          F(i,j) = 0;%噪声点处理后标记为信号点
         end
      end 
    end
  end
%  z = y;
% H = H -1;
%end

R(1:e,1:f) = y( Nmax+1:e+Nmax,Nmax+1:f+Nmax );%拷出滤波后的图像
I=imread('3.png');
I=rgb2gray(I);
[e,f]=size(I);

Noiserate = 0.9;
J=imnoise(I,'salt & pepper',Noiserate);
R=imfledfilt(J,Noiserate);

subplot(1,2,1),imshow( uint8(I) ),title('原图像');
subplot(1,2,2),imshow( uint8(R) ),title('新算法滤波后的图像');
% 计算三种算法的峰值信噪比
B=8;                %编码一个像素用多少二进制位
MAX=2^B-1;          %图像有多少灰度级

I=double(I);
R=double(R);


%%%%%% psnr1=
MES=sum(sum((I-R).^2))/(e*f);     %自适应中值去噪的均方差
PSNR=20*log10(MAX/sqrt(MES));           %自适应中值算法去噪的峰值信噪比

MES1 = sum(sum((I-R).^2));
MES2 = sum(sum(I.^2));
SNR = 10*log10(MES2/MES1);
tic;R=imfledfilt(J,Noiserate );toc;


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像在采集和传输过程,往往会引入不同程度的噪声,这就为后面的边缘检测、图像分割和形状识别等带来很大的难度,所以图像去噪是图像处理非常重要的一环。影啊图像质量的噪声最常见的是高斯噪声脉冲噪声,本文主要针对脉冲噪声提出新的滤波算法滤波及其各种改进方法是常用的去除脉冲噪声滤波方法,它对去除脉冲噪声具有较好的性能,去噪后在人眼敏感的平滑区域不存在或有较少的噪声,但是现存的滤波算法图像的结构细节保护上较差,尤其是在高密度脉冲哑声污染下,复原引起的失真较严重本文针对高密度脉冲噪声提出两种改进型的滤波算法。一种滤波方法命名为 HSADMF是针对高密度椒盐噪声污染情况下的改进滤波法。ISADUF是基于序列图像的椒盐噪声去除算法,利用椒盐噪声的正负脉冲特性,提出点对点的检测算法,把像素点分为信息点和可疑噪声点,仅对噪声点进行滤波处理,充分利用每幅图像的有用信息来恢复受污染的图像,取得了良好的恢复效。分灰度图像和彩色图像分析该滤波方法的特性及其滤波效果图。第二种滤波方法命名为SAD-WW是根据ADW滤波方法的思想,提出针对高密度随机值脉冲噪声滤波处理方法,该旅波方法首先对图像效果影响较大的极限值噪声用 HSADMMF方法处理,在此基础上再对箱机脉冲噪声进行矢量滤波处理。两种滤波方法得到的峰值信噪比(PSNR)与其他经典的滤波方法相比最大,平均绝对误差OMAE最小,即其去噪效果最好,细节处理效果最佳。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值