• 双边滤波算法


    1、原理

    高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息。

    高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的边缘上,因为只使用了距离来确定滤波权重,导致边缘被模糊。

    在高斯基础上,进一步优化,叠加了像素值的考虑,因此也就引出了双边滤波,一种非线性滤波,滤波效果对保留边缘更有效。

    为了理解双边滤波的距离和像素差两个影响因素,先说明下面两个概念帮助理解。

    空间距离:当前点距离滤波模板中心点的欧式距离。

    灰度距离:当前点距离滤波模板中心点的灰度的差值的绝对值。

    双边滤波的核函数是空间域核与像素范围域核的综合结果:

    1)在图像的平坦区域,像素值变化很小,那么像素差值接近于0,对应的像素范围域权重接近于1,此时空间域权重起主要作用,相当于进行高斯模糊;

    2)在图像的边缘区域,像素值变化很大,那么像素差值大,对应的像素范围域权重变大,即使距离远空间域权重小,加上像素域权重总的系数也较大,从而保护了边缘的信息。

    双边滤波的效果如下图,在突变的边缘上,使用了像素差权重,所以很好的保留了边缘。

    双边滤波的原理如下图所示。

    2、测试实验

    OpenCV函数原型:

    CV_EXPORTS_W void bilateralFilter( 
    InputArray src, OutputArray dst, int d,
                      double sigmaColor, double sigmaSpace,
                      int borderType = BORDER_DEFAULT );

    InputArray src: 输入图像,可以是Mat类型,图像必须是8位或浮点型单通道、三通道的图像。

    OutputArray dst: 输出图像,和原图像有相同的尺寸和类型。

    int d: 表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会从第五个参数sigmaSpace计算该值。

    double sigmaColor: 颜色空间过滤器的sigma值,这个参数的值越大,更大的值域空间影响结果。

    double sigmaSpace: 坐标空间中滤波器的sigma值,如果该值较大,更大的定义域空间影响结果。

    int borderType=BORDER_DEFAULT:边界模式,有默认值BORDER_DEFAULT.

    测试代码:

    static void OnBilateralFilter(int filterSz, void *)
    {
        bilateralFilter(img, img3, filterSz, filterSz * 2, filterSz / 2);
        imshow("双边滤波", img3);
    }
    
    namedWindow("双边滤波", 1);
    createTrackbar("内核值", "双边滤波", &gMedianBlurValue, 40, OnBilateralFilter);
    OnBilateralFilter(gMedianBlurValue, 0);

    3、测试结果

    4、参考文献

    Bilateral Filtering for Gray and Color Images, C. Tomasi, R. Manduch

    http://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Tomasi98.pdf

    Smoothing Images

    https://docs.opencv.org/2.4/doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.html

    Bilateral Filters(双边滤波算法)原理及实现(一)

    https://blog.csdn.net/u013066730/article/details/87859184

     

    个人博客,转载请注明。

     https://www.cnblogs.com/pingwen/p/12539722.html

  • 相关阅读:
    Array中数据强制数据类型转换
    去除socket编程当中接收到的多余符\0
    <转>在 ASP.NET 中执行 URL 重写
    小牛生产小牛的问题解决集粹
    SAP ABAP鸟瞰【AV+PPT】
    cx_Oracle说:Python访问Oracle并不难
    resolve.conf引起登录HPUX的CDE故障
    HPUX 11i v2安装使用python 2.5.2
    HPUX下使用python发送邮件
    HPUX 11i v2上Oracle10.2基本安装指南
  • 原文地址:https://www.cnblogs.com/pingwen/p/12539722.html
Copyright © 2020-2023  润新知