数字图像处理——中值滤波降噪

使用滤波模板中像素点的中值点作为目标像素,这就称为中值滤波降噪(顾名思义)

Python实现过程如下:

图像数据为:

 图像中存在典型的椒盐噪声,而中值降噪,对椒盐噪声的作用是非常有效的。

导入要使用的库:

import PIL.Image as Image
import matplotlib.pyplot as plt
import numpy as np

 读入图片数据,并可视化:

img = Image.open('Fig0335(a)(ckt_board_saltpep_prob_pt05).tif')

plt.imshow(img, cmap = 'gray')
plt.axis('off')
plt.show()

滤波函数:

这几个空间滤波使用的函数基本相似,只是目标像素的计算过程不一样

def rejector(img, m, n):
    img_data = np.array(img)
    img_new = [[] for _ in range(np.shape(img_data)[0])]
    a = m // 2
    b = n // 2
    for i in range(np.shape(img_data)[0]):
        for j in range(np.shape(img_data)[1]):
            num = []
            for k in range(i-a, i+a+1, 1):
                for l in range(j-b, j+b+1, 1):
                    c = k>=0 and k<np.shape(img_data)[0]
                    d = l>=0 and l<np.shape(img_data)[1]
                    if c and d:
                        num.append(img_data[k][l])
                    else:
                        num.append(0)
            num = sorted(num)
            y = m*n // 2
            img_new[i].append(int(num[y]))
    return img_new

调用滤波函数,得到结果,并可视化:

img_new = rejector(img, 3, 3)

plt.subplot(121)
plt.axis('off')
plt.imshow(img_new, cmap = 'gray')

plt.subplot(122)
plt.axis('off')
plt.imshow(img, cmap = 'gray')

plt.show()

 左侧为结果,右侧为原图像:

中值滤波结果与均值滤波结果比较:

左侧为中值滤波,中间为均值滤波,右侧为原图像

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫虫(——)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值