中值滤波、均值滤波----python

中值滤波

一级标题统计排序滤波器是一种非线性空间滤波器,这种滤波器的响应以滤波器包围的图像区域中所包含的像素排序为基础,然后使用统计排序结果决定的值代替中心像素的值。这一类中最知名的滤波器是中值滤波器,正如其名暗示的那样,它是将像素内灰度的中值(在中值计算中包括原像素值)代替该像素的值。中值滤波器的使用非常普遍,这是因为对于一定类型的随机噪声,它提供了一种优秀的去噪能力,而且比相同尺寸的线性平滑滤波器的模糊程度明显要低。中值滤波器对处理脉冲噪声非常有效,该种噪声也成为椒盐噪声,因为这种噪声是以黑白点的形式叠加在图像上的。

代码展示:

from PIL import Image
import numpy as np
import random
from skimage import io
import cv2 as cv
import numpy as np
import math

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 median_filter(image, win=3):
    H, W, C = image.shape
    result = image.copy()
    for h in range(1, H-2):
        for w in range(1, W-2):
            for c in range(C):
                result[h, w, c] = np.median(result[h:h+win, w:w+win, c])
    return result



if __name__ == "__main__":

    img = cv.imread(r"E:/pythontupian/5.jpg")
    cv.imshow("original", img)
    noise_img = salt_and_pepper_noise(img)
    cv.imshow("noise_img", noise_img)
    MedianFilter_img=median_filter(img)

    cv.imshow("MedianFilter_img", MedianFilter_img)
    cv.waitKey(0)
    cv.destroyAllWindows()

结果展示:
3×3中值滤波器(从左到右依次是原图、加椒盐噪声图、滤波后的图):

在这里插入图片描述
9×9中值滤波器(从左到右依次是原图、加椒盐噪声图、滤波后的图):
在这里插入图片描述
15×15中值滤波器(从左到右依次是原图、加椒盐噪声图、滤波后的图):
在这里插入图片描述

均值滤波

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

from PIL import Image
import numpy as np
import random
from skimage import io
import cv2 as cv
import numpy as np
import math

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 mean_filter(image):
    K = ([1, 1, 1],
         [1, 1, 1],
         [1, 1, 1])
    K = np.array(K)
    H, W, C = image.shape
    result = image.copy()
    # 因为卷积核是以左上角为定位,所以遍历时最后要停到H-2处
    for h in range(1, H-2):
        for w in range(1, W-2):
            for c in range(C):
                result[h, w, c] = sum(sum(K * result[h:h+K.shape[0], w:w+K.shape[1], c])) // 9
    return result




if __name__ == "__main__":

    img = cv.imread(r"E:/pythontupian/5.jpg")
    cv.imshow("original", img)
    noise_img = salt_and_pepper_noise(img)
    cv.imshow("noise_img", noise_img)
    Mean_img=mean_filter(img)

    cv.imshow("MedianFilter_img", Mean_img)
    cv.waitKey(0)
    cv.destroyAllWindows()

结果展示:

3×3中值滤波器(从左到右依次是原图、加椒盐噪声图、滤波后的图):
在这里插入图片描述

结果比较

3×3中值滤波器(从左到右依次是加椒盐噪声图、3×3均值滤波器、3×3中值滤波器):
在这里插入图片描述

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值