0%

opencv_7_图像平滑处理

  • 在尽量保持图像原有信息的情况下,过滤掉图像内部的噪声,这一过程称为对图像的平滑处理,所得到的图像称为平滑图像。

均值滤波

  • 均值滤波是指用当前像素点周围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
2
3
4
5
6
import cv2
from get_show_img import get_show

img = cv2.imread('data/noiseRGB.png')
r = cv2.blur(img, (5,5))
get_show(img, r)

7output_2_0

1
2
3
4
5
6
7
import cv2
from get_show_img import get_show

img = cv2.imread('data/noiseRGB.png')
r5 = cv2.blur(img, (5,5))
r30 = cv2.blur(img, (30, 30))
get_show(img, r, r30)

7output_3_0

卷积核越大,参与到均值运算中的像素就会越多,即当前点计算的是更多点的像素值的平均值。因此,卷积核越大,去噪效果越好,当然花费的计算时间也会越长,同时让图像失真越严重。在实际处理中,要在失真核去噪效果之间取得平衡,选取合适大小的卷积核

方框滤波

  • 在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是领域像素值之和的平均值,还是领域像素之和
  • dst = cv2.boxFilter(src, ddepth, ksize, anchor, normalize, borderType)
  • 式中:
  • dst:是返回值,表示进行方框滤波后得到的处理结果。
  • src:表示需要处理的图像。
  • ddepth:是处理结果图像的深度,一般使用-1表示与原始图像相同。
  • ksize:是滤波核的大小。
  • anchor:锚点。
  • normalize:表示在滤波时是否进行归一化。1:表示进行归一化;0:表示不进行归一化,此时经过滤波得到的值可能超过像素的最大值,从而被截断为最大值,这样就会得到一幅纯白色的图像。
1
2
3
4
5
6
import cv2

img = cv2.imread('data/noiseRGB.png')
r = cv2.boxFilter(img, -1, (5,5))
r1 = cv2.boxFilter(img, -1, (5,5), normalize=0) # 纯白色图像
get_show(img, r, r1)


7output_6_0

将卷积核大小修改为2×2

1
2
3
4
5
6
import cv2

img = cv2.imread('data/noiseRGB.png')
r = cv2.boxFilter(img, -1, (2,2))
r1 = cv2.boxFilter(img, -1, (2,2), normalize=0) # 此时计算的是2×2领域内的像素之和,不一定大于255,故不是纯白色
get_show(img, r, r1)

7output_8_0

高斯滤波

  • 在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算领域内各个像素值不同权重的和。
  • 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
2
3
4
5
import cv2

img = cv2.imread('data/noiseRGB.png')
r = cv2.GaussianBlur(img, (5,5), 0, 0)
get_show(img, r)

7output_10_0

中值滤波

  • 中值滤波与前面介绍的滤波方式不同,不再采用加权求均值的方式计算滤波结果。它用领域内所有像素值的中间值来代替当前像素点的像素值。
  • dst=cv2.medianBulr(src,ksize)
  • 式中:
  • dst:返回值,表示中值滤波处理结果
  • src:表示需要进行中值滤波的图像
  • ksize:表示滤波核大小,必须是比1大的奇数,比如3、5、7等
1
2
3
4
5
import cv2

img = cv2.imread('data/noiseRGB.png')
r = cv2.medianBlur(img, 5)
get_show(img, r)


7output_12_0

双边滤波

  • 双边滤波是综合考虑空间信息和色彩信息的滤波方式,在滤波过程中能够有效地保护图像内的边缘信息
  • 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
2
3
4
5
6
import cv2

img = cv2.imread('data/noiseRGB.png')
r_ = cv2.GaussianBlur(img, (5,5), 0)
r = cv2.bilateralFilter(img, 25, 100, 100)
get_show(r_, r)


7output_14_0

2D卷积

  • 使用特定的卷积核实现卷积操作
  • dst=cv2.filter2D(src, ddepth, kernel, anchor, delta, borderType)
  • 式中:
  • dst:返回值,表示经过2D卷积后得到的处理结果
  • src:是需要处理的图像,即原始图像。它能够有任意数量的通道,并能够对各个通道独立处理。
  • ddepth:是处理结果图像的深度。-1:与当前图像相同深度
  • kernel:是卷积核
  • anchor:锚点,通常使用默认值。
  • delta:是修正值,如果该值存在,会在基础滤波的结果上加上该值作为最终的滤波处理结果,通常使用默认值。
  • borderType:是边界样式,该值决定了以何种情况处理边界,通常使用默认值即可。
1
2
3
4
5
6
7
import cv2
import numpy as np

img = cv2.imread('data/noiseRGB.png')
kernel = np.ones([9,9], np.float32)/81
r = cv2.filter2D(img, -1, kernel)
get_show(img, r)


7output_16_0

-------------本文结束感谢您的阅读-------------