opencv基础(五)图像的模糊处理

图像的模糊是图像处理中比较常用和简单的处理手段之一。那么使用这种手段的原因就是为了给图像进行去噪,便于后面的处理。

模糊处理的背后的原理是什么呢,其实就是卷积计算。而在高等数学里面,卷积是连续的,在图像处理中,我们所说的卷积是离散的。直接来上图你就清楚了卷积是怎么回事。

你看是不是我们之前讲的图像的掩模很相似。简单的说,拿一个小方格在图像这个方格上进行滑动,其实这个和深度学习里面的卷积是差不多的原理。这样我们就可以得到一个新的图像了。

所以你看,不同类型的模糊处理背后其实是对应不同的小方格,也就是俗称的滤波器或者卷积核。

根据原理的不同,模糊方式有很多种,我们来介绍比较常用的几种。

1、均值滤波。(blur)

     均值滤波从字面意思上就是取平均值,也就是黄色小方格上的系数全是1,与黄色窗体覆盖下的像素值相乘,再去除以9(卷积和大小为3*3),得到平均值,赋值给中心像素。

   它的 缺点是在去噪的同时,不能很好的保留图像细节,因为全用均值代替了。

2、高斯滤波。

     相对于均值滤波,更好的保留图像的细节。因为高斯函数的特性,会有一定的权重配比。

3、中值滤波。

      字面意思的话,就是取中间的值来代替中心像素。和均值滤波类似,只不过均值滤波是取平均值,中值滤波取中间的那个值。中值滤波可以有效的去除椒盐噪声(比如说你在清水中,撒点盐,这些就是椒盐噪声。对应到图像上,在一副黑色图像上,有很多小白点,这些就是椒盐噪声)。

那么它为什么可以去除椒盐噪声呢。因为椒盐噪声像素值要么很小为0,要么很大为255,而取中间值话,就会用替代这些,从而给图像去噪点。

4、双边滤波。

    那之前我们说过高斯滤波相对于均值模糊而言保留图像的一些细节,但是它是基于空阈的,就是基于空间分布的。但是它还是没有办法完全避免边缘信息的丢失。而双边滤波则是比高斯滤波多了一个高斯方差sigma-d,所以在边缘附近,离的较远的像素不会太多影响到边缘上的像素值,这样就保证了边缘附近像素值的保存。也就是说它们的像素值在设定落差之外,不给它进行模糊,比便于保留边缘。

下面就是代码实现。

1、均值滤波:

   Mat src=imread("D:\\test1.jpg");
    if(src.empty())
    {
       qDebug()<<"fail to load";
       return;
    }
    Mat blurDst;
    blur(src,blurDst,Size(3,3));
    imshow("blurDst",blurDst);
    imshow("src",src);
    waitKey(-1);

    结果如下:

     是不是感觉明显变得模糊了吧。

2、高斯滤波。

Mat src=imread("D:\\test1.jpg");
    if(src.empty())
    {
       qDebug()<<"fail to load";
       return;
    }
    Mat blurDst;
    GaussianBlur(src,blurDst,Size(3,3),11,11);
    imshow("GaussianDst",blurDst);
    imshow("src",src);
    waitKey(-1);

结果如下:

3、椒盐滤波。

Mat src=imread("D:\\test2.png");
    if(src.empty())
    {
       qDebug()<<"fail to load";
       return;
    }
    Mat blurDst;
    medianBlur(src,blurDst,3);
    imshow("medianDst",blurDst);
    imshow("src",src);
    waitKey(-1);

结果如下:

我们可以看到,去掉了一些噪声,当然我们还可以调一下size的大小,看看效果。

4、双边滤波。

   Mat src=imread("D:\\test2.png");
    if(src.empty())
    {
       qDebug()<<"fail to load";
       return;
    }
    Mat blurDst;
    bilateralFilter(src,blurDst,15,100,3);
    imshow("bilateralDst",blurDst);
    imshow("src",src);
    waitKey(-1);

  结果如下:

总结:

均值滤波无法克服边缘像素信息丢失的缺陷,原因是均值滤波是基于平均权重。

高斯滤波虽然克服了均值滤波的缺陷,但是无法完全避免,因为没有考虑像素值得不同,只是基于空间分布考虑。

双边滤波避免了边缘信息丢失,保留了图像的轮廓不变。

猜你喜欢

转载自blog.csdn.net/qq_34062754/article/details/86639216