1.概念介绍

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

2.基本原理

 如图2-1,我们对第5行第5列的像素点进行均值滤波时,首先需要考虑需要对周围多少个像素点去取平均值。通常情况下,我们会以该当前像素为中心,对行数和列数相等的一块区域内的所有像素点的像素取平均值
 例如,我们可以以当前像素点的像素周围3x3区域内所有像素点的像素取平均值,也可以对周围5x5区域内所有像素点的像素值取平均值。

图2-1  一幅图像的像素值示例

 当前像素点的位置为第5行第5列时,我们对其周围5*5区域内的像素值取平均,计算方法如下:
像素点新值=
[(197+25+106+156+159)
(149+40+107+5+71)+
(163+198+226+223+156) +
(222+37+68+193+157)+
(42+72+250+41+75)]/25 = 126

计算得到新值以后,我们将新值作为当前像素点均值滤波后的像素值。我们针对图2-1的每一个像素点计算其周围5x5区域内的像素值均值,并将其作为当前像素点的新值,即可得到当前图像的均值滤波结果。

然而图像的边界并不存在5x5的领域区域。如图2-1的左上角第1行第1列上的像素点,其像素值为23。如果以其为中心点取周围5x5领域,则5x5领域的部分区域位于图像外部。但是图像外部是没有像素点和像素值的,显然是无法计算该点的领域均值的。

因此,针对边缘的像素点,可以只取图像内存在的周围领域点的像素值均值。如图2-2所示,计算左上角的均值滤波结果时,仅取图中灰色背景的33领域内的像素值的平均值。计算方法如下:
像素点新值=
[(23+158+140)+
(238+0+67)+
(199+197+25)]/9
=116

图2-2  边界点的处理

 除此之外,我们还可以扩展当前图像的周围像素点。例如,可以将当前97大小的图像扩展为13*11大小的图像,如图2-3所示。

图2-3  扩展边缘

 在完成图像边缘拓展后,我们可以在新增的行列内填充不同的像素值。在此基础上,再针对9x7的原始图像计算其5x5领域内像素点的像素值均值。OpenCV提供了多种边界处理方式,我们可以根据实际需要选用不同的边界处理模式。

 针对第5行第5列的像素点,其运算过程相当于一个额内部值是1/25的55矩阵进行相乘运算,从而得到均值滤波的结果为126。如图2-4所示。

图2-4  针对第 5 行第 5 列像素点均值滤波的运算示意图

根据上述运算,针对每一个像素点,都是与一个内部值均为1/25的55举证相乘,得到均值滤波的计算结果。示意图如图2-4所示

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

将使用到的5x5矩阵一般化,可以得到如下图2-5的结果。

图2-5  将矩阵一般化

在Opencv中,将图1-5右侧的矩阵称为卷积核,其一般形式如下图2-6所示。其中M和N分别对应高度和宽度,一般情况下M和N的值是相等的,常用的3x3、5x5和7x7。如果M和N的值越大,参与运算的值就越大,参与运算的像素点的数量就越多,图像失真就越严重

图2-6  卷积核

3.函数语法

在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:边界样式,该值决定了以何种方式处理边界,其值如下表所示。一般情况下不需要考虑该值的取值,直接采用默认值即可。

类型 说明
cv2.BORDER_CONSTANT iiiiii abcdefgh iiiiiii,特定值 i
cv2.BORDER_REPLICATE aaaaaa abcdefgh hhhhhhh
cv2.BORDER_REFLECT fedcba abcdefgh hgfedcb
cv2.BORDER_WRAP cdefgh abcdefgh abcdefg
cv2.BORDER_REFLECT_101 gfedcb abcdefgh gfedcba
cv2.BORDER_TRANSPARENT uvwxyz absdefgh ijklmno
cv2.BORDER_REFLECT101 与 BORDER_REFLECT_101 相同
cv2.BORDER_DEFAULT 与 BORDER_REFLECT_101 相同
cv2.BORDER_ISOLATED 不考虑 ROI(Region of Interest,感兴趣区域)以外的区域

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

4.程序示例

读取一幅噪声图像,使用函数 cv2.blur()对图像使用三种不同大小的卷积核进行均值滤波处理,得到去噪图像,并显示原始图像和去噪图像。

import cv2
Gn=cv2.imread("Gaussian_noise.jpg")
Mf_a=cv2.blur(Gn,(2,2))
Mf_b=cv2.blur(Gn,(5,5))
Mf_c=cv2.blur(Gn,(10,10))
cv2.imshow("噪声图像",Gn)
cv2.imshow("使用2×2的卷积核进行均值滤波",Mf_a)
cv2.imshow("使用5×5的卷积核进行均值滤波",Mf_b)
cv2.imshow("使用10×10的卷积核进行均值滤波",Mf_c)
cv2.waitKey()
cv2.destroyAllWindows()

运行上述程序会分别显示噪声图像和使用不同卷积核进行均值滤波的去噪图像

图4-1  噪声图像


图4-2  使用2x2的卷积核进行均值滤波的图像


图4-3  使用5x5的卷积核进行均值滤波的图像


图4-4  使用10x10的卷积核进行均值滤波的图像


