中值滤波
1. 中值滤波
中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声。在图像处理中,在进行如边缘检测这样的进一步处理之前,通常需要首先进行一定程度的降噪。中值滤波是图像处理中的一个常用步骤,它对于斑点噪声(speckle noise)和椒盐噪声(salt-and-pepper noise)来说尤其有用。保存边缘的特性使它在不希望出现边缘模糊的场合也很有用。
2. 思路
数字图像中的变换后(右图)的某点的像素字值用原图(左图)周围的8个像素值中的中位值代替。如图(变换后的最中间的像素就应该为中位数值16代替):
当数字图像出现椒盐噪声时,可以对原图像的每个像素点做中值滤波,往往可以去除噪声点的效果。
3. python代码实现
import cv2 import numpy as np """
cv2.imread有两个参数,一个是filename,另一个是flag
filename:需要打开图片的路径,可以是绝对路径或者相对路径,路径中不能出现中文。 flag:图像的通道和色彩信息(默认值为1)。 cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。 cv2.IMREAD_GRAYSCALE:以灰度模式读取图片。 cv2.IMREAD_UNCHANGED:读取原始数据,不进行缩放或转换。 """
des_img = cv2.imread('flower.jpg', 1) # # 中值滤波 ksize=5 img_median = cv2.medianBlur(des_img, 5) cv2.imshow('img',np.hstack((des_img,img_median))) cv2.waitKey(0) cv2.destroyWindow()
注意,对于彩色图而言,cv2中的中值滤波是将每个通道单独提取出来中值滤波,再堆叠成三通道彩色图。
小结: 使用中值滤波去除噪声点的同时,图像细节也会稍微模糊,但是对边缘模糊保护的较好。除了中值滤波之外,还有其他滤波算法。注意opencv使用的是BGR顺序通道的图片,若使用cv2读取,使用matplotlib显示图片 则需要注意转换通道。否则可能出现下面这种情况。另外,中值滤波是一种非线性变换,可能会破坏像素点的线性关系,不适用点线细节较多的图像。
(转换的话使用cv2.cvtColor(img_median,cv2.COLOR_BGR2RGB或者使用b,g,r = cv2.split(img);img = cv2.merge((r,g,b))。
参考资料:
https://blog.csdn.net/lixiao0314/article/details/120948652
https://baike.baidu.com/item/%E4%B8%AD%E5%80%BC%E6%BB%A4%E6%B3%A2%E5%99%A8/7182724?fr=aladdin
若存在错误或不足之处,欢迎指正与评论!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)