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 所用到的核表示如下:

其中

扫描二维码关注公众号,回复: 9081220 查看本文章

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 方框滤波几乎一样。

 

猜你喜欢

转载自www.cnblogs.com/bjxqmy/p/12294444.html