图4-5  不含噪声的原始图像

从使用不同大小的卷积核进行均值滤波处理图像可以发现:卷积核越大,图像的失真情况越明显

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

均值滤波(Mean filtering)相关推荐

  1. 图像处理:均值滤波算法

    目录 前言 概念介绍 基本原理 Opencv实现均值滤波 Python手写实现均值滤波 参考文章 前言 在此之前,我曾在此篇中推导过图像处理:推导五种滤波算法(均值.中值.高斯.双边.引导).这在此基 ...

  2. 中值滤波Median filtering

    背景简述 在概率论中,中值将概率分布的高半部分与低半部分分开,对一个随机变量x 而言,x < M 的概率为0.5.对于有限实数集,其排序后中间的数值即为它的中值.集合的大小通常取奇数,以保证中值 ...

  3. 详解非局部均值滤波原理以及用MATLAB源码实现

    详解非局部均值滤波原理以及用MATLAB源码实现 序言 均值滤波.中值滤波.高斯滤波在滤除噪声的过程中,无可避免的使图像的边缘细节和纹理信息所被滤除.针对此问题,Buades[1]等人提出了非局部均值 ...

  4. 谐波均值滤波matlab,谐波均值滤波器.PPT

    谐波均值滤波器 数字图像处理Digital Image Processing 第6章 图像复原(Image Restoration) 第6章 图像复原(Image Restoration) 6.1 F ...

  5. 中值滤波,均值滤波,高斯滤波,双边滤波,联合双边滤波介绍

    看GAMES202相关课程发现闫老师讲的太好了,所以记录一下.当然文中涉及的PPT也来自闫老师的课程PPT,欢迎交流. 首先这几种都是空域的滤波方式,用于抑制图像中的噪声.它们采用的原理基本都是通过滤 ...

  6. C++手敲灰度图均值滤波中值滤波高斯滤波

    一.均值滤波(Meaning Filtering)概念 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板 ...

  7. 非线性邻域滤波(NNFs)在MR-FBP图像重建算法中的应用(基于astra-toolbox开发, 实现双边滤波,非局部均值滤波(NLM)的惩戒项的改进,并进行MAE,MAR分析)

    本科荒废了两年,大三终于开始好好学习了,,,,但是跟无头苍蝇,只知道上课,大四即将找工作,心理慌得一批,由于自己太辣鸡,,,只能找到3,4000的,,,终于还是决定步入研究生大抗,,,上了后发现他娘的 ...

  8. 移动均值滤波和线性回归滤波 MATLAB数据处理1

    1.移动均值滤波 Moving Average Filtering 移动平均滤波器通过用范围内定义的相邻数据点的平均值替换每个数据点来平滑数据.该过程等效于低通滤波,其平滑响应由差分方程给出 其中是第 ...

  9. matlab mean 滤波,中值和均值滤波---matlab实现(Median and mean filter ---matlab implementation).doc...

    中值和均值滤波---matlab实现(Median and mean filter ---matlab implementation) 中值和均值滤波---matlab实现(Median and me ...

最新文章

  1. 推荐一个 开源C#股票软件
  2. oracle 字符集 AL32UTF8、UTF8
  3. 使用soundcard在Python中操作声卡
  4. sql怎么实现取当前数据以及累计7天数据_年薪60万+大佬吐血整理字节跳动大数据面试真题...
  5. 命令行下从bak文件恢复sqlserver数据库方法
  6. win7下安装memcached出现failed to install service or service already installed解决办法
  7. 今年你参与开源了吗?
  8. java 父类this_java父类方法中使用this,可以把this强转为子类对象,然后调用子类的实例方法,怎么解释?...
  9. SpringBoot配置文件映射到JavaBean
  10. 豆丁 道客巴巴 千图网 千库网 包图网 我图网 摄图网 巧办网 万方设计 中国知网 VIP会员一个月开通方法,十网通用
  11. ERROR2002(HY000):CantconnecttolocalMySQLserverthroughsocket/tmp/mys
  12. 设置WDS桥接成功,上不了网怎么办?路由器WDS无线桥接设置正确方法
  13. Android 官方文档学习笔记(1):Androiid以及相关应用组件概念
  14. GTX1050和GTX1050Ti哪个值得买?
  15. 关于码距、检错、纠错
  16. BZOJ 1778 Usaco2010 驱逐猪猡
  17. 入过滤(Ingress Filtering)
  18. Spring容器生命周期--Lifecycle
  19. Android集成微信支付功能
  20. Voronoi图与路径规划

热门文章

  1. python去除常见标点符合以及空格
  2. mule standalone download
  3. JavaScript动画库:Anime.js
  4. 电脑连不上自己家wifi,怎么办?
  5. 03、supervisor
  6. 40、【backtrader股票策略】做A股时,波动率越低的股票越能带来更高的收益吗?
  7. abaqus形状记忆聚合物结构的热-力学有限元
  8. 论文与应用简介:用深度学习设计新的Pokémon角色?(像素风格)
  9. 山西高企认定中对科研人员的要求【企策通】
  10. 电路板上电源和地短路,电压一定会被拉到0v吗?