opencv —— boxFilter、blur、GaussianBlur、medianBlur、bilateralFilter 线性滤波与非线性滤波

时间:2020-02-11 13:06:31   收藏:0   阅读:91

线性滤波概念:

线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是确定并且是唯一的(转移函数即模板的傅里叶变换)。

非线性滤波概念:

非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器、最小值滤波器、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换)。另外,膨胀和腐蚀就是通过最大值、最小值滤波器实现的。

 

线性滤波: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);

boxFilter 所用到的核表示如下:

技术分享图片

其中

技术分享图片

 

blur 均值滤波

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

blur 所用到的核表示如下:

技术分享图片

 

 

GaussianBlur 高斯滤波

 

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

技术分享图片

 

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

技术分享图片

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

技术分享图片

 技术分享图片

 

 

 技术分享图片

 

 

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

medianBlur 中值滤波

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

 

bilateralFilter 双边滤波

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

 

 

原文:https://www.cnblogs.com/bjxqmy/p/12294444.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!