(十五)双边滤波Bilateral Filter

本文介绍了高斯滤波和双边滤波两种图像平滑技术。高斯滤波能有效抑制噪声但可能导致边缘模糊,而双边滤波则在平滑的同时保留边缘信息。文中详细解释了两种滤波器的理论基础,并提供了OpenCV库中实现这两种滤波的代码示例。
摘要由CSDN通过智能技术生成


欢迎访问个人网络日志🌹🌹知行空间🌹🌹



title: 3.双边滤波BilateralFilters
toc: true
category: ComputerVision
date: 2023-01-31 23:19:29
tags:

  • ComputerVision
    categories:
  • ComputerVision

mathjax: true

1.高斯滤波

1.1 理论

高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1;而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小。所以,高斯滤波器相比于均值滤波器对图像个模糊程度较小。

二维高斯函数表达式:

h ( x , y ) = K e − x 2 + y 2 2 σ 2 h(x, y) = Ke^{-\frac{x^2+y^2}{2\sigma ^2}} h(x,y)=Ke2σ2x2+y2

卷积核大小 k k k, r r r表示的是距离卷积核中心的距离

r = ( x − k / 2 ) 2 + ( y − k / 2 ) 2 r = \sqrt{(x - k/2)^2 + (y-k/2)^2} r=(xk/2)2+(yk/2)2

h ( r ) = K e − r 2 2 σ 2 h(r) = Ke^{-\frac{r^2}{2\sigma ^2}} h(r)=Ke2σ2r2

其中 σ \sigma σ类似于正态分布的方差,控制着高斯函数的型态。

σ \sigma σ越大,分布越分散,各部分比重差别不大,于是生成的模板各元素值差别不大,类似于平均模板;

σ \sigma σ越小,分布越集中,中间部分所占比重远远高于其他部分,反映到高斯模板上就是中心元素值远远大于其他元素值,于是自然而然就相当于中间值的点运算。

K = 1 s π σ K=\frac{1}{\sqrt{s\pi}\sigma} K=sπ σ1,则高斯函数为,

h ( r ) = 1 s π σ e − r 2 2 σ 2 h(r) = \frac{1}{\sqrt{s\pi}\sigma}e^{-\frac{r^2}{2\sigma ^2}} h(r)=sπ σ1e2σ2r2

对于卷积核大小为 k = 3 , σ = 0.8 k=3,\sigma=0.8 k=3,σ=0.8的高斯核为:

在这里插入图片描述

高斯核主要用来对图像做平滑。

1.2 示例

OpenCV中有GaussianBlurAPI函数,调用时只需给出kernel sizesigma即可。

cv::Mat dst;
cv::GaussianBlur(img, dst, cv::Size(7, 7), 0.9);
cv::imshow("Before Gaussian Blur", img);
cv::imshow("After Gaussian Blur", dst);
cv::waitKey(0);

在这里插入图片描述

上图中,可以看到平滑后红框中的帽子边沿变模糊了。

2.双边滤波(Bilateral Filter)

2.1 理论基础

第一部分介绍的高斯滤波在对图像进行平滑操时,对所有的像素都是无差别的使用同个高斯核进行计算的,这会导致对图像中物体边缘也进行平滑,使图像变的模糊。

为了解决高斯滤波会导致边缘模糊的问题,不仅需要考虑像素之间的空间关系,还需要考虑卷积核范围内的像素值间的变化大小。对像素值变化大的位置,考虑有可能是边缘,增大该位置的权重。

回顾一下,高斯模糊的公式为:

在这里插入图片描述

其中 G B [ I ] p GB[I]_p GB[I]p表示的是像素 p p p位置处Gaussian Blur后的结果, S S S表示的高斯核, q q q表示的是高斯核所覆盖的函数, G σ G_\sigma Gσ表示的是高斯函数, I q I_q Iq表示的是位置 q q q处的像素值。

双边滤波算法Bilateral Filter不仅考虑了位置,还考虑了像素值的变化,因此双边滤波的公式为:

在这里插入图片描述

其中 G F [ I ] p GF[I]_p GF[I]p表示的是像素位置 p p pBilateral Filter后的结果, G σ r G_{\sigma_r} Gσr是定义在像素差值上的高斯函数。

在这里插入图片描述

上面这幅图中, ( a ) (a) (a)表示的是一幅有边缘的图像像素值变化,图 ( b ) (b) (b)表示的是一个23x23的双边滤波的核,图 ( c ) (c) (c)表示的是对 ( a ) (a) (a)使用双边滤波后得到的结果,可以看到有效的对图像进行了平滑,并保留了边缘信息。

2.2 OpenCV bilateralFilter函数

cv::Mat dstb, dstg;
cv::GaussianBlur(img, dstg, cv::Size(3,3), 0.8);
cv::bilateralFilter(img, dstb, -1, 75, 0.8);
cv::imshow("Origin", img);
cv::imshow("After Gaussian Blur", dstg);
cv::imshow("After Bilateral Filter", dstb);
cv::waitKey(0);

效果对比如下:

在这里插入图片描述

点开图像看原图,在图中红色框出的部分,能够看到双边滤波在平滑的同时还有非常好的保边能力。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值