clear all;
close all;
I=imread('2.jpg');
figure;
imshow(I,[]);
title('原始图像');
I=imnoise(I,'salt & pepper',0.15);
figure;
imshow(I,[]);
title('加椒盐噪声');
%7×7中值滤波
Q=medfilt2(I,[3,3]);
figure;
imshow(Q,[]);
title('7×7中值滤波');
%自适应中值滤波
[M,N]=size(I);
for i=3:7
if i<=7
for x=i/2+0.5:M-i/2+0.5
for y=i/2+0.5:M-i/2+0.5
z_max=max(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
z_min=min(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
z_med=median(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
A1=z_med-z_min;
A2=z_med-z_max;
if (A1>0&A2<0)
B1=I(x,y)-z_min;
B2=I(x,y)-z_max;
if (B1>0&B2<0)
I(x,y)=I(x,y);
else
I(x,y)=z_med;
end
else
i=i+2;
end
end
end
else
I(x,y)=I(x,y);
end
end
figure;
imshow(I,[]);
title('自适应中值滤波');
错在z_max=max(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
z_min=min(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
z_med=median(I(M*(y-2)+x-(i/2-0.5):M*(y-2)+x-(i/2-0.5)+i*M-M));
这个地方小弟看不懂不懂什么意思 也改不了 麻烦各位大虾们帮下忙
我的目的:就是让中值滤波和自适宜中值滤波对比下看看哪个效果好 如果有别的好的方法 我想把自适宜那段程序换掉
程序的原理我也发下:自适应中值滤波算法描述
当脉冲噪声(椒盐噪声)在空间上出现的概率不大,中值滤波一般可以取得较好的效果。经验表明,当出现的正负脉冲噪声概率均分别小于0.2时,中值滤波是可用的,而当脉冲噪声在空间上出现的概率较大时,使用中值滤波后可能产生较严重的失真[6]。为了改善滤波效果,引入自适应中值滤波算法。即基于中值滤波的特点和性质,考虑采用变换窗口大小的方法,在中值算法中加入一个判断操作,判断窗口内的象素中值及滤波处的像点灰度是否为脉冲噪声,并分别处理。
设 是对像点 进行中值滤波的工作窗口, 为像点 的灰度, 为 中的灰度最小值, 为 中的灰度最大值, 为 中的灰度中值, 为 中的灰度均值, 为允许的最大窗口, 为初始默认窗口。
自适应中值滤波算法的基本步骤如下:
(1)计算 。
(2)如果 ,那么转(4);否则,转至(3)。
(3)若 ,输出 ;否则,增大窗口 尺寸。若 ,则重复(1)和(2);否则输出 。
(4)计算 ;
(5)如果 ,那么输出 ;否则,输出 。
在上述算法中,如果 ,表明 不是噪声,转到(4)判断 是否是脉冲,当 与 都不是脉冲噪声时,优先输出 。当 与 都是脉冲噪声时,输出 的灰度均值 。相应的算法流程图 我放在附件里了
如果有别的好的方法 我想把自适宜那段程序换掉
2008-5-16 15:10 上传
点击文件名下载附件
34 KB, 下载次数: 19075