滤波
滤波常用于降噪;
滤波有多种,中值滤波,均值滤波,等等,说的很高大上,其实很简单,各种滤波原理类似。
以中值滤波为例,把 每一点的数据 用 该点指定邻域内数的中位数 代替,
如 数据 [1,8,3],邻域大小为3,则8经过滤波后是3,[1,3,8]的中位数;数据可以是多维的,邻域也可以为多维;
其过程类似卷积
python 中值滤波函数为 scipy.signal.medfilt(signal, kernel_size),第一个参数为信号值,第二个参数为滑框大小,注意第二个参数必须为奇数,即左+1+右;
如果滑框内没数据,以 0 填充
import random import numpy as np import scipy.signal as signal # 一维中值滤波 x=np.arange(0,100,10) random.shuffle(x) print x # [70 20 10 30 40 0 60 80 90 50] print signal.medfilt(x,3) # 一维中值滤波 # [20. 20. 20. 30. 30. 40. 60. 80. 80. 50.] # 二维中值滤波 x=np.random.randint(1,1000,(4,4)) print x # [[711 77 365 518] # [987 621 734 19] # [652 370 615 467] # [852 420 880 175]] print signal.medfilt(x,(3,3)) # [[ 0. 365. 77. 0.] # [370. 621. 467. 365.] # [420. 652. 467. 175.] # [ 0. 420. 370. 0.]]
二维中值滤波还可以用 signal.medfilt2d(),速度快,但只支持 int8,float32,float64
滑框维度总是可以为1,如果大于1,其维度必须等于信号维度
也就是说,如果信号为3维,滑框必须为3维
图像去噪
滤波常用于图像预处理
import numpy as np from PIL import Image import scipy.signal as signal im=Image.open('test2.png') # 读入图片并建立Image对象im # im=im.convert('L') # 转为灰度图 data=[] # 存储图像中所有像素值的list(二维) width,height=im.size # 图片尺寸,长宽,或者说宽高-->横竖 print(width, height) # 读取图像像素的值 for w in range(width): # 对每个行号h row=[] # 记录每一行像素 for h in range(height): # 对每行的每个像素列位置w value=im.getpixel((w, h)) # 用getpixel读取这一点像素值 row.append(value) # 把它加到这一行的list中去 data.append(row) # 把记录好的每一行加到data的子list中去,就建立了模拟的二维list ### 彩色图滤波 # data=signal.medfilt(data,kernel_size=3) # 二维中值滤波 # data=signal.medfilt(data,kernel_size=5) data=signal.medfilt(data,kernel_size=(3, 3, 3)) ### 灰度图滤波 ##1 # data=signal.medfilt(data,kernel_size=(3, 3)) ##2 # data = np.uint8(data) # data=signal.medfilt2d(data,kernel_size=(11, 11)) # data=np.int32(data) # 转换为int类型,以使用快速二维滤波 # data=np.int8(data) print(data) # 创建并保存结果 for w in range(width): # 对每一行 for h in range(height): # 对该行的每一个列号 im.putpixel((w,h),tuple(data[w][h])) # 将data中该位置的值存进图像,要求参数为tuple # im.putpixel((w,h),data[w][h]) # 灰度图的处理方式 im.save('result2.jpg') # 存储
图1 为原图;图2 使用 领域为3的中值滤波处理;图3 使用 领域为5的中值滤波处理
当使用中值滤波处理图片时,图像的边缘可能变得模糊,领域越大,越模糊。
图3 的边缘就比 图1 模糊。
也就是说滤波对图像的有去躁和模糊的作用。
参考资料:
https://blog.csdn.net/shu15121856/article/details/76273137
https://blog.csdn.net/qq_38131594/article/details/80758567
https://blog.csdn.net/qinghuaci666/article/details/81737624
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)