OpenCV笔记15:平滑图像|模糊图像

1、学习目标
如何使用OpenCV平滑图像或模糊图像OpenCV。
学习不同的形态学操作,如2D卷积(图像滤波)和图像模糊(图像平滑),使用平均,高斯模糊,中值模糊,双边滤波等。
2、使用函数方法
2D卷积 : cv.filter2D()
图像模糊:cv .blur()
高斯模糊:cv.GaussianBlur()
中值模糊:cv.medianBlur()
双边滤波:cv.bilateralFilter()
3、程序
在这里插入图片描述
结果
在这里插入图片描述
函数讲解:
(1)2D卷积(图像过滤)
该函数实际上计算相关性,而不是卷积:
在这里插入图片描述

cv2.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) → dst
 参数:
src        - 输入图像。
dst        - 输出与src相同大小和相同通道数的图像。
ddepth     -所需的目标图像深度;ddepth = -1时,输出图像将具有与源相同的深度。
kernel     - 卷积内核(或称相关内核),单通道浮点矩阵; 如果要将不同的内核应用于不同的通道,请使用split()将图像拆分为单独的颜色平面 ,然后单独处理它们。
anchor     - 内核的锚点,指示内核中过滤点的相对位置; 锚应位于内核中; 默认值(-1,-1)表示锚点位于内核中心。
delta      - 在将过滤像素存储在dst中之前添加到过滤像素的可选值。
borderType - 像素外推方法

函数执行过程实例:
5x5平均滤波器内核可以定义如下:
在这里插入图片描述
对于每个像素,5x5窗口以此像素为中心,将落在此窗口内的所有像素相加,然后将结果除以25。
(这相当于计算该窗口内的像素值平均值)
对图像中的所有像素执行该操作以产生输出滤波图像。
(2)
模糊
低通滤波器
目的:降低图像的变化率
方法:将每个像素替换为该像素周围像素的均值,这样可以平滑并替代那些强度变化明显的区域。
滤波器中每个像素的权重是相同的
该函数使用内核平滑图像:
在这里插入图片描述

cv2.blur(src, ksize[, dst[, anchor[, borderType]]]) → dst

src        - 输入图像; 它可以有任意数量的通道,这些通道是独立处理的,
             但深度应该是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。
dst        - 输出与src相同大小和类型的图像。
ksize      - 模糊内核大小。
anchor     - 默认值Point(-1,-1)表示锚点位于内核中心。
borderType - 用于外推图像外部像素的边框模式。

(3)
高斯模糊
目的:对一个像素的周围像素给予更多的重视
方法:用分配权重来重新计算这些周围点的值,可以通过高斯函数的权重方案来解决

像素的权重与其距中心像素的距离成比例

该函数将源图像与指定的高斯内核进行卷积

cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) → dst
src        - 输入图像; 图像可以有任意数量的通道,这些通道是独立处理的,
             但深度应该是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。
dst        - 输出与src相同大小和类型的图像。
ksize      - 高斯内核大小。 ksize.width 和 ksize.height 可以不同,但​​它们都必须是正数和奇数。或者,它们可以为零,然后根据sigma *计算 。
sigmaX     - X方向的高斯核标准偏差。
sigmaY     - Y方向的高斯核标准差; 如果 sigmaY 为零,则将其设置为等于 sigmaX,如果两个sigma均为零,则分别从ksize.width 和 ksize.height计算  ;  sigmaX和sigmaY。
borderType - 像素外推方法

我们应该指定内核的宽度和高度,它应该是正数和奇数。我们还应该分别指定X和Y方向的标准偏差,sigmaX和sigmaY。如果仅指定了sigmaX,则sigmaY等于sigmaX。如果两者都为零,则根据内核大小计算它们。高斯滤波在从图像中去除高斯噪声方面非常有效。
(4)
中值滤波

计算内核窗口下所有像素的中值,并用该中值替换中心像素。
中心元素总是被图像中的某个像素值替换。这有效地降低了噪音。内核大小必须是正奇数。
对于消除椒盐现象很有用
使用带 在这里插入图片描述孔径的中值滤波器平滑图像

cv2.medianBlur(src, ksize[, dst]) → dst
src   - 输入1通道,3通道或4通道图像; 
        当 ksize 为3或5时,图像深度应为CV_8U,CV_16U或CV_32F,
        对于较大的光圈尺寸,它只能是CV_8U。
dst   - 与src具有相同大小和类型的目标数组。
ksize - 孔径线性尺寸; 它必须是奇数且大于1,例如:3,5,7 ......

(5)
双边滤波

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])→ dst
参数:

src         - 源8位或浮点,1通道或3通道图像。
dst         - 与src具有相同大小和类型的目标映像。
d           - 过滤期间使用的每个像素邻域的直径。如果它是非正数,则从sigmaSpace计算。
sigmaColor  - 在颜色空间中过滤sigma。参数的值越大意味着像素邻域内的更远的颜色(参见sigmaSpace)将混合在一起,从而产生更大的半等颜色区域。
sigmaSpace  - 在坐标空间中过滤sigma。较大的参数值意味着只要它们的颜色足够接近,更远的像素就会相互影响 。当d> 0时,无论sigmaSpace如何,它都指定邻域大小。否则,d与sigmaSpace成比例。

Sigma值     :为简单起见,您可以将2 sigma值设置为相同。如果它们很小(<10),过滤器将没有太大的影响,而如果它们很大(> 150),它们将具有非常强烈的效果,使图像看起来“卡通”​​。

滤波器大小   :大滤波器(d> 5)非常慢,因此建议对实时应用使用d = 5,对于需要大量噪声滤波的离线应用,可能需要d = 9。

bilateralFilter可以很好地减少不需要的噪声,同时保持边缘相当清晰。但是,与大多数过滤器相比,它非常慢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值