中值滤波技术能有效抑制噪声,通过把数字图像中一点的值用该点周围的各点值的中位数来代替,让这些值接近,以消除原图像中的噪声。

*模拟中值滤波

>>> import random
>>> import numpy as np
>>> import scipy.signal as signal
>>> x=np.arange(0,100,10)
>>> random.shuffle(x)
>>> x
array([70, 80, 30, 20, 10, 90,  0, 60, 40, 50])
>>> signal.medfilt(x,3) #一维中值滤波
array([ 70.,  70.,  30.,  20.,  20.,  10.,  60.,  40.,  50.,  40.])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

signal的medfilt()方法传入两个参数,第一个参数是要作中值滤波的信号,第二个参数是邻域的大小(奇数)。如邻域为3即是每个点自己和左右各一个点成为一个邻域。在每个位置的邻域中选取中位数替换这个位置的数,也就是该函数的返回值数组。如果邻域中出现没有元素的位置,那么以0补齐。

>>> x=np.random.randint(1,1000,(4,4))
>>> x
array([[ 31,  33, 745, 483],[331, 469, 804, 479],[235, 487, 244, 982],[857, 114, 167, 174]])
>>> signal.medfilt(x,(3,3)) #二维中值滤波
array([[   0.,   33.,  469.,    0.],[  33.,  331.,  483.,  479.],[ 235.,  331.,  469.,  174.],[   0.,  167.,  167.,    0.]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

二维中值滤波还可以用signal.medfilt2d(),速度较快,但只支持int8,float32和float64。

*对图像中值滤波
测试图像如下,是在网上找的一个200*200像素的头像。

import numpy as np
from PIL import Image
import scipy.signal as signalim=Image.open('test.jpg') #读入图片并建立Image对象im
data=[] #存储图像中所有像素值的list(二维)
width,height=im.size #将图片尺寸记录下来#读取图像像素的值
for h in range(height): #对每个行号hrow=[] #记录每一行像素for w in range(width): #对每行的每个像素列位置wvalue=im.getpixel((h,w)) #用getpixel读取这一点像素值row.append(value)#把它加到这一行的list中去data.append(row) #把记录好的每一行加到data的子list中去,就建立了模拟的二维listdata=signal.medfilt(data,kernel_size=3) #二维中值滤波
data=np.int32(data) #转换为int类型,以使用快速二维滤波#创建并保存结果
for h in range(height): #对每一行for w in range(width): #对该行的每一个列号im.putpixel((h,w),tuple(data[h][w])) #将data中该位置的值存进图像,要求参数为tupleim.save('result.jpg')#存储
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

董老师课程中写的代码在我的电脑(可能是版本的问题)上运行会报错,我修改了之后的如上,这样可以进行中值滤波了,但是图像的颜色不知道为什么也发生了改变(不清楚是否是正常的)。得到下图。

如果把int32()改成int8()的话,图像又会被反相(似乎int8()不能把每一位转回表示0~255的三元组)。
如果想滤波得更”严重”一些,只要修改signal.medfilt的参数kernel_size更大一些就可以了,如把它改成5的时候图像如下。

这个时候竟然恢复了黑色,这样我认为之前出现绿色的情况也是合理的,可能是该图像本身就有许多绿色的成分在里面(在黑和白之间不易分辨)吧。

【python学习笔记】25:scipy中值滤波相关推荐

  1. Python扩展库scipy中值滤波算法的应用

    中值滤波是数字信号处理.数字图像处理中常用的预处理技术,特点是将信号中每个值都替换为其邻域内的中值,即邻域内所有值排序后中间位置上的值.下面的代码演示了scipy库中signal模块的中值滤波算法的用 ...

  2. python中值滤波算法_Python扩展库scipy中值滤波算法的应用

    中值滤波是数字信号处理.数字图像处理中常用的预处理技术,特点是将信号中每个值都替换为其邻域内的中值,即邻域内所有值排序后中间位置上的值.下面的代码演示了scipy库中signal模块的中值滤波算法的用 ...

  3. python的skimage库 图像中值滤波;均值滤波;极大值滤波

    使用 view_as_blocks (来源于skimage.util)函数.当我们想要对非重叠图像块执行局部操作时,块视图(view_as_blocks的返回值)非常有用. 我们将 图像 astron ...

  4. 《OpenCV3编程入门》学习笔记6 图像处理(二)非线性滤波:中值滤波、双边滤波

    第6章 图像处理 6.2 非线性滤波:中值滤波.双边滤波 6.2.1 非线性滤波 很多情况下,使用领域像素的非线性滤波会得到更好的效果,如在噪声是散粒噪声而不是高斯噪声,即图像偶尔会出现很大值时,高斯 ...

  5. Opencv学习笔记 各向异性滤波/均值滤波/高斯滤波/中值滤波/加权中值滤波/高斯低通滤波

    各向异性滤波         各向异性扩散滤波主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留图像边缘的,和双边滤波很像. public static void ImageA ...

  6. c++ openvc4.5.5 学习笔记(五)图像平滑滤波几种基本方法(平均滤波blur、高斯平滑滤波GaussianBlur、中值滤波medianBlur、双边滤波bilateralFilter )

    平滑,也称为模糊,是一种简单而经常使用的图像处理操作. 要执行平滑操作,我们将对我们的图像应用过滤器.最常见的滤波器类型是线性的,其中输出像素的值(i.e. g(i,j)),被确定为输入像素值的加权和 ...

  7. 数字图像处理学习笔记3:图像增强之空间滤波1(平滑滤波:均值滤波、中值滤波)

    文章目录 前言 平滑滤波 1.平滑线性滤波(均值滤波)及MATLAB代码 2.非线性滤波器(中值滤波)及MATLAB代码 总结 前言 使用一些滤波器对图像进行处理.利用滤波窗口使当前像素灰度值与周围像 ...

  8. 数字图像处理学习笔记(六)平滑滤波:均值滤波、中值滤波

    实验截图: 均值滤波和中值滤波处理后的结果 实验代码: 代码(1): img=imread('microchip.png'); img=rgb2gray(img); subplot(1,3,1); i ...

  9. Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波

    作者 | 杨秀璋,责编 | 夕颜 题图  | 视觉中国 出品 | CSDN博客 本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波.全文均是 ...

最新文章

  1. EffectiveC++编程的50个建议
  2. @PropertySource与@ConfigurationProperties多种方式读取配置文件详解,附带@PropertySources使用说明
  3. 阮一峰:Flex 布局教程
  4. 开源视频会议bigbluebutton
  5. SQL SERVER 中identity
  6. 18-Gm-TransH:Group-Constrained Embedding of Multi-fold Relations in Knowledge Bases,嵌入,transH,n-ary
  7. 无需第三方,使用Mac预览合并PDF
  8. c语言 计算机 只用if,C语言if语句的用法
  9. c语言是结构化 模块化的编程语言,结构化程序设计和模块化结构
  10. 机器学习入门概念--心血总结--史上最强--入门必读--回味无穷
  11. git did not exit cleanly (exit code 128)处理方式
  12. eclipse常规使用(Eclipse Jee Oxygen)
  13. Vue天地图之图层类型切换
  14. Vue项目安装webpack遇到的问题
  15. 干眼症产品的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. 视频号新手必备:定位、涨粉、私域全攻略
  17. Android 隐藏手机虚拟按键
  18. 在Oracle中采用纵向和横向结构表
  19. 华为董事长郭平:避免赶时髦,数字化转型和企业战略需深度互锁
  20. 一个解决了惊群效应的高并发主动式服务模型

热门文章

  1. 深度学习入门之如何制作npz、npy文件
  2. 2020年软件评测师真题精选
  3. CSS—— grid 网格布局
  4. 传奇列表获取失败与登录器太老怎么解决
  5. TransE模型的python代码实现
  6. VB6 简单实现 支付宝二维码扫马支付
  7. error: ‘ULONG_MAX’ was not declared in this scope
  8. OSI七层网络参考模型详解
  9. R语言绘图样式设置(符号、线条、颜色、文本属性)
  10. centos7防火墙开放端口,附开放samba特定端口实例