1. 空域滤波:直接在图像像素上进行的邻域操作,用于图像增强、去噪、边缘检测等。
2. 核心思想:通过卷积核(滤波器)与图像局部区域进行数学运算,改变像素值。
3. 常见滤波器及特点
1. 均值滤波(Box Filter)
用邻域像素的平均值替换中心像素。
核越大,模糊效果越强(如3×3、5×5)。
# 对图像进行3x3的方框滤波
box_3x3 = cv2.boxFilter(image_rgb, -1, (3, 3))
# 对图像进行5x5的方框滤波
box_5x5 = cv2.boxFilter(image_rgb, -1, (5, 5))
# 对图像进行7x7的方框滤波
box_7x7 = cv2.boxFilter(image_rgb, -1, (7, 7))
2. 高斯滤波(Gaussian Blur)
加权平均,中心像素权重最高,边缘递减。
保留边缘效果优于均值滤波,适合高斯噪声。
高斯模糊基于高斯函数(正态分布函数)来计算图像中每个像素的权重。
高斯函数是一种钟形曲线,其形状由两个参数控制:均值(μ)和标准差(σ)。
在高斯模糊中,每个像素的权重由其与中心像素的距离决定,距离越近,权重越大。
高斯模糊通过对图像中的每个像素及其邻域像素进行加权平均,得到新的像素值,从而实现图像的平滑。
# 对图像进行高斯模糊处理
gaussian = cv2.GaussianBlur(image_rgb, (5, 5), 0)
3. 中值滤波(Median Filter)
取邻域像素的中值,有效去除椒盐噪声。
非线性滤波,能保护边缘。
4. 最大值/最小值滤波
最大值滤波(膨胀):扩大亮区域,适合去除黑色噪声。
最小值滤波(腐蚀):缩小亮区域,适合去除白色噪声。
# 最大值滤波器
max_filter = cv2.dilate(image_rgb, np.ones((5, 5)))
# 最小值滤波器
min_filter = cv2.erode(image_rgb, np.ones((5, 5)))
# 中值滤波器
median_filter = cv2.medianBlur(image_rgb, 5)
5. 拉普拉斯滤波(Laplacian)
二阶微分算子,突出边缘和细节。
对噪声敏感,常与高斯滤波结合(LoG算子)。
6. Sobel/Roberts算子
Sobel:计算水平和垂直方向的梯度,抗噪性较好。
Roberts:对角梯度检测,对边缘敏感但易受噪声影响。
# 拉普拉斯滤波器
laplacian = cv2.Laplacian(image_rgb, cv2.CV_64F)
# Sobel 滤波器(梯度算子)
sobel_x = cv2.Sobel(image_rgb, cv2.CV_64F, 1, 0, ksize=5)
sobel_y = cv2.Sobel(image_rgb, cv2.CV_64F, 0, 1, ksize=5)
sobel_combined = np.sqrt(sobel_x ** 2 + sobel_y ** 2)
# Roberts 交叉算子
roberts_x = np.array([[1, 0], [0, -1]], dtype=np.float32)
roberts_y = np.array([[0, 1], [-1, 0]], dtype=np.float32)
roberts_combined = cv2.filter2D(image_rgb, -1, roberts_x) + cv2.filter2D(image_rgb, -1, roberts_y)