MATLAB自编自适应中值滤波算法

代码原理:

在噪声密度不是很大的情况下(根据经验,噪声的出现的概率小于0.2),使用中值滤波的效果不错。但是当噪声出现的概率比较高时,原来的中值滤波算法就不是很有效了。只有增大滤波器窗口尺寸,尽管会使图像变得模糊。使用自适应中值滤波器的目的就是,根据预设好的条件,动态地改变中值滤波器的窗口尺寸,以同时兼顾去噪声作用和保护细节的效果。

下面是自适应中值滤波器算法的详细描述:

预先定义好以下符号:

Sxy:滤波器的作用区域,滤波器窗口所覆盖的区域,该区域中心点为图像中第y行第x列个像素点;

Zmin:Sxy中最小的灰度值;

Zmax:Sxy中最大的灰度值;

Zmed:Sxy中所有灰度值的中值;

Zxy:表示图像中第y行第x列个像素点的灰度值;

Smax:Sxy所允许的最大窗口尺寸;

自适应中值滤波器分为以下两个过程,A和B:

A:

1. A1 = Zmed - Zmin

2. A2 = Zmed - Zmax

3. 如果A1>0 且 A2<0,则跳转到B

4. 否则,增大窗口的尺寸

5. 如果增大后的尺寸≤Smax,则重复A

6. 否则,直接输出Zmed

B:

1. B1 = Zxy - Zmin

2. B2 = Zxy - Zmax

3. 如果B1>0 且 B2<0,则输出Zxy

4. 否则输出Zmed

直观解释

在自适应中值滤波算法中,A步骤里面会先判断是否满足Zmin<Zmed<Zmax。这一步骤实质是判断当前区域的中值点是否是噪声点,通常来说是满足Zmin<Zmed<Zmax这个条件的,此时中值点不是噪声点,跳转到B;考虑一些特殊情况,如果Zmed=Zmin或者Zmed=Zmax,则认为是噪声点,应该扩大窗口尺寸,在一个更大的范围内寻找一个合适的非噪声点,随后再跳转到B,否则输出的中值点是噪声点;

接下来考虑跳转到B之后的情况:判断中心点的像素值是否是噪声点,判断条件为Zmin<Zxy<Zmax,原理同上,因为如果Zxy=Zmin或者Zxy=Zmax,则认为是噪声点。如果不是噪声点,我们可以保留当前像素点的灰度值;如果是噪声点,则使用中值替代原始灰度值,滤去噪声。

使用的图像源:

实验结果:

注:有需要源文件及设计文件的朋友可以联系作者,作者创作不易,希望客官们打赏~(作者联系方式见评论区)

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值