【python学习笔记】25:scipy中值滤波
中值滤波技术能有效抑制噪声,通过把数字图像中一点的值用该点周围的各点值的中位数来代替,让这些值接近,以消除原图像中的噪声。
*模拟中值滤波
>>> 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中值滤波相关推荐
- Python扩展库scipy中值滤波算法的应用
中值滤波是数字信号处理.数字图像处理中常用的预处理技术,特点是将信号中每个值都替换为其邻域内的中值,即邻域内所有值排序后中间位置上的值.下面的代码演示了scipy库中signal模块的中值滤波算法的用 ...
- python中值滤波算法_Python扩展库scipy中值滤波算法的应用
中值滤波是数字信号处理.数字图像处理中常用的预处理技术,特点是将信号中每个值都替换为其邻域内的中值,即邻域内所有值排序后中间位置上的值.下面的代码演示了scipy库中signal模块的中值滤波算法的用 ...
- python的skimage库 图像中值滤波;均值滤波;极大值滤波
使用 view_as_blocks (来源于skimage.util)函数.当我们想要对非重叠图像块执行局部操作时,块视图(view_as_blocks的返回值)非常有用. 我们将 图像 astron ...
- 《OpenCV3编程入门》学习笔记6 图像处理(二)非线性滤波:中值滤波、双边滤波
第6章 图像处理 6.2 非线性滤波:中值滤波.双边滤波 6.2.1 非线性滤波 很多情况下,使用领域像素的非线性滤波会得到更好的效果,如在噪声是散粒噪声而不是高斯噪声,即图像偶尔会出现很大值时,高斯 ...
- Opencv学习笔记 各向异性滤波/均值滤波/高斯滤波/中值滤波/加权中值滤波/高斯低通滤波
各向异性滤波 各向异性扩散滤波主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留图像边缘的,和双边滤波很像. public static void ImageA ...
- c++ openvc4.5.5 学习笔记(五)图像平滑滤波几种基本方法(平均滤波blur、高斯平滑滤波GaussianBlur、中值滤波medianBlur、双边滤波bilateralFilter )
平滑,也称为模糊,是一种简单而经常使用的图像处理操作. 要执行平滑操作,我们将对我们的图像应用过滤器.最常见的滤波器类型是线性的,其中输出像素的值(i.e. g(i,j)),被确定为输入像素值的加权和 ...
- 数字图像处理学习笔记3:图像增强之空间滤波1(平滑滤波:均值滤波、中值滤波)
文章目录 前言 平滑滤波 1.平滑线性滤波(均值滤波)及MATLAB代码 2.非线性滤波器(中值滤波)及MATLAB代码 总结 前言 使用一些滤波器对图像进行处理.利用滤波窗口使当前像素灰度值与周围像 ...
- 数字图像处理学习笔记(六)平滑滤波:均值滤波、中值滤波
实验截图: 均值滤波和中值滤波处理后的结果 实验代码: 代码(1): img=imread('microchip.png'); img=rgb2gray(img); subplot(1,3,1); i ...
- Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波
作者 | 杨秀璋,责编 | 夕颜 题图 | 视觉中国 出品 | CSDN博客 本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波.全文均是 ...
最新文章
- EffectiveC++编程的50个建议
- @PropertySource与@ConfigurationProperties多种方式读取配置文件详解,附带@PropertySources使用说明
- 阮一峰:Flex 布局教程
- 开源视频会议bigbluebutton
- SQL SERVER 中identity
- 18-Gm-TransH:Group-Constrained Embedding of Multi-fold Relations in Knowledge Bases,嵌入,transH,n-ary
- 无需第三方,使用Mac预览合并PDF
- c语言 计算机 只用if,C语言if语句的用法
- c语言是结构化 模块化的编程语言,结构化程序设计和模块化结构
- 机器学习入门概念--心血总结--史上最强--入门必读--回味无穷
- git did not exit cleanly (exit code 128)处理方式
- eclipse常规使用(Eclipse Jee Oxygen)
- Vue天地图之图层类型切换
- Vue项目安装webpack遇到的问题
- 干眼症产品的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 视频号新手必备:定位、涨粉、私域全攻略
- Android 隐藏手机虚拟按键
- 在Oracle中采用纵向和横向结构表
- 华为董事长郭平:避免赶时髦,数字化转型和企业战略需深度互锁
- 一个解决了惊群效应的高并发主动式服务模型