一、滤波器简介
滤波器是信号和图像处理的最基础的处理。用于删除噪声,突出感兴趣的区域,允许图像重采样等等。滤波是在信号与系统原理中发现的,比较重要的概念就是频域,高频是指变化比较快的像素,低频是变化相对慢的像素。例如一个图像中,变化微弱的蓝天白云就是低频,而拥挤的街道,还有很多小物体,颜色变化复杂,就属于高频。因此,对图像的频域处理是不同于空域的另一种处理方法。
频域分析将图像分解为从低频到高频分布,低频表示强度变化缓慢,高频表示强度变化快。有很多常见的变换方法,比如傅里叶变换,余弦变换。图像是二维的,所以包括垂直和水平的频域。
频域分析作用于图像上就是增强一部分频带和减弱一部分频带,比如低频滤波器消除高频带,相对应的,高频滤波器消除低频带。具体滤波器的处理实际作用在下面将讨论。
二、低频滤波器
在这一节中,我们将介绍一些基本的低频滤波器。从上面的介绍,我们知道这样的滤波器作用是减少图像像素的振幅变化。一个简单的实现方法是将像素用相邻像素的平均值代替,通过这种处理,变化快的像素将被过渡像素代替,而变得平滑。
2.1 归一化块滤波器
opencv中提供了函数cv::blur,是将像素用以像素为中心的矩形内的相邻像素平均值代替来平滑图像。
函数头文件:#include <opencv2/imgproc/imgproc.hpp>
函数定义:
CV_EXPORTS_W void blur( InputArray src, OutputArray dst,
Size ksize, Point anchor=Point(-1,-1),
int borderType=BORDER_DEFAULT );
例子:cv::blur(image,result,cv::Size(3,3));
解释:这个类型的滤波器又称归一化块滤波器,选择3x3的核大小进行滤波。
,将像素用以像素为中心,权值如核内标的数字,想乘再相加代替。
2.2 高斯滤波器
在有些时候,我们想将离处理像素近的像素设置的权值大一点,这样滤波器效果更加接近源图像,因此这里提供了高斯滤波器cv::GaussianBlur。权重的选择来源于高斯曲线。通过函数参数确定高斯曲线的曲率。
函数定义:
CV_EXPORTS_W void GaussianBlur( InputArray src,
OutputArray dst, Size ksize,
double sigmaX, double sigmaY=0,
int borderType=BORDER_DEFAULT );
函数实例: