美文网首页
均值滤波

均值滤波

作者: 大龙10 | 来源:发表于2021-10-16 18:31 被阅读0次

《OpenCV轻松入门:面向Python》读书笔记
作者:李立宗
出版社:电子工业出版社
出版时间:2019-05

第7章 图像平滑处理

7.1 均值滤波

  均值滤波是指用当前像素点周围N·N个像素值的均值来代替当前像素值。使用该方法遍历处理图像内的每一个像素点,即可完成整幅图像的均值滤波。

7.1.1 基本原理

例如,希望对图7-7中位于第5行第5列的像素点进行均值滤波。

图7-7 一幅图像的像素值示例
在进行均值滤波时,首先要考虑需要对周围多少个像素点取平均值。通常情况下,我们会以当前像素点为中心,对行数和列数相等的一块区域内的所有像素点的像素值求平均。例如,在图7-7中,可以以当前像素点为中心,对周围3×3区域内所有像素点的像素值求平均,也可以对周围5×5区域内所有像素点的像素值求平均。
  当前像素点的位置为第5行第5列,我们对其周围5×5区域内的像素值求平均,计算方法为:

计算完成后得到126,我们将126作为当前像素点均值滤波后的像素值。我们针对图7-7中的每一个像素点计算其周围5×5区域内的像素值均值,并将其作为当前像素点的新值,即可得到当前图像的均值滤波结果。
  当然,图像的边界点并不存在5×5邻域区域。例如,左上角第1行第1列上的像素点,其像素值为23,如果以其为中心点取周围5×5邻域,则5×5邻域中的部分区域位于图像外部。图像外部是没有像素点和像素值的,显然是无法计算该点的5×5邻域均值的。
  针对边缘像素点,可以只取图像内存在的周围邻域点的像素值均值。如图7-8所示,计算左上角的均值滤波结果时,仅取图中灰色背景的3×3邻域内的像素值的平均值。
图7-8 边界点的处理
  在图7-8中,对于左上角(第1行第1列)的像素点,我们取第13列与第13行交汇处所包含的3×3邻域内的像素点的像素值均值。因此,当前像素点的均值滤波计算方法为:

计算完成后得到116,将该值作为该点的滤波结果即可。
  除此以外,还可以扩展当前图像的周围像素点。例如,将当前9×7大小的图像扩展为13×11大小的图像,如图7-9所示。
图7-9 扩展边缘
完成图像边缘扩展后,可以在新增的行列内填充不同的像素值。在此基础上,再针对9×7的原始图像计算其5×5邻域内像素点的像素值均值。OpenCV提供了多种边界处理方式,我们可以根据实际需要选用不同的边界处理模式。
  针对图像中第5行第5列的像素点,其运算过程相当于与一个内部值都是1/25的5×5矩阵进行相乘计算,从而得到均值滤波的结果126,其对应的关系如图7-10所示。
图7-10 针对第5行第5列像素点均值滤波的运算示意图

根据上述运算,针对每一个像素点,都是与一个内部值均为1/25的5×5矩阵相乘,得到均值滤波的计算结果,如图7-11所示。


图7-11 针对每一个像素点均值滤波的运算示意图

将使用的5×5矩阵一般化,可以得到如图7-12所示的结果。


图7-12 将矩阵一般化
在OpenCV中,图7-12右侧的矩阵被称为卷积核,其一般形式为:

式中,M和N分别对应高度和宽度。一般情况下,M和N是相等的,例如比较常用的3×3、5×5、7×7等。如果M和N的值越大,参与运算的像素点数量就越多,图像失真越严重。

7.1.2 函数语法

在OpenCV中,实现均值滤波的函数是cv2.blur(),其语法格式为:

dst=cv2.blur(src ,ksize, anchor, borderType)

式中:

  • dst是返回值,表示进行均值滤波后得到的处理结果。
  • src是需要处理的图像,即原始图像。它可以有任意数量的通道,并能对各个通道独立处理。图像深度应该是CV_8U、CV_16U、CV_16S、CV_32F或者CV_64F中的一种。
  • ksize是滤波核的大小。滤波核大小是指在均值处理过程中,其邻域图像的高度和宽度。
    例如,其值可以为(5, 5),表示以5×5大小的邻域均值作为图像均值滤波处理的结果
  • anchor是锚点,其默认值是(-1, -1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。
  • borderType是边界样式,该值决定了以何种方式处理边界,其值如表7-1所示。一般情况下不需要考虑该值的取值,直接采用默认值即可。
表7-1 borderType值

通常情况下,使用均值滤波函数时,对于锚点anchor和边界样式borderType,直接采用其默认值即可。

7.1.3 程序示例

【例7.2】针对噪声图像,使用不同大小的卷积核对其进行均值滤波,并显示均值滤波的情况。

import cv2
o=cv2.imread("image\\lenaNoise.png")
r5=cv2.blur(o,(5,5))      
r30=cv2.blur(o,(30,30))      
cv2.imshow("original",o)
cv2.imshow("result5",r5)
cv2.imshow("result30",r30)
cv2.waitKey()
cv2.destroyAllWindows()
图7-14 不同大小卷积核的均值滤波结果

  从图中可以看出,使用5×5的卷积核进行滤波处理时,图像的失真不明显;而使用30×30的卷积核进行滤波处理时,图像的失真情况较明显。
  卷积核越大,参与到均值运算中的像素就会越多,即当前点计算的是更多点的像素值的平均值。因此,卷积核越大,去噪效果越好,当然花费的计算时间也会越长,同时让图像失真越严重。在实际处理中,要在失真和去噪效果之间取得平衡,选取合适大小的卷积核。

相关文章

  • opencv python版-lesson 16

    均值滤波,高斯滤波,双边滤波

  • 7.2 方框滤波

    OpenCV还提供了方框滤波方式,与均值滤波的不同在于,方框滤波不会计算像素均值,在均值滤波中,滤波结果的像素值是...

  • 55. 高斯均值滤波

    本文使用高斯滤波api和均值滤波的源码实现图像滤波 高斯滤波: 结果如下: 均值滤波: 实现步骤: 读取原图片 指...

  • 10高斯均值滤波

    高斯滤波_模块去噪声 均值滤波_源码

  • OpenCV For iOS(六)方框、均值、高斯、中值、双边滤

    本节主要记录OpenCV 两类五种常见的滤波方式: 线性滤波:方框滤波、均值滤波、高斯滤波非线性滤波: 中值滤波、...

  • 均值滤波

    均值滤波使用像素点周围一定区域的像素的均值替换当前像素点的值。均值滤波可以平滑图像,但是对噪声几乎没有效果,最多只...

  • 均值滤波

    《OpenCV轻松入门:面向Python》读书笔记作者:李立宗出版社:电子工业出版社出版时间:2019-05 第7...

  • 7.6 2D卷积

    OpencV提供了多种滤波方式,来实现平滑图像的效果,例如均值滤波、方框滤波、高斯滤波、中值滤波等,大多数滤波方式...

  • 高斯滤波

    高斯滤波和均值滤波的原理一样,不过在均值滤波中像素点的权重都一样,而在高斯滤波中越靠近中心的像素点的权重越大,具体...

  • 009-Opencv笔记-高斯双边模糊-矩阵掩膜

    中值滤波 中值滤波对椒盐噪声有很好的抑制作用 均值模糊无法克服边缘像素信息丢失缺陷。原因是均值滤波是基于平均权重 ...

网友评论

      本文标题:均值滤波

      本文链接:https://www.haomeiwen.com/subject/tssxoltx.html