本节介绍高斯滤波及中值滤波的基本原理及函数的使用。

高斯滤波

在进行均值滤波和方框滤波时,其领域内每个像素的权重是相等的。在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算领域内各个像素值不同权重的和。

基本原理

以一个3X3的卷积核为例,假设他的卷积核为下图所示的数值:

3X3卷积核

那么,滤波后的图像:

滤波原理

可以看下面这个例子,来更好地了解高斯滤波:

高斯滤波的例子

高斯滤波的卷积核有这几个注意点:

  • 高斯滤波中,卷积核可以是3x3、5X5或是3X5、5X7等大小,核的宽度和高度可以不相同,但是必须是奇数
  • 每一种尺寸的卷积核都可以有多种不同形式的权重比例
  • 实际计算中,卷积核是归一化处理的

函数使用

OpenCV中,实现高斯滤波的函数是cv2.GaussianBlur()

dst = cv2.GaussianBlur( src, ksize, sigmaX, sigmaY, borderType )
  • ksize表示滤波核的大小。值一定要为奇数。
  • sigmaX是卷积核在水平方向上的标准差,控制的是权重比例。
  • sigmaY是卷积核在数值方向上的标准差。
  • 如果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

官方文档建议指定ksize、sigmaX、sigmaY三个参数的值,以避免将来函数修改后可能造成的语法错误。

常用的形式为:

dst = cv2.GaussianBlur(src, ksize, 0, 0)

程序实例

例:对噪声图像高斯滤波,查看效果。

import cv2
img = cv2.imread('noiseIMG.png')
dealimg1 = cv2.GaussianBlur(img,  (5, 5), 0, 0)
cv2.imshow('IMG', img)
cv2.imshow('BOX1', dealimg1)
cv2.waitKey()

高斯滤波结果

中值滤波

中值滤波与前面介绍的滤波方式不同。不再采用加权求平均值的方式计算滤波。而是用领域内所有像素值的中间值来替代当前像素点的像素值。

基本原理

有一个如图所示的像素点。

像素值示例

现在对中间的像素点44进行操作:

对周围进行排序:【3,12,34,42,43,44,45,87,112】,这组数的周围就是43,于是把43放到红色的地方:

中值滤波后的结果

函数使用

函数为cv2.medianBlur()。用法为:

dst = cv2.medianBlur( src, ksize )
  • dst 表示返回值,表示进行均值滤波后的处理结果
  • src 是原始图像,它可以是任意数量的通道,并能对各个通道独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F或者CV_64F中的一种
  • ksize是滤波核的大小。必须是大于1的奇数,可以是3,5,7等

程序示例

针对噪声图像,对其进行中值滤波。

import cv2
img = cv2.imread('noiseIMG.png')
dealimg1 = cv2.medianBlur(img, 3)
cv2.imshow('IMG', img)
cv2.imshow('BOX1', dealimg1)
cv2.waitKey()

滤波效果


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/OpenCV23.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 06 月 15 日
如果觉得我的文章对你有用,请随意赞赏