本文最后更新于:2024年5月7日 下午
之前我们介绍了 双边滤波 的原理,本文记录在双边滤波基础上简单封装的常见应用 —— 联合双边滤波。
简介
双边滤波(bilateral filter, BF)的思想是利用当前图像的纹理信息结合高斯滤波核为每个像素提供单独的平滑滤波器,以达到在保留图像边缘的同时执行平滑操作。
如果我们需要用其他图像的边缘纹理信息来平滑当前图像时,BF 就不能直接用了,在这种场景下,其实原理是一样的,只是计算像素权重那一步使用的图像不是当前图像,这种应用场景的双边滤波叫做 联合双边滤波 (Joint Bilateral Filter, LBF)
原理
当前待处理的图像 $I$, 用于提供纹理信息的向导图 $ \tilde{I}$ , 二者具有相同尺寸。
- BF 的计算过程:
$p$ 为待计算的像素位置,$q$ 为邻域像素位置, $\Omega$ 为 $p$ 周围的邻域范围,$f$ 为高斯权重计算函数,$g$ 为颜色差异权重计算函数,注意 BF 中计算颜色差异权重时使用的是待处理图像 $I$.
- JBF 计算过程:
实现
在opencv的contrib模块中,也提供了联合双边滤波的API:jointBilateralFilter(引导图,待滤波的图,滤波后的图,像素邻域直径,灰度域sigma,空间域sigma)。
C++
1 |
|
Python
Python opencv 暂不支持导向滤波, 在 opencv-contrib-python
包的 ximgproc
模块提供了 JBF。
1 |
|
- 示例代码
1 |
|
Halcon
Halcon 中 bilateral_filter 算子天然支持 JBF,为啥呢,Joint BF 不是用别的图的梯度信息的吗? 但是当这张图就是自己的话 JBF 就可以退化成 BF。
1 |
|
- 示例代码
1 |
|
效果示例
测试图像:
引导图像:
效果图:
参考资料
- https://www.zywvvd.com/notes/study/image-processing/bilateral-filter/bilateral-filter/
- https://blog.csdn.net/panda1234lee/article/details/52839205
- https://blog.csdn.net/flow_specter/article/details/107557303
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付