线性滤波概念:
线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等。由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是确定并且是唯一的(转移函数即模板的傅里叶变换)。
非线性滤波概念:
非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现,如最大值滤波器、最小值滤波器、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换)。另外,膨胀和腐蚀就是通过最大值、最小值滤波器实现的。
线性滤波: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);
GaussianBlur 所用到的核表示如下:
高斯模板是通过高斯函数计算出来的,公式如下:
以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);
opencv —— boxFilter、blur、GaussianBlur、medianBlur、bilateralFilter 线性滤波与非线性滤波
原文:https://www.cnblogs.com/bjxqmy/p/12294444.html