• opencv —— boxFilter、blur、GaussianBlur、medianBlur、bilateralFilter 线性滤波(方框滤波、均值滤波、高斯滤波)与非线性滤波(中值滤波、双边滤波)


    图像滤波,指在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像与处理中不可缺少的操作。

    邻域算子,指利用给定像素及其周围的像素值,决定此像素的最终输出值的一种算子。线性邻域滤波器就是一种常见的邻域算子,像素的输出值取决于输入像素及其周围像素的加权和,权重是邻域算子相应位置上的值。

    线性滤波概念:

    原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等。

    非线性滤波概念:

    原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器(膨胀)、最小值滤波器(腐蚀)、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的。

     

    线性滤波:boxFilter 方框滤波、blur 均值滤波、GaussianBlur 高斯滤波

    boxFilter 方框滤波

    void boxFilter (InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor = Point (-1, -1), bool normalize = true, int borderType = BRODER_DEFAULT);

    • src,输入图像,即原图像,填 Mat 类的对象即可。待处理的图像深度应该是 CV_8U、CV_16U、CV_16S、CV_32F、CV_64F。
    • dst,目标图像,需要和原图像有一样的尺寸和类型。
    • ddepth,输出图像的深度。“-1”代表使用原图深度,即 src.depth() 。
    • ksize,内核大小。形式为 Size(x,y)
    • anchor,锚点,即被平滑的那个点。默认值为 Point (-1, -1),表示取核的中心。
    • normalize,一个标识符,表示内核是否被其区域归一化。默认值为 true。当 normalize = true 时,方框滤波就变成了均值滤波。

    boxFilter 所用到的核表示如下:

    其中

     

     

    blur 均值滤波

    void blur (InputArray src, OutputArray dst, Size ksize, Point anchor = Point (-1, -1), int borderType = BRODER_DEFAULT);

    • 函数变量与 boxFilter 方框滤波几乎一样。

    blur 所用到的核表示如下:

     

    GaussianBlur 高斯滤波

    void GaussianBlur (InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BRODER_DEFAULT);

    • GaussianBlur 两种常见的核表示如下:

     

    高斯模板是通过高斯函数计算出来的,公式如下:

    以3×3 的高斯滤波器模板为例,以模板的中心位置为坐标原点进行取样。模板在各个位置的坐标,如下所示(x轴水平向右,y轴竖直向上)。

    • sigmaX (σx),表示高斯核函数在X方向的的标准偏差。
    • sigmaY (σy),表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。

     

     

     

    非线性滤波: medianBlur 中值滤波、bilateralFilter 双边滤波

    medianBlur 中值滤波

    void medianBlur (InputArray src, OutputArray dst, int ksize);

    • ksize,滤波器的大小,必须是大于一的奇数。
    • 其他函数变量与 boxFilter 方框滤波几乎一样。

     

    bilateralFilter 双边滤波

    双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均代表某个像素的强度,所用的加权平均基于高斯分布。最重要的是,双边滤波的权重不仅考虑了像素的欧氏距离(如普通的高斯低通滤波,只考虑了位置对中心像素的影响),还考虑了像素范围域中的辐射差异(例如卷积核中像素与中心像素之间相似程度、颜色强度,深度距离等),在计算中心像素的时候同时考虑这两个权重。 

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

    • d,过滤过程中每个像素邻域的直径。如果 d < 0,则会根据第五个参数 sigmaSpace 来计算。
    • sigmaColor(σcolor),颜色空间滤波器的 σ 值,这个参数越大,表明该像素邻域内有越宽广的颜色被混到一起。
    • sigmaSpace(σspace),坐标空间滤波器的 σ 值,它的值越大,意味着越远的像素会相互影响,从而使更大的区域中足够相似的颜色获取相同颜色。当 d > 0 时,d 指定了邻域大小且与 sigmaSpace 无关,否则,d 正比于 sigmaSpace。
    • 其他函数变量与 boxFilter 方框滤波几乎一样。

     

  • 相关阅读:
    鼠标划过出现子菜单
    让dedecms(织梦)的list标签支持weight排序
    win7 64位无法安装网络打印机
    点击外部链接, 让iframe父页面也跟着显示
    C/C++指针(转)
    OO与设计模式的原则、目标 (转)
    页面添加QQ
    Windows Form 中的鼠标事件
    深入浅出C#消息
    初始化列表
  • 原文地址:https://www.cnblogs.com/bjxqmy/p/12294444.html
Copyright © 2020-2023  润新知