中值滤波

发布时间 2023-06-10 20:54:24作者: wancy

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()

小结: 使用中值滤波去除噪声点的同时,图像也会稍微模糊。除了中值滤波之外,还有其他滤波算法。注意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

  

  若存在错误或不足之处,欢迎指正与评论!