【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
目录
- 平滑(模糊)处理
- 图像滤波与滤波器
- 区分滤波和模糊
- 邻域算子与线性邻域滤波
1. 平滑(模糊)处理
- 平滑处理(smoothing)也称 模糊处理(bluring),是一项简单且使用频率很高的图像处理方法。
- 平滑处理的用途有很多,最常见的是用来 减少图像上的噪点或者失真。
- 在涉及到 降低图像分辨率 时,平滑处理是非常好用的方法。
2. 图像滤波与滤波器
2.1. 图像滤波
首先我们看一下图像滤波的概念。
图像滤波,即在 尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像 预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。
消除图像中的噪声成分叫作 图像的平滑化或滤波操作。
信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没。因此一个能降低高频成分幅度的滤波器就能够减弱噪声的影响。
图像滤波的目的有两个:
- 抽出对象的特征作为图像识别的特征模式;
- 为适应图像处理的要求,消除图像数字化时所混入的噪声。
而对滤波处理的要求也有两条:
- 一是不能损坏图像的轮廓及边缘等重要信息;
- 二是使图像清晰视觉效果好。
平滑滤波是 低频增强 的 空间域 滤波技术。目的有两类:
- 一类是模糊;
- 另一类是消除噪音。
空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平均亮度值。
邻域的大小与平滑的效果直接相关,邻域越大平滑的效果越好,但邻域过大,平滑会使边缘信息损失的越大,从而使输出的图像变得模糊,因此需合理选择邻域的大小。
2.2. 滤波器
关于滤波器,一种形象的比喻法是:
我们可以把滤波器想象成一个包含加权系数的窗口,当使用这个滤波器平滑处理图像时,就把这个窗口放到图像之上,透过这个窗口来看我们得到的图像。
滤波器的种类有很多, 在新版本的OpenCV中,提供了如下五种常用的图像平滑处理操作方法,且他们分别被封装在单独的函数中,使用起来非常方便:
(1)线性滤波
- 方框滤波——boxblur函数
- 均值滤波(邻域平均滤波)——blur函数
- 高斯滤波——GaussianBlur函数
(2)非线性滤波
- 中值滤波——medianBlur函数
- 双边滤波——bilateralFilter函数
2.3. 线性滤波器
线性滤波器:线性滤波器经常用于剔除输入信号中不想要的频率 或者 从许多频率中选择一个想要的频率。
几种常见的线性滤波器:
滤波器 | 特征 |
---|---|
低通滤波器 | 允许低频率通过 |
高通滤波器 | 允许高频率通过 |
带通滤波器 | 允许一定范围频率通过 |
带阻滤波器 | 阻止一定范围频率通过并且允许其它频率通过 |
全通滤波器 | 允许所有频率通过、仅仅改变相位关系 |
陷波滤波器 | 阻止一个狭窄频率范围通过的特殊带阻滤波器(Band-stop filter) |
3. 区分滤波和模糊
以经常用的高斯滤波为例。
滤波可分低通滤波和高通滤波两种。
高斯滤波是指用高斯函数作为滤波函数的滤波操作
至于是不是模糊,要看是高斯低通还是高斯高通,低通就是模糊,高通就是锐化。
- 高斯滤波 是指用高斯函数作为滤波函数的滤波操作。
- 高斯模糊 就是高斯低通滤波(在高斯滤波基础上加了低通)
4. 邻域算子与线性邻域滤波
邻域算子(局部算子)是利用给定像素周围的像素值的决定此像素的最终输出值的一种算子。而线性邻域滤波是一种常用的邻域算子,像素的输出值取决于输入像素的加权和,具体过程如下图。
邻域算子除了用于局部色调调整以外,还可以用于 图像滤波,实现图像的平滑(低通)和锐化(高通),图像边缘增强或者图像噪声的去除。
图注:邻域滤波(卷积):左边图像与中间图像的卷积产生右边图像。目标图像中蓝色标记的像素是利用原图像中红色标记的像素计算得到的。
线性滤波处理的输出像素值g(i, j)
是输入像素值f(i + k, j + l)
的 加权和 :
简写为:
其中 f 表示输入像素值,h 表示加权系数“核”,g 表示输出像素值
在新版本的OpenCV中,提供了如下三种常用的线性滤波操作,他们分别被封装在单独的函数中,使用起来非常方便:
- 方框滤波——boxblur函数
- 均值滤波——blur函数
- 高斯滤波——GaussianBlur函数