空间滤波器

本文介绍了图像滤波的基本原理,包括像素值的计算方法,如模板卷积和模板排序。重点讨论了线性滤波器(如均值滤波、高斯滤波)和非线性滤波(如中值滤波)在平滑、去噪方面的应用,以及椒盐噪声的添加和处理示例。
摘要由CSDN通过智能技术生成

图像滤波常用于平滑图像、去除噪音和边缘检测等任务。基于局部图像。

基本原理:像素p的输出值由输入图像中像素p及其周围邻域N中的像素值确定。
计算方法:将邻域N的像素值和一个与邻域同样尺寸的子图像(模板、核、滤波器)进行模板运算。

模板:可看作一幅尺寸为n x n 的小图像W,n一般取奇数,称为模板尺寸,每个位置上的值w被称为权重。在进行计算时,将模板的中心和像素p对齐,选取原始图像中和模板相同范围的邻域N的像素值作为输入。常用的模板运算:模板卷积和模板排序

模板卷积:用模板与需处理图像空间进行卷积的运算过程。padding

模板排序:用模板来提取待处理图像中与模板同尺寸的图像子集,将邻域N的像素值进行排序,选择特定次序的灰度值作为像素p位置的输出值。最大值、最小值、中位数。

分类:

线性滤波器:盒式滤波器、均值滤波器、高斯滤波器

非线性滤波器:中值滤波器

1、盒式滤波器(方框滤波) 

将像素p邻域的平均值作为输出结果。

盒式滤波器与均值滤波器的区别:盒式滤波器中的每个像素的权重相同,计算均值时,每个像素的贡献相等。

normalize表示在滤波时是否进行归一化:

①当normalize为True时,用邻域像素值的和除以面积,与均值滤波效果一样。

②当normalize为False时,不进行归一化,直接使用领域像素值的和。大于255时取255。

normalize 表示在滤波时是否进行归一化。
      1.当值为True时,归一化,用邻域像素值的和除以面积。此时方框滤波与均值滤波效果相同。
      2.当值为False时,不归一化,直接使用邻域像素值的和。和>255时使用255
def add_peppersalt_noise(image, n=10000): 
    result = image.copy()
    w, h = image.shape[:2]  # 测量图片的长和宽
    for i in range(n):  # 生成n个椒盐噪声
        x = np.random.randint(1, w)
        y = np.random.randint(1, h)
        if np.random.randint(0, 2) == 0:
            result[x, y] = 0
        else:
            result[x, y] = 255
    return result


img = cv2.imread("Cat.jpg")
noise = add_peppersalt_noise(img)
boxFilter_1 = cv2.boxFilter(noise, -1, (3, 3), normalize=True)
boxFilter_2 = cv2.boxFilter(noise, -1, (5, 5), normalize=False)
plt.figure()
plt.subplot(221), plt.imshow(img, "gray"), plt.title("original")
plt.subplot(222), plt.imshow(noise, None), plt.title("salt")
plt.subplot(223), plt.imshow(boxFilter_1, None), plt.title("boxFilter_1")
plt.subplot(224), plt.imshow(boxFilter_2, None), plt.title("boxFilter_2")
plt.show()

2、均值滤波

模板的权重都为1的滤波器,将像素的邻域平均值作为输出结果。常用于图像平滑,去除噪声,图像模糊(随模板尺寸的增加,图像变得模糊) 

def add_peppersalt_noise(image, n=10000):  # 定义一个函数 利用这个函数生成噪声图
    result = image.copy()
    w, h = image.shape[:2]  # 测量图片的长和宽
    for i in range(n):  # 生成n个椒盐噪声
        x = np.random.randint(1, w)
        y = np.random.randint(1, h)
        if np.random.randint(0, 2) == 0:
            result[x, y] = 0
        else:
            result[x, y] = 255
    return result


img = cv2.imread("Cat.jpg")
noise = add_peppersalt_noise(img)
blur_1 = cv2.blur(noise, (3, 3))
blur_2 = cv2.blur(noise, (5, 5))
plt.figure()
plt.subplot(221), plt.imshow(img, "gray"), plt.title("original")
plt.subplot(222), plt.imshow(noise, None), plt.title("salt")
plt.subplot(223), plt.imshow(blur_1, None), plt.title("3x3")
plt.subplot(224), plt.imshow(blur_2, None), plt.title("5x5")
plt.show()

3、高斯滤波

模板根据高斯分布来确定模板系数,接近中心的权重比边缘大,可以减少由模板尺寸增加所造成的图像模糊。

gaussian_blur = cv2.GaussianBlur(img, (5, 5), 1)  # 高斯滤波

 

4、中值滤波

将邻域内排序后的中位数值作为输出以代替原像素值(模板排序)。可用于降噪,能保持原图像锐度,对椒盐噪声抑制效果好。属于非线性滤波,可能会破坏像素点的线性关系,不适用于点、线等细节较多的图像或高精度图像。 

median = cv2.medianBlur(img, 5)  # 中值滤波

 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值