均值模糊(blur)
基本原理
使用模板内所有像素的平均值代替模板中心像素灰度值,一句话,就是邻域算子都是 1 / (M * N) 的一种特殊形式的邻域滤波,均值模糊为线性滤波。
缺点
它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪点。特别是椒盐噪点
函数原型
1 | /* |
实例
1 | Mat mat_base = imread("fish.png"); |
中值模糊(medianBlur)
基本原理
把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。中值滤波对脉冲噪声(椒盐噪声)有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的。此外,中值滤波的算法比较简单,也易于用硬件实现。
优点
算法简单,易于实现,能够很好的去处椒盐化
函数原型
1 | /* |
实例
1 | Mat mat_base = imread("fish.png"); |
高斯模糊(GaussianBlur)
高斯滤波模板中最重要的参数就是高斯分布的标准差σ。它代表着数据的离散程度,如果σ较小,那么生成的模板中心系数越大,而周围的系数越小,这样对图像的平滑效果就不是很明显;相反,σ较大时,则生成的模板的各个系数相差就不是很大,比较类似于均值模板,对图像的平滑效果就比较明显。
函数原型
1 | /* |
1 | sigmaX = \left(\frac {nx - 1}{2} \right) * 0.3 + 0.8,nx = ksize.width - 1 |
实例
1 | Mat mat_base = imread("fish.png"); |
双边模糊(bilateralFilter)
目前我们了解的滤波器都是为了平滑图像,问题是有些时候这些滤波器不仅仅削弱了噪声,连带着把边缘也给磨掉了。为避免这样的情形 (至少在一定程度上 ), 我们可以使用双边滤波。
特点
类似于高斯滤波器,双边滤波器也给每一个邻域像素分配一个加权系数。 这些加权系数包含两个部分,第一部分加权方式与高斯滤波一样,第二部分的权重则取决于该邻域像素与当前像素的灰度差值。
所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素,这样就能对边缘附近的像素值予以保存,但是由于保存过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤除。
函数原型
1 | /* |
实例
1 | Mat mat_base = imread("fish.png"); |