中值滤波、方框滤波、高斯滤波、均值滤波、膨胀、腐蚀、开运算、闭运算
1.1 常见图像噪声类型
高斯噪声:符合正态分布的随机噪声
椒盐噪声:随机出现的黑白像素点
泊松噪声:光子计数噪声
量化噪声:模拟信号数字化过程中产生
2.1 均值滤波(Averaging Filter)
原理:用邻域像素的平均值替换中心像素值
blur_3x3 = cv2.blur(noisy_img, (3,3)) # 3×3小窗口
效果分析:
窗口越大,去噪效果越强,但图像越模糊
计算速度快,适合实时处理
会模糊边缘和细节
2.2 方框滤波(Box Filter)
原理:均值滤波的通用形式,可选择是否归一化
# 非归一化方框滤波(像素值可能溢出)
box_nonorm = cv2.boxFilter(noisy_img, -1, (3,3), normalize=False)
# 归一化方框滤波
box_norm = cv2.boxFilter(noisy_img, -1, (3,3), normalize=True)
特殊应用:
非归一化滤波可用于局部对比度增强
归一化时与均值滤波效果相同
2.3 高斯滤波(Gaussian Filter)
原理:使用高斯函数作为权重,距离中心越近权重越大
# 不同标准差的高斯滤波
gauss_small = cv2.GaussianBlur(noisy_img, (5,5), 1) # 小标准差
gauss_large = cv2.GaussianBlur(noisy_img, (5,5), 3) # 大标准差
参数选择技巧:
标准差σ与窗口大小关系:ksize ≈ (6σ+1)
σ越大,平滑效果越强,但计算量也越大
2.4 中值滤波(Median Filter)
原理:用邻域像素的中值替换中心像素值
# 中值滤波去噪
median_3 = cv2.medianBlur(sp_noisy, 3)
median_5 = cv2.medianBlur(sp_noisy, 5)
适用场景:
对椒盐噪声效果显著
能较好保持边缘锐利度
计算复杂度高于线性滤波
1、膨胀:
其原理是:将核在原始图像中进行遍历,然后将原始图像遍历到的像素点的值与自定义卷积核(全为1的二维矩阵)得值进行与运算,像素点与对应核一 一对应进行与,当卷积核对应的元素值只要有一个为1时,设置卷积核中心值的像素点为1,如果全为0,,则其值设置为0.
2、腐蚀:
其原理是:将核在原始图像中进行遍历,然后将原始图像遍历到的像素点的值与自定义卷积核(全为1的二维矩阵)得值进行与运算,像素点与对应核一 一对应进行与,当卷积核对应的元素值均为1时,设置卷积核中心值的像素点为1,否则其值设置为0.
3、开运算原理
1)原理:图像开运算是图像依次经过腐蚀、膨胀处理后的过程。
2)特点:图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像
在OpenCV中,同样提供开运算的库函数,函数原型如下所示
1)、函数原型:result =cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
- img:需要进行开运算处理的图像
- cv2.MORPH_OPEN:图像进行开运算需要填写的参数(进行开运算时,该参数为固定参数不可改变)
- kernel:卷积核模板,例如kernel = np.ones((5,5), np.uint8),5x5的卷积核
4、闭运算原理
1)、原理:图像开运算是图像依次经过膨胀、再腐蚀处理后的过程
2)、特点:图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。
- 闭运算可以消除图像轮廓内部的噪声
OpenCV中,也提供了图像闭运算的函数,和开运算库函数一样,唯一不同则为闭运算对应自己的参数,函数原型如下:
1)、函数原型:result =cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
img:需要进行开运算处理的图像
cv2.MORPH_CLOSE:图像进行闭运算需要填写的参数(进行闭运算时,该参数为固定参数不可改变)
kernel:卷积核模板,例如kernel = np.ones((5,5), np.uint8),5x5的卷积核