中值滤波原理
中值滤波属于非线性平滑滤波。
中值为一组数x1, x2, …, xn ,把n个数按值的大小顺序排列如下:
中值y
噪声的出现,使被处理点像素比周围像素亮(暗)许多。
以被处理点为中心,选取一个邻域窗口,窗口内所有点值排序,取中值代替该点值。
例如:
代码实现
import cv2
lena_noise = cv2.imread("lenaNoise.png")
res1 = cv2.medianBlur(lena_noise, 11) # 核大小10*10
res2 = cv2.medianBlur(lena_noise, 3) # 核大小3*3
cv2.imshow("lena_noise", lena_noise)
cv2.imshow("lena_medianBlur_r10", res1)
cv2.imshow("lena_medianBlur_r3", res2)
cv2.waitKey()
cv2.destroyAllWindows
运行结果:
原图 中值滤波核大小为11
中值滤波核大小为3
可以看出,中值滤波对椒盐噪声的处理效果很好,但是核大小不易设置过大,否则容易造成图片失真。
参考文献:[1]蔡利梅,王利娟. 数字图像处理使用MATLAB分析与实现[M]. 北京:清华大学出版社,2019.