OpenCV 线性滤波

作者: 亚欧沙龙 | 来源:发表于2019-03-26 15:40 被阅读0次

    线性滤波

    图像滤波与滤波器

    图像滤波,指的是在尽量保留图像特征的条件下对目标图像得噪声进行抑制,是图像处理当中不可缺少的部分。

    平滑录播室低频增强的空间域滤波技术,它的目的有两类:一类是模糊,一类是消除噪音。常见的滤波有:

    • 方框滤波 -- BoxBlur 函数
    • 均值滤波 -- Blur 函数
    • 高斯滤波 -- Gaussianblur 函数
    • 中值滤波 -- mediaBlur 函数
    • 双边滤波 -- bilateralFilter 函数

    线性滤波简介

    线性滤波经常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率。

    • 低通滤波器 允许低频通过
    • 高通滤波器 允许高频通过
    • 带通滤波器 允许一定范围的频率通过
    • 带阻滤波器 允许一定范围的频率通过并阻止其他的频率通过
    • 全通滤波器 允许所有频率通过,只改变相位
    • 陷波滤波器 阻止一个狭窄频率范围通过

    滤波和模糊

    • 高斯滤波是指用高斯函数作为滤波函数的滤波操作;
    • 高斯模糊就是高斯低通滤波。

    邻域算子与线性邻域滤波

    邻域算子是利用给定像素周围的像素值决定此像素的最终输出值的一种算子。线性滤波就是一种常见的邻域算子。

    卷积核卷积

    线性滤波处理的输出像素值g(i , j) 是输入像素值f(i + k,j + I)的加权和,如下:

    加权值和

    其中的h(k,l),我们称其为"核",时滤波器的加权系数,即滤波器的"滤波系数",f表示输入像素值,h表示加权系数"核",g表示输出像素值,整体可以简单写作:

    卷积公式简单表达

    常见的线性滤波操作

    • 方框滤波 -- boxblur函数
    • 均值滤波 -- blur函数
    • 高斯滤波 -- GaussianBlur函数

    方框滤波

    void boxFilter(
        InputArray src,
        OutPutArray dst,
        int ddepth,  //输出图像的深度,-1表示原图深度
        Size ksize,  //内核的大小
        Point anchor = Point(-1,-1),  //表示锚点,即平滑的那个点
        boolnormalize = true,  //一个标识符,表示内核是否被其区域归一化
        int borderType = BORDER_DEFAULT  //用于推断图像外部像素的某种边界模式
    )
    

    当normalize=true的时候,方框滤波就变成了我们熟悉的均值滤波,均值滤波就是方框滤波归一化后的特殊情况

    方框滤波

    </div>

    效果

    内核大小(5,5) 内核大小(7,7)
    内核大小(5,5) 内核大小(7,7)

    均值滤波

    均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=1/m ∑f(x,y) m为该模板中包含当前像素在内的像素总个数。

    void blur(
        InputArray src,
        OutPutArray dst,
        Size ksize,  //内核的大小
        Point anchor = Point(-1,-1),  //表示锚点,即平滑的那个点
         int borderType = BORDER_DEFAULT  //用于推断图像外部像素的某种边界模式
    )
    
    均值滤波

    高斯滤波

    从数学的角度上来看,图像的高斯模糊过程就是图像与正态分布作卷积。

    void GaussianBlur(
        InputArray src,
        OutPutArray dst,
        Size ksize,  //高斯内核的大小
        double sigmax,   //表示高斯函数在X方向的标准偏差
        double sigmay = 0,  //表示高斯函数在Y方向的标准偏差
        int borderType = BORDER_DEFAULT  //用于推断图像外部像素的某种边界模式
    )
    

    一维高斯函数

    一维高斯函数

    二维高斯函数

    二维高斯函数

    效果

    高斯内核大小(5,5) 高斯内核大小(9,9)
    高斯内核大小(5,5) 高斯内核大小(9,9)

    相关文章

      网友评论

        本文标题:OpenCV 线性滤波

        本文链接:https://www.haomeiwen.com/subject/rzagvqtx.html