均值滤波-----python

平滑线性滤波器的输出(响应)是包含在滤波器模板邻域内的像素简单平均值。这些滤波器有时也称为均值滤波器。它使用滤波器模板确定的邻域内像素的平均灰度值代替图像中每个像素的值,这种处理的结果降低了图像灰度的尖锐变化。由于典型的随机噪声由灰度级的急剧变化组成,因此,常见的平滑处理应用就是降低噪声。然而,由于图像边缘也是由图像灰度尖锐变化带来的特性,所以均值滤波处理还是存在着不希望有的边缘模糊的负面效应
代码实现:

import cv2 as cv
import numpy as np
import math
import copy
from skimage import io
import random

def spilt(a):
    if a / 2 == 0:
        x1 = x2 = a / 2
    else:
        x1 = math.floor(a / 2)
        x2 = a - x1
    return -x1,x2

def salt_and_pepper_noise(img, proportion=0.05):
    noise_img = img
    height, width = noise_img.shape[0], noise_img.shape[1]
    num = int(height * width * proportion)  # 多少个像素点添加椒盐噪声
    for i in range(num):
        w = random.randint(0, width - 1)
        h = random.randint(0, height - 1)
        if random.randint(0, 1) == 0:
            noise_img[h, w] = 0
        else:
            noise_img[h, w] = 255
    return noise_img

def original(i, j, k, a, b, img):
    x1, x2 = spilt(a)
    y1, y2 = spilt(b)
    temp = np.zeros(a * b)
    count = 0
    for m in range(x1, x2):
        for n in range(y1, y2):
            if i + m < 0 or i + m > img.shape[0] - 1 or j + n < 0 or j + n > img.shape[1] - 1:
                temp[count] = img[i, j, k]
            else:
                temp[count] = img[i + m, j + n, k]
            count += 1
    return temp

def average_function(a, b, img):
    img0 = copy.copy(img)
    for i in range(0, img.shape[0]):
        for j in range(2, img.shape[1]):
            for k in range(img.shape[2]):
                temp = original(i, j, k, a, b, img0)
                img[i, j, k] = int(np.mean(temp))
    return img


if __name__ == "__main__":

    img = io.imread(r"E:/pythontupian/5.jpg")
    cv.imshow("original", img)
    noise_img = salt_and_pepper_noise(img)
    cv.imshow("noise_img", noise_img)
    ave_img = average_function(3, 3, copy.copy( noise_img))  # (3,3)滤波器大小
    cv.imshow("ave_img", ave_img)
    cv.waitKey(0)
    cv.destroyAllWindows()

结果展示:
原图
在这里插入图片描述
加椒盐噪声后
在这里插入图片描述
均值滤波后
在这里插入图片描述
空间均值处理的一个重要应用是为了对感兴趣的物体得到一个粗略而模糊的一幅图像,这样,那些较小物体的灰度就与背景混合在一起了,较大的物体变的像“斑点”而易于检测。可以看出,均值滤波就是得到了一幅模糊的图像,在降低噪声方面效果不是很好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值