• OpenCV3编程手册 章节6.1方框滤波、均值滤波及高斯滤波


    线性滤波

    平滑处理

    smoothing(bluring),降低图像分辨率的常用办法,常见的有减少噪点和失真。

    图像滤波&滤波器

    图像滤波是指在尽量保留图像细节特征条件下对目标图像的噪声进行抑制,是图像预处理重要操作。
    消除图像中噪声成分叫做图像的平滑化或滤波操作。图像有用信息在能量幅度谱高频段被淹没,需要滤波器减弱噪声影响。

    领域算子与线性领域滤波

    领域算子(局部算子)是利用给定像素周围的像素值
    的决定此像素最终输出值的一种算子。线性领域滤波就是一种常用的领域算子在,像素输出值取决于像素的加权和。

    1. 领域滤波又称卷积,输出的像素值g(i,j)是输入像素值f(i+k,j+I)的加权和,其中h(k,l),称为“核”,是滤波器的加权系数——滤波系数。
    2. opencv3中提供三种常用的线性滤波操作,分别被封装在单独的函数中,boxblur,blur,GaussianBlur。

    方框滤波(box Filter)

    方框滤波封装在函数boxblur中,boxblur使用方框滤波器来模糊一张图片,从src输入,从dst输出。

    • 参数1 inputarray 填Mat类表示输入图像,该函数对通道是独立处理的,可以处理任意通道数图片,但是深度应该是CV_8U CV_16U CV_16S CV_32F CV_64F之一。
    • 参数2 outputarray Mat类,目标图像
    • 参数3 int类型depth,输出图像深度,-1代表使用原图深度
    • 参数4 Size类型的ksize 内核大小 Size(w,h) 宽度,高度
    • 参数5 Point类型 anchor表示锚点(被平滑的那个点)默认值(-1,-1)在核的中心
    • 参数6 bool类型的normalize,默认值是true,一个标识符,表示内核是否被其区域归一化(normalized)
    • 参数7 int类型的borderType 推断图像外部像素的某种边界模式,有默认值BORDER_DEFAULT

    在可变窗口中计算像素总和,可以用integral()函数。

    均值滤波(归一化后的方框滤波)

    输出图像的每一个像素是核窗口内输入图像对应像素的平均值(所有像素加权系数相等),blur函数其实就是调用了boxFilter。

    • 理论简介
      领域平均法:选取一个目标像素点(x,y),以此为中心周围的8个像素(3*3-1)构成一个模板(内核),再用模板的全体像素平均值地体目标像素点原来像素值。

    • 缺陷
      图像去噪的同时也破坏了图像的细节部分,是图像变得模糊,不能很好地去除噪点。

    • OpenCV中使用均值滤波——blur函数
      blur函数作用:对输入图像src进行均值滤波后用dst输出。

    c++: void blur(InputArray src,OutputArray dst,Size ksize, Point achor=Point(-1,-1),int borderType=BORDER_DEFAULT)
    这个函数参数与之前的boxblur基本完全一样,不再赘述。

    高斯滤波

    • 理论简介
      消除高斯噪声,通俗来说就是对整幅图像进行加权平均的过程,每一个像素点值都有其本身和领域内的其他像素值经过加权平均后得到。具体操作是,哪一个模板扫描图像中每一个像素点,用模板确定的领域内像素加权平均灰度值去代替模板中心像素点的值。
      高斯模糊是一个低通滤波操作。
      高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制服从正态分布的噪声狠有效果。

    • 高斯滤波:GaussianBlur函数
      GaussianBlur函数的作用是用高斯滤波去模糊一张图,对src进行高斯滤波后用dst输出
      它将src和指定的高斯核函数做卷积运算,并且支持就地过滤。

    • 参数1 src深度要求同上

    • 参数2 dst 尺寸类型与是如此相同

    • 参数3 Size类型的ksize 高斯内核大小 ksize.width kszie.height可以不同但是都必须为正数和奇数,or零,由sigma计算

    • 参数4 double类的sigmaX,表示高斯函数在X方向的标准偏差

    • 参数5 double sigmaY,表示高斯函数在y方向的标准偏差。若sigmaY为0,就将它设为sigamX;sigmaX sigmaY都为零的话,由ksize.width ksize.height 计算出来(参数3 4 5最好都指定)

    • 参数6 int 类型border Type,用于推断图像外部像素的某种边界模式。有默认值

    boxFilter函数源码的FilterEngine类

    • opencv图像滤波核心引擎 该类是图像滤波的主力军类,各种滤波函数都是在函数末尾定义一个Ptr类型的F,然后f->apply(src,dst)一下。
    • 该类包括所有的必要中间缓存器,Ptr用来动态分配的对象的只能指针模板类,尖括号里面的模板参数就是FilterEngine

    线性滤波核心API函数

    1.方框滤波:boxFilter函数

    • 参数1 src
    • 参数2 dst
    • 参数 3 ddepth,输出图像深度,“-1”代表原图深度
    • 参数4 Size类型 ksize 内核大小 Size(w,h)写法
    • 参数5 Point类型 anchor 锚点 默认(-1,-1)负值取核心
    • 参数6 bool normalize 默认true
    • 参数7 int borderType 有默认值
  • 相关阅读:
    脏读,不可重复读,幻读区别和避免
    CSRF和XSS区别和预防
    mysql刷题(不定时更新)
    (12)arp命令(每周一个linux命令)
    (11)nc命令(每周一个linux命令)
    Codeforces Round #653 (Div. 3)(A, B, C, D, E1详解)
    Gauss高斯消元——模板
    F:Maximum White Subtree(dp)
    E:Three Blocks Palindrome(hard and easy)(树状数组 ? 前缀和?)
    E:K-periodic Garland(DP)
  • 原文地址:https://www.cnblogs.com/koukouStar/p/14535001.html
Copyright © 2020-2023  润新知