公司网站营销,东三省网站建设公司,网站设计的论文,做数据的网站均值滤波器可以归为低通滤波器#xff0c;是一种线性滤波器#xff0c;其输出为邻域模板内的像素的简单平均值#xff0c;主要用于图像的模糊和降噪。 均值滤波器的概念非常的直观#xff0c;使用滤波器窗口内的像素的平均灰度值代替图像中的像素值#xff0c;这样的结果就…
均值滤波器可以归为低通滤波器是一种线性滤波器其输出为邻域模板内的像素的简单平均值主要用于图像的模糊和降噪。 均值滤波器的概念非常的直观使用滤波器窗口内的像素的平均灰度值代替图像中的像素值这样的结果就是降低图像中的“尖锐”变化。这就造成均值滤波器可以降低噪声的同时也会模糊图像的边缘。均值滤波器的处理结果是过滤掉图像中的“不相关”细节其中“不相关”细节指的是与滤波器模板尺寸相比较小的像素区域。
根据均值计算方法的不同均值滤波器有以下几种
•算术均值滤波器
•几何均值滤波器
•谐波均值滤波器
•逆谐波均值滤波器
算术均值滤波器 Arithmetic Mean Filter
这是最简单的均值滤波器可以去除均匀噪声和高斯噪声但会对图像造成一定程度的模糊。 令 表示中心点在 处大小为 的滤波器窗口。算术均值滤波器就是简单的计算窗口区域的像素均值然后将均值赋值给窗口中心点处的像素 其中 表示原始图像 表示均值滤波后得到的图像。 基于上述公式可以很容易的得到的算术均值滤波器的窗口模板下面以3×3为例 在OpenCV中函数blur表示使用该模板的均值滤波器其声明如下 void blur( InputArray src, OutputArray dst,Size ksize, Point anchor Point(-1,-1),int borderType BORDER_DEFAULT ); src是输入图像dst为输出图像ksize是滤波器模板窗口的大小后两个参数分别表示待处理像素在模板窗口的位置默认值是窗口的中心位置所以窗口的大小一般为奇数最后一个参数表示对编解类型的处理使用默认值即可。其调用示例blur(src,dst,Size(5,5)模板窗口的大小为5×5。
盒状滤波器
当滤波器的模板的所有的系数都相等时称之为盒状滤波器 Box Filter。其使用的模板如下3×3 为例 当 时盒状滤波器可以很方便的计算图像像素邻域的和对计算图像的各种积分特性例如图像的协方差矩阵是很有帮助的。OpenCV中的函数boxFilter就是盒状滤波器其声明如下 void boxFilter( InputArray src, OutputArray dst, int ddepth,Size ksize, Point anchor Point(-1,-1),bool normalize true,int borderType BORDER_DEFAULT ); 和blur的参数比较类似所不同的ddepth是滤波后图像的深度-1表示和原图像的深度相同参数normalize表示是否有归一化的参数这是因为在boxFilter使用的模板如下 其中 也就是说当normalize true时这也是一个默认值其就是一个算术均值滤波器normalizefalse盒状滤波器的作用就是计算模板窗口内的像素的和然后将值赋给窗口中心位置的像素主要用来计算邻域像素的和。
加权的均值滤波器
不同于上面的所有像素的系数都是相同的加权的均值滤波器使用的模板系数会根据像素和窗口中心像素的距离而取不同的系数。赋予中心点最高的权重然后随着离中心点的距离增加而减小系数这样做的目的是在平滑图像的同时尽量降低对图像的模糊。最常用的加权模板如下3×3为例 其他的一些非线性均值滤波器
除了上述算术均值滤波器根据计算均值方法的不同还有几种均值滤波。
几何均值滤波器 Geometric Mean Filter其公式如下 滤波后图像的像素由模板窗口内像素的乘积的 幂给出。 和算术均值滤波器相比几何均值滤波器能够更好的取出高斯噪声并且能够更多的保留图像的边缘信息。但其对0值是非常敏感的在滤波器的窗口内只要有一个像素的灰度值为0就会造成滤波器的输出结果为0。
谐波均值滤波器 Harmonic Mean Filter 其公式如下 谐波均值滤波器对盐粒噪声白噪声效果较好不适用于胡椒噪声比较适合处理高斯噪声。
逆谐波均值滤波器 Contra-Harmonic Mean Filter其公式如下 其中Q称为滤波器的阶数该滤波器可以用来消除椒盐噪声。但是需要不同同时处理盐粒噪声和胡椒噪声当Q为正时可以消除胡椒噪声当Q为负时消除盐粒噪声。当Q0时该滤波器退化为算术均值滤波器Q-1时退化为谐波均值滤波器。 均值滤波器 非线性均值滤波器中的一种其公式如下 P为负数时可以有效的滤去盐粒白噪声正的异常值P为正时可以过滤胡椒黑噪声负的异常值。
基于OpenCV的实现
上述滤波器的实现大同小异只是计算均值的方法不同。 Mat tmp;copyMakeBorder(m, tmp, ksize / 2, ksize / 2, ksize / 2, ksize / 2, BorderTypes::BORDER_REFLECT); // 扩展边界int rows tmp.rows - ksize / 2;int cols (tmp.cols - ksize / 2) * tmp.channels();for (int i ksize / 2; i rows - ksize / 2; i){for (int j ksize / 2; j cols - ksize / 2; j){// 遍历窗口内的像素计算均值}}Rect rect(ksize / 2, ksize / 2, m.cols, m.rows);m tmp(rect); 下面就不再贴全的代码只给出根据不同的公式计算均值的代码。几何均值滤波器 // 取得窗口像素double mul 1;for (int a -ksize / 2; a ksize / 2; a){for (int b -ksize / 2; b ksize / 2; b){mul * tmp.at(i a, j b);}}auto pixel pow(mul, 1.0 / (ksize * ksize));if (pixel 0)pixel 0;else if (pixel 255)pixel 255;tmp.at(i, j) static_cast(pixel); 基本就是遍历图像的像素然后在滤波器的窗口内根据均值的计算方式计算均值几何滤波器就是将滤波器窗口内的像素乘积然后去乘积的 幂。需要说明的是几何均值滤波器有个致命的缺陷那就是当窗口内像素只要有一个值为0则其计算得到的值就是0这在去去噪时表现的比较明显例如 由于噪声的污染比较严重在使用几何均值滤波器去噪时会得到一块黑色区域灰度值为0。
加权的均值滤波器 // 取得窗口像素int sum 0;int weightSum 0;for (int a -ksize / 2; a ksize / 2; a){for (int b -ksize / 2; b ksize / 2; b){auto weight pow(2, ksize - abs(a) - abs(b) - 1);weightSum weight;sum weight * tmp.at(i a, j b);}}auto pixel static_castint(sum / weightSum);if (pixel 0)pixel 0;else if (pixel 255)pixel 255;tmp.at(i,j) pixel; 主要是权值系数的计算可以发现一定的关系和中心越近的其权值越高具体公式 其中 为和中心在 方向的距离。 加权的均值滤波器去噪效果和均值滤波器相当但是在保护图像细节方面比均值滤波器效果要好上图是3×3的滤波器窗口较小两者的区别不是较大。 下图是7×7的滤波器对比就比较明显了。 至于其他的几种谐波滤波器、逆谐波滤波器和 均值滤波器实现都差不多代码就不再贴出了。
总结
均值滤波器能够去除均匀分布和高斯分布的噪声但是在过滤掉噪声的同时会对图像造成一定的模糊使用的窗口越大造成的模糊也就越明显。 根据计算均值方法的不同有多种均值滤波经常使用的是算术均值滤波器计算简单但是对图像造成的模糊交明显另外有加权的均值滤波器给窗口内的像素不同的系数距离中心越近则系数越大。 使用加权的均值滤波器去除噪声的能力和算术均值滤波器相当但是对图像造成的模糊较轻能够更好的保护图像的细节。上面已有对比
几何均值滤波器在过滤噪声的同时也能更好的保护图像的细节但是有个缺陷在滤波的过程中窗口内的像素只要有一个为0则其得出的值就是0.
至于余下的几种在能够去除高斯噪声并且对椒盐噪声也有一定的作用具体如下:
•谐波均值滤波器 能过滤盐粒噪声,对胡椒噪声无效
•逆谐波均值滤波器当阶数Q为正时可以过滤胡椒噪声Q为负时可以过滤盐粒噪声。不能同时对椒盐噪声起作用。
• 均值滤波器 和逆谐波均值滤波器类似。当P为正时能够过滤椒盐噪声P为负时能够过滤盐粒噪声。