中值滤波器(平滑空间滤波器)基本原理及Python实现

Posted iwuqing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中值滤波器(平滑空间滤波器)基本原理及Python实现相关的知识,希望对你有一定的参考价值。

1. 基本原理

一种典型的非线性滤波器就是中值滤波器,它使用像素的一个领域内的灰度的中值来代替该像素的值。中值滤波器通常是处理椒盐噪声的一种有效的手段。

2. 测试结果

图源自skimage

3. 代码

 1 import numpy as np
 2 
 3 def median_filter(input_image, filter_size):
 4     \'\'\'
 5     中值滤波器
 6     :param input_image: 输入图像
 7     :param filter_size: 滤波器大小
 8     :return: 输出图像
 9 
10     注:此实现滤波器大小必须为奇数且 >= 3
11     \'\'\'
12     input_image_cp = np.copy(input_image)  # 输入图像的副本
13 
14     pad_num = int((filter_size - 1) / 2)  # 输入图像需要填充的尺寸
15 
16     input_image_cp = np.pad(input_image_cp, (pad_num, pad_num), mode="constant", constant_values=0)  # 填充输入图像
17 
18     m, n = input_image_cp.shape  # 获取填充后的输入图像的大小
19 
20     output_image = np.copy(input_image_cp)  # 输出图像
21 
22     # 空间滤波
23     for i in range(pad_num, m - pad_num):
24         for j in range(pad_num, n - pad_num):
25             output_image[i, j] = np.median(input_image_cp[i - pad_num:i + pad_num + 1, j - pad_num:j + pad_num + 1])
26 
27     output_image = output_image[pad_num:m - pad_num, pad_num:n - pad_num]  # 裁剪
28 
29     return output_image

 

以上是关于中值滤波器(平滑空间滤波器)基本原理及Python实现的主要内容,如果未能解决你的问题,请参考以下文章

从0到1学Python丨图像平滑方法的两种非线性滤波:中值滤波双边滤波

[Python从零到壹] 五十六.图像增强及运算篇之图像平滑(中值滤波双边滤波)

2021-09-23 opencv学习笔记(图像变换,二值化,滤波器介绍及python实现)

Python图像平滑滤波处理(均值滤波方框滤波高斯滤波中值滤波双边滤波)

4.4空间平滑

Python从零到壹丨详解图像平滑的两种非线性滤波方法