- 在尽量保持图像原有信息的情况下,过滤掉图像内部的噪声,这一过程称为对图像的平滑处理,所得到的图像称为平滑图像。
均值滤波
均值滤波是指用当前像素点周围N*N个像素值的均值来代替当前像素。使用该方法遍历处理图像内的每一个像素点,即可完成整幅图像的均值滤波。
dst=cv2.blur(src, ksize, anchor, borderType)
式中:
dst:是返回值,表示进行均值滤波后得到的处理结果
src:是指需要处理的图像,即原始图像。它可以有任意数量的通道,并能够对各个通道独立处理。图像深度应该是CV_8U、CV_16U、CV_32F或者CV_64F中的一种。
ksize:是滤波核的大小。滤波核大小是指在均值处理过程中,其邻域图像的高度和宽度。
anchor:是锚点,其默认值为(-1.-1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。
borderType是边界样式。
1 | import cv2 |
1 | import cv2 |
卷积核越大,参与到均值运算中的像素就会越多,即当前点计算的是更多点的像素值的平均值。因此,卷积核越大,去噪效果越好,当然花费的计算时间也会越长,同时让图像失真越严重。在实际处理中,要在失真核去噪效果之间取得平衡,选取合适大小的卷积核
方框滤波
- 在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是领域像素值之和的平均值,还是领域像素之和
- dst = cv2.boxFilter(src, ddepth, ksize, anchor, normalize, borderType)
- 式中:
- dst:是返回值,表示进行方框滤波后得到的处理结果。
- src:表示需要处理的图像。
- ddepth:是处理结果图像的深度,一般使用-1表示与原始图像相同。
- ksize:是滤波核的大小。
- anchor:锚点。
- normalize:表示在滤波时是否进行归一化。1:表示进行归一化;0:表示不进行归一化,此时经过滤波得到的值可能超过像素的最大值,从而被截断为最大值,这样就会得到一幅纯白色的图像。
1 | import cv2 |
将卷积核大小修改为2×2
1 | import cv2 |
高斯滤波
- 在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算领域内各个像素值不同权重的和。
- dst=cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)
- 式中:
- dst:是返回值,表示进行高斯滤波后得到的处理结果
- src:是需要处理的图像,即原始图像。它能够有任意数量的通道,并能够对各个通道独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F或者CV_64F中的一种
- ksize:是滤波核的大小。滤波核大小是指在滤波处理过程中其领域图像的高度和宽度。该值必须为奇数
- sigmaX:是卷积核在水平方向上的标准差,其控制权重比例。
- sigmaY:是卷积核在垂直方向上的标准差。如果该值为0,则只采用sigmaX的值。
- borderType:是边界样式。
1 | import cv2 |
中值滤波
- 中值滤波与前面介绍的滤波方式不同,不再采用加权求均值的方式计算滤波结果。它用领域内所有像素值的中间值来代替当前像素点的像素值。
- dst=cv2.medianBulr(src,ksize)
- 式中:
- dst:返回值,表示中值滤波处理结果
- src:表示需要进行中值滤波的图像
- ksize:表示滤波核大小,必须是比1大的奇数,比如3、5、7等
1 | import cv2 |
双边滤波
- 双边滤波是综合考虑空间信息和色彩信息的滤波方式,在滤波过程中能够有效地保护图像内的边缘信息
- dst=cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)
- 式中:
- dst:是返回值,表示进行双边滤波后得到的处理结果
- src:是需要处理的图像,即原始图像。它能够有任意数量的通道,并能够对各个通道独立处理。
- d:是在滤波时选取的空间距离参数,这里表示以当前像素点为中心的直径。入股偶该值为非正数,则会自动从参数sigmaSpace计算得到。如果滤波空间较大(d>5),则速度较慢。因此,在实时应用中,推荐d=5。对于较大噪声的离线滤波,可以选择d=9。
- sigmaColor:是滤波处理时选取的颜色差值范围,该值决定了周围哪些像素点能够参与到滤波中来。与当前像素点的像素值差值小于 sigmaColor 的像素点,能够参与到当前的滤波中。该值越大,就说明周围有越多的像素点可以参与到运算中。该值为0时,滤波失去意义;该值为255时,指定直径内的所有点都能够参与运算。
- sigmaSpace是坐标空间中的sigma值。它的值越大,说明有越多的点能够参与到滤波计算中来。当d>0时,无论sigmaSpace的值如何,d都指定邻域大小;否则,d与sigmaSpace的值成比例。
- borderType是边界样式,该值决定了以何种方式处理边界。一般情况下,不需要考虑该值,直接采用默认值即可。
- 为了简单起见,可以将两个sigma(sigmaColor和sigmaSpace)值设置为相同的。如果它们的值比较小(例如小于10),滤波的效果将不太明显;如果它们的值较大(例如大于150),则滤波效果会比较明显,会产生卡通效果。
1 | import cv2 |
2D卷积
- 使用特定的卷积核实现卷积操作
- dst=cv2.filter2D(src, ddepth, kernel, anchor, delta, borderType)
- 式中:
- dst:返回值,表示经过2D卷积后得到的处理结果
- src:是需要处理的图像,即原始图像。它能够有任意数量的通道,并能够对各个通道独立处理。
- ddepth:是处理结果图像的深度。-1:与当前图像相同深度
- kernel:是卷积核
- anchor:锚点,通常使用默认值。
- delta:是修正值,如果该值存在,会在基础滤波的结果上加上该值作为最终的滤波处理结果,通常使用默认值。
- borderType:是边界样式,该值决定了以何种情况处理边界,通常使用默认值即可。
1 | import cv2 |