中值滤波

Posted wancy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中值滤波相关的知识,希望对你有一定的参考价值。

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

  

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

 

怎样用MATLAB实现中值和均值滤波

中值滤波楼上答了,5*5的均值滤波代码 w2=fspecial('average',[5 5]); %% 先定义一个滤波器 h=imfilter(a,w2,'replicate'); %%让图像通过滤波器 imshow(h); imwrite(h,'8.jpg');
均值滤波是
I=medfilt2(a,[3 3],'symmetric')
可以在matlab中查询medfilt函数的用法,本例是使用3*3的滤波器采用镜像边界法做均值滤波。
参考技术A 5*5的均值滤波代码 w2=fspecial('average',[5 5]); %% 先定义一个滤波器 h=imfilter(a,w2,'replicate'); %%让图像通过滤波器 imshow(h); imwrite(h,'8.jpg'); 中值的暂时还不会本回答被提问者和网友采纳

以上是关于中值滤波的主要内容,如果未能解决你的问题,请参考以下文章

怎样用MATLAB实现中值和均值滤波

opencv-11-中值滤波及自适应中值滤波

中值滤波与图像锐化

中值滤波

非线性滤波:中值滤波;双边滤波

中值滤波与图像锐化