文档章节

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

o
 osc_g8254g7s
发布于 2019/08/19 22:19
字数 345
阅读 70
收藏 0

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

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

github的正确搜索方式

wc_飞豆
18分钟前
12
0
交叉编译-如何编译Android平台的可执行程序

首先来看看Linux平台下如何使用gcc编译出当下平台的可执行程序。 我们先来准备一个main.c文件 #include<stdio.h>int main(){ printf("Hello Gcc!"); return 0;} 上面是...

shzwork
22分钟前
15
0
Java 获取资源文件路径

1 问题描述 通过源码运行时,一般使用如下方式读取资源文件: String str = "1.jpg"; 资源文件与源码文件放在同一目录下,或者拥有同一父级目录: String str = "a/b/1.jpg"; 这样直接编译...

氷泠
53分钟前
12
0
git 为项目设置用户名/邮箱/密码

1.找到项目所在目录下的 .git,进入.git文件夹,然后执行如下命令分别设置用户名和邮箱 git config user.name "Affandi" git config user.email "123333333@qq.com" 然后执行命令查看con......

有时很滑稽
今天
0
0
如何从int转换为String? - How do I convert from int to String?

问题: I'm working on a project where all conversions from int to String are done like this: 我正在一个项目中,所有从int到String转换都是这样完成的: int i = 5;String strI = "" ......

javail
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部