三种线性滤波:
1.方框滤波
void boxFilter( InputArray src, OutputArray dst, int ddepth,
Size ksize, Point anchor = Point(-1,-1),
bool normalize = true,
int borderType = BORDER_DEFAULT );
参数ddepth:输出图像的深度
参数ksize:模板窗口的大小
参数anchor:锚点,在模板中的位置,也是原图与模板卷积后像素值输出的位置
参数normalize:归一化,是将模板内的像素值全部归一化为1,求加权和,也就是均值滤波;
如果不进行归一化,就是直接进行累加,可以用来计算图像的积分特性
2.均值滤波(归一化后的方框滤波)
void blur( InputArray src, OutputArray dst,
Size ksize, Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT );
均值滤波模板系数均为1
缺点:就是不能很好地保护细节,在图像去燥的同时也破坏了图像的细节部分
3.高斯滤波
void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY = 0,
int borderType = BORDER_DEFAULT );
支持就地操作
参数 ksize:必须是正奇数,或者为0,此时大小有sigma计算出
参数sigmaX:X方向的标准差
参数sigmaY:Y方向的标准差;当sigmaY = 0时,设置其等于sigmaX;当sigmaX,Y = 0 时,其值由ksize计算出
特点:和均值滤波相似,都是取均值,但是模板系数的权重不一样,越靠近模板中心,系数值越大,(权重是根据二维正态分布得到的)
标准差(sigma)对模板系数的影响:
sigma越大,正态分布越扁平,各部分的比重差别不大,所以模板系数的差别不大,会更加趋近于均值滤波
sigma越小,正态分布越高尖,比重会集中在中心区域,所以模板的中心系数会远大于其他值,会趋近于仅对中心点进行点运算,这样模糊效果就会减弱,去燥能力下降
所以说,标准差的大小实际是对权重分配的再调整。
3*3的高斯模板