matlab改进中值滤波,求助中值滤波和自适应中值滤波算法错误修改

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)判断 是否是脉冲,当 与 都不是脉冲噪声时,优先输出 。当 与 都是脉冲噪声时,输出 的灰度均值 。相应的算法流程图 我放在附件里了

如果有别的好的方法 我想把自适宜那段程序换掉

5724a1379ceb16a514510c7aa4f77048.gif

2008-5-16 15:10 上传

点击文件名下载附件

34 KB, 下载次数: 19075

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值