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

1. 基本原理

使用元素的领域内像素的平均值代替该元素,可明显的降低图像灰度的尖锐变换。它的一种重要应用是模糊处理:得到感兴趣的区域的粗略表示,将次要的/小的元素与背景融合,使得主要的/较大的元素变得易于检测
 
$$  R=\frac{1}{m} \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

 

转载于:https://www.cnblogs.com/iwuqing/p/11380131.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值