平滑处理也称模糊处理
是一种简单且使用频率很高的图像处理办法
平滑处理的用途有很多,最常见的是用来减少图像上的噪点或者失真
在涉及到降低图像分辨率的时候,平滑处理是非常好用的办法
使用平滑处理是为了给图像预处理时降低噪声
有以下几种滤波算法
均值滤波(邻域平均滤波)--Blur函数
高斯滤波 --GaussianBlur函数
中值滤波 --MedianBlur函数
双边滤波 --bilaterFilter函数
分为线性滤波与非线性滤波
线性滤波:均值滤波 高斯滤波
非线性滤波:中值滤波 双边滤波
1.均值滤波
均值滤波是典型的线性滤波算法,主要方法为邻域平均法,
即用一片图像区域的各个像素的均值来代替原图像中的各个像素值。
一般需要在图像上对目标像素给出一个模板(内核),
该模板包括了其周围的临近像素
(比如以目标像素为中心的周围8(3*31-1)个像素,构成一个滤波模板,去掉目标像素本身)
再用模板中的全体像素的平均值来代替原来像素值。
均值滤波本身存在着固有的缺陷,即它不能很好的保护图像细节
在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好的去除噪点
blur(Img1, BlurImg, Size(3,3));
//输入图像 输出图像 窗的大小一般设置为奇数
2.高斯滤波
高斯滤波是一种线性平滑滤波,可以消除高斯噪声,广泛应用于图像处理的减噪过程
通俗的说,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素的值
都是由其本身和邻域内的其他像素值经过加权平均后得到的。
ksize内核必须是正数且为奇数或者为0这些都是由sigma计算而来
Mat GaussianBlurImg;
GaussianBlur(Img1, GaussianBlurImg, Size(3, 3), 0, 0); //0 0为x和y的sigma值
imshow("after GaussianBlur", GaussianBlurImg);
3.中值滤波
线性滤波可以实现很多种不同的图像变换,而非线性滤波有时可以达到更好的实现效果
线性滤波器即两个信号之和的响应和他们各自响应之和相等。换句话说,每个像素的输出值
都是一些输入像素的加权和。线性滤波器易于构造,易于从频率响应角度进行分析。
但是在很多情况下,使用邻域像素的非线性滤波会得到更好的效果。比如在噪声是散粒噪声
而不是高斯噪声,即图像偶尔会出现很大的值的时候,用高斯滤波器对图像进行模糊的话,
噪声像素是不会被去除的,他们只是转化为更柔和但仍然可见的散粒。这时候就需要用到中值滤波了
该算法的思路是用像素点领域灰度值的中值来代替该像素点的灰度值,对于斑点噪声,椒盐噪声尤其有用。
Mat MedianBlurImg;
medianBlur(Img1, MedianBlurImg, 5); //5就是窗的大小
imshow("after MedianBlur", MedianBlurImg);
4.双边滤波
双边滤波是非线性滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,
同时考虑空域信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部的特点
双边滤波器的好处就是可以做 边缘保留
但由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能干净的滤掉,
只能对低频信息有较好的滤波
第三个参数 int类型的d,表示在过滤过程中每个像素邻域的直径。如果这个值被设置为非正数
就会从第五个参数 sigmaSpace来计算它。
第四个参数 double类型的sigmaColor 颜色空间滤波器的sigma值。这个参数的值越大,就表明
该像素邻域内有越宽广的颜色会被混合在一起,产生较大的半相等颜色区域。
第五个参数 double类型的sigmaSpace 坐标空间中滤波器的sigma值,坐标空间的标注方差。
他的数值越大,意味着越远的像素会相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。
当 d>0时 d指定了领域大小与sigmaSpace无关,否则 d正比于sigmaSpace
Mat bilateralFilterImg;
bilateralFilter(Img1, bilateralFilterImg, 5, 100, 3);
imshow("after bilateralFilter", bilateralFilterImg);