均值滤波
定义:
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即包括目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
特点:
在图像去噪的同时不能很好的保留细节,会使图像明显变模糊。不适用于椒盐噪声。
代码:
# 均值滤波
img_mean = cv2.blur(img, (25,25))
中值滤波
定义:
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.
特点:
中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。此外,中值滤波的算法比较简单,也易于用硬件实现。
代码:
# 中值滤波
img_median = cv2.medianBlur(img, 25)
双边滤波
定义:
双边滤波(Bilateral filter)是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保边去噪的目的。
特点:
保护高频细节,可以很好的保留边缘,多用于人脸的磨皮。
代码:
# 双边滤波
img_bilater = cv2.bilateralFilter(img,59,95,95)
高斯滤波
定义:
通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
特点:
适用于高斯噪声。它的平滑效果更柔和,而且边缘保留的也更好。
代码:
# 高斯滤波
img_Gaussian = cv2.GaussianBlur(img,(15,15),5)
若对于一幅图片进行四种滤波的对比:
整体代码为:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('2.png')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 均值滤波
img_mean = cv2.blur(img, (25,25))
# 高斯滤波
img_Gaussian = cv2.GaussianBlur(img,(15,15),5)
# 中值滤波
img_median = cv2.medianBlur(img, 25)
# 双边滤波
img_bilater = cv2.bilateralFilter(img,59,95,95)
cv2.imshow("Oirignal Trawing",img)
cv2.imshow("blur",img_mean)
cv2.imshow("GaussianBlur",img_Gaussian)
cv2.imshow("medianBlur",img_median)
cv2.imshow("bilateralFilter",img_bilater)
cv2.waitKey(0)
cv2.destroyAllWindows()