第7章 图像平滑处理-- 均值滤波,方框滤波,高斯滤波,中值滤波,双边滤波,2D卷积

《OpenCV 轻松入门 面向Python》 学习笔记

图像平滑处理

      • 1. 均值滤波 cv2.blur()
      • 2. 方框滤波 cv2.boxFilter()
      • 3. 高斯滤波 cv2.GaussianBlur()
      • 4. 中值滤波 cv2.medianBlur()
      • 5. 双边滤波 cv2.bilateralFiter()
      • 6. 2D卷积 cv2.filter2D()

以下所有方法,可处理多通道图像,处理方式为 各个通道独立处理。

1. 均值滤波 cv2.blur()

核size越大,图像失真越严重。

函数原型:

dst_img = cv2.blur(src_img, size, anchor, borderType)

参数:

  • dst_img:滤波后得到的结果图像
  • src_img:原始图像
  • size:滤波核的大小(邻域区域大小),可以有任意通道数量,并能对各个通道独立处理。例如,参数值为(3, 3) 或者 (5, 5)
  • anchor:锚点, 默认值为(-1, -1),表示当前计算均值的点位于核的中心点位置。
  • borderType:边界样式,该值确定了以何种方式处理边界

通常情况下, 使用均值滤波函数时, 对于锚点(anchor)和 边界样式(borderType),直接采用其默认值即可。因此函数cv2.blur()的一般形式为:dst_img = cv2.blur(src_img, size)


2. 方框滤波 cv2.boxFilter()

方框滤波,可以自由选择是否对均值滤波的结果进行归一化。

  • 进行归一化,像素点的结果像素值是邻域像素值之和的平均值。效果和 cv2.blur() 均值滤波一样
  • 不进行归一化,像素点的结果像素值是邻域像素值之和。

函数原型:

dst_img = cv2.boxFilter(src_img, ddepth, ksize, anchor, normalize, borderType)

参数:

  • dst_img:滤波后得到的结果图像
  • src_img:原始图像
  • ddepth:结果图像的图像深度,默认值为-1, 表示输出图像与原始图像有相同的图像深度。
  • ksize:滤波核的大小(邻域区域大小),可以有任意通道数量,并能对各个通道独立处理。例如,参数值为(3, 3) 或者 (5, 5),表示所选邻域图像的高度和宽度。
  • anchor:锚点, 默认值为(-1, -1),表示当前计算均值的点位于核的中心点位置。
  • normalize:表示在滤波时是否进行归一化。值为1(默认),代表需要进行归一化,像素点的结果像素值是邻域像素值之和的平均值,效果和 cv2.blur() 均值滤波一样;值为0,代表不需要进行归一化,像素点的结果像素值是邻域像素值之和。
  • borderType:边界样式,该值确定了以何种方式处理边界

当normalize =0时,因为不进行归一化处理,因此滤波得到的值很可能超过当前像素值范围的最大值,从而被截断为最大值。这样就会得到一幅纯白色的图像。


3. 高斯滤波 cv2.GaussianBlur()

函数原型:

dst_img = cv2.GaussianBlur(src_img, ksize, sigmaX, sigmaY, borderType)

参数:

  • dst_img:滤波后得到的结果图像
  • src_img:原始图像
  • ksize:滤波核的大小(邻域区域大小),可以有任意通道数量,并能对各个通道独立处理。例如,参数值为(3, 3) 或者 (5, 5),表示所选邻域图像的高度和宽度。
  • sigmaX:卷积核在水平方向上(X 轴方向)的标准差,其控制的是权重比例。
  • sigmaY:卷积核在垂直方向上(Y 轴方向)的标准差,如果将改值设为0,则只采用sigmaX的值。如果sigmaX,sigmaY的值都为0,则通过ksize.width和 ksize.height计算得到。
    • sigmaX = 0.3 x [(ksize.width - 1) x 0.5 -1 ] +0.8
    • sigmaY = 0.3 x [(ksize.height - 1) x 0.5 -1 ] +0.8
      sigmaX 是必选参数,sigmaY是可选参数
  • borderType:边界样式,该值确定了以何种方式处理边界

4. 中值滤波 cv2.medianBlur()

用邻域内所有像素值的中间值来替代当前像素点的像素值。

函数原型:

dst_img = cv2.medianBlur(src_img, ksize)

参数:

  • dst_img:滤波后得到的结果图像
  • src_img:原始图像
  • ksize:滤波核大小

5. 双边滤波 cv2.bilateralFiter()

与当前点色彩相近的像素点(颜色接近的像素点),会被给予较大的权重;与当前点色彩差别较大的像素点(颜色相差较大的像素点),会被给予较小的权重。这样就保护了边缘信息。

函数原型:

dst_img = cv2.bilateralFiter(src_img, d, sigmaColor, sigmaSpace, borderType)

参数:

  • dst_img:滤波后得到的结果图像
  • src_img:原始图像
  • d:滤波时选取的空间距离参数,这里表示以当前像素点为中心点的直径。如果该值为非正数,则会自动从参数sigmaSpace计算得到。实际应用中,推荐d=5,对于噪声较大的离线滤波,可以选择d=9。
  • sigmaColor:滤波处理时选取的颜色差值范围,改值决定了周围哪些像素点能够参与到滤波中来。该值越大就说明周围有越多的像素可以参与到运算中来。
  • sigmaSpace:坐标空间中的sigma值。它的值越大,说明有越多的值可以参与到计算中来。,当d>0时,无论sigmaSpace的值如何,d都指定邻域大小;否则,d 与 sigmaSpace的值成正比。
  • borderType:边界样式,该值确定了以何种方式处理边界

6. 2D卷积 cv2.filter2D()

用户自定义卷积核进行卷积操作

函数原型:

dst_img = cv2.filter2D(src_img, ddpeth, kernel, anchor, delta, borderType)

参数:

  • dst_img:滤波后得到的结果图像
  • src_img:原始图像
  • ddpeth:结果图像的图像深度,默认值为-1, 表示输出图像与原始图像有相同的图像深度。
  • kernel:卷积核,是一个单通道的数组。如果想在处理彩色图像时,让每个通道使用不同的核,必须将彩色图像分解后,使用不同核完成操作
  • anchor:锚点, 默认值为(-1, -1),表示当前计算均值的点位于核的中心点位置。
  • delta:修正值,它是可选项,如果该值存在,会在滤波结果上加上该值作为结果图像。
  • borderType:边界样式,该值确定了以何种方式处理边界

通常情况下,只指定 src_img, ddpeth, kernel 三个参数,其余的参数使用默认值:

dst_img = cv2.filter2D(src_img, ddpeth, kernel)

你可能感兴趣的:(OpenCV,python,计算机视觉,opencv,深度学习)