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

Posted iwuqing

tags:

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

1. 基本原理

使用元素的领域内像素的平均值代替该元素,可明显的降低图像灰度的尖锐变换。它的一种重要应用是模糊处理:得到感兴趣的区域的粗略表示,将次要的/小的元素与背景融合,使得主要的/较大的元素变得易于检测
 
$$ R=\\frac1m \\sum_i=1^m z_i $$
 
  • $m$为滤波器大小

2. 测试结果

技术图片

图源自skimage

 

3. 代码

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

 

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

OpenCV-Python 图像平滑处理3:boxFilter函数详解及均值滤波案例

OpenCV-Python 图像平滑处理3:boxFilter函数详解及均值滤波案例

OpenCV-Python 图像平滑处理2:blur函数及滤波案例

OpenCV-Python 图像平滑处理2:blur函数及滤波案例

OpenCV-Python 图像平滑处理1:卷积函数filter2D详解及用于均值滤波的案例

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