Wlgls 冲鸭!

第一节:计算机视觉--滤波

2019-10-07

线性滤波

理论

线性滤波就是使用卷积,将卷积核在图像上进行平移,然后依次求卷积,我们将卷积核所覆盖的范围的中心设置为卷积的值。这样就可以得到图像中每一个像素的卷积值,对于图像边缘则可以使用置零或者延伸等等来处理。

2019-10-17-14-02-50.png

opencv实现

cv.filter2D()是opencv提供的一个用于处理卷积的函数 参数:

dst = cv.filter2D(src, ddepth, kernel, anchor, delta, borderType)
  • src: 原图像
  • ddepth: 官方参考, 默认为-1, 即输出图像与原图像深度相同。
  • kernel: 卷积核
  • anchor: 内核的锚点,指示内核中过滤点的相对位置;锚应位于内核中;默认值(-1,-1)表示锚位于内核中心。(我还不知道他有什么用)
  • detal: 在将它们存储在dst中之前,将可选值添加到已过滤的像素中。类似于偏置。
  • borderType: 像素外推法, 也就是我们对一个图像中边缘位置的处理方式。官方文档

高斯滤波

理论

高斯核在滤波中是更好的选择。他是低通滤波器,可以将图像中的噪声很好的去掉,起到图像平滑的作用

一维高斯函数

2019-10-17-14-03-08.png

一般来说,二维高斯函数是:

2019-10-17-14-03-17.png

opencv实现高斯模糊

cv.GaussianBlur()是Opencv提供的一个直接进行高斯模糊的函数

cv.getGaussianKernel()则是Opencv提供进行计算高斯核的函数, 但是他所计算的高斯核,是一个一维高斯核,一般高斯卷积还是使用GaussianBlur()

dst = cv.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)

参数:

  • src: 原图像
  • ksize: 高斯核的尺寸,高斯核的高度和宽度可以不一样,但是必须是正数和奇数
  • sigmaX: x方向上的高斯核标准差
  • sigmaY:y方向上的高斯核标准差, 如果sigmaY为0,则设置为sigmaX, 如果均为0,则有ksize计算得出。
  • borderType: 像素外推法。
dst = cv.getGaussianKernel(ksize, sigma, ktype)

参数:

  • ksize:高斯核尺寸,必须是正数和奇数
  • sigma:高斯核标准偏差
  • ktype: 高斯核类型,可以为CV_32F和CV_64F

阈值处理

dst = cv.threshold(src, thresh, maxval, type)

参数:

  • src:输入图像
  • thresh: 阈值
  • maxval: 最大值
  • type: 类型官方文档 2019-10-17-14-03-38