1、原理
高斯滤波是以距离为权重,设计滤波模板作为滤波系数,只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息。
高斯滤波的缺陷如下图所示:平坦区域正常滤波,图像细节没有变化,而在突变的边缘上,因为只使用了距离来确定滤波权重,导致边缘被模糊。
![f3b29b62740d6e802abb1b995617df32.png](https://i-blog.csdnimg.cn/blog_migrate/1ad72277ec35d12cacb71985737694a8.jpeg)
在高斯基础上,进一步优化,叠加了像素值的考虑,因此也就引出了双边滤波,一种非线性滤波,滤波效果对保留边缘更有效。
![d983c6a189a8fff5215ea97d265c2e04.png](https://i-blog.csdnimg.cn/blog_migrate/fb52b42d9bfff55701970f1c1c3fd843.jpeg)
为了理解双边滤波的距离和像素差两个影响因素,先说明下面两个概念帮助理解。
空间距离:当前点距离滤波模板中心点的欧式距离。
![b1c0864f0270c48bf1f12b9614b7877e.png](https://i-blog.csdnimg.cn/blog_migrate/e0c248e4caa8f95f7a1a6bafb0a1fcf1.jpeg)
灰度距离:当前点距离滤波模板中心点的灰度的差值的绝对值。
![6457a435b8d7529eb46870e3cc93aa96.png](https://i-blog.csdnimg.cn/blog_migrate/c3eda856b02b2962a5ea3f6beed02a84.jpeg)
双边滤波的核函数是空间域核与像素范围域核的综合结果:
1)在图像的平坦区域,像素值变化很小,那么像素差值接近于0,对应的像素范围域权重接近于1,此时空间域权重起主要作用,相当于进行高斯模糊;
2)在图像的边缘区域,像素值变化很大,那么像素差值大,对应的像素范围域权重变大,即使距离远空间域权重小,加上像素域权重总的系数也较大,从而保护了边缘的信息。
双边滤波的效果如下图,在突变的边缘上,使用了像素差权重,所以很好的保留了边缘。
![c68893266ee25f0f9c3ffbf269990ea3.png](https://i-blog.csdnimg.cn/blog_migrate/b5ff4a65936314919efcd1c6bb3cad71.jpeg)
双边滤波的原理如下图所示。
![8be7a395a4b1ecde923c640e2aeeaefa.png](https://i-blog.csdnimg.cn/blog_migrate/f5c7ee2b664f229662e6ac28d6f72666.jpeg)
2、测试实验
OpenCV函数原型:
CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType = BORDER_DEFAULT );
InputArray src: 输入图像,可以是 Mat 类型,图像必须是 8 位或浮点型单通道、三通道的图像。
OutputArray dst: 输出图像,和原图像有相同的尺寸和类型。
int d: 表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会从第五个参数 sigmaSpace 计算该值。
double sigmaColor: 颜色空间过滤器的 sigma 值,这个参数的值越大,更大的值域空间影响结果。
double sigmaSpace: 坐标空间中滤波器的 sigma 值,如果该值较大,更大的定义域空间影响结果。
int borderType=BORDER_DEFAULT: 边界模式,有默认值 BORDER_DEFAULT.
测试代码:
static void OnBilateralFilter(int filterSz, void *){ bilateralFilter(img, img3, filterSz, filterSz * 2, filterSz / 2); imshow("双边滤波", img3);}namedWindow("双边滤波", 1);createTrackbar("内核值", "双边滤波", &gMedianBlurValue, 40, OnBilateralFilter);OnBilateralFilter(gMedianBlurValue, 0);
3 、测试结果
![dc608e0fb2f4a869469eb1dc3f3d2aa2.png](https://i-blog.csdnimg.cn/blog_migrate/687d79dd04ad66278ee80608775d1e43.jpeg)