bilateral_filter 双边滤波器详细用法

文章介绍了双边滤波器在图像处理中的作用,它能保边去噪,适用于皮肤美化和缺陷检测等场景。通过参数`SigmaSpatial`和`SigmaRange`控制滤波效果,多次迭代可用于精细处理。文中展示了双边滤波器对图像的逐步影响,演示了如何通过滚动滤波器进行更深入的图像平滑。
摘要由CSDN通过智能技术生成

一、双边滤波(Bilateral filter)是一种可以保边去噪的滤波器。其输出像素的值依赖于邻域像素的值的加权组合。
从效果来说,双边滤波可产生类似美肤的效果。皮肤上的皱纹和斑,与正常皮肤的差异,远小于黑白眼珠之间的差异,因此前者被平滑,而后者被保留。

bilateral_filter(Image, Image, ImageBilateral, 5, 20, 'sampling_ratio', 0.5)

原图
在这里插入图片描述
结果图
在这里插入图片描述
二、下面一个缺陷检测的实例:
原图
在这里插入图片描述
shock_filter过滤后的效果
在这里插入图片描述
这个时候看到物料齿内仍然是有干扰的。
我们希望齿内外干扰尽可能去掉,并且不要把图像高频的部分去掉(好图像边缘)。
这个需求正好适用bilateral_filter
bilateral_filter过滤之后的效果,达到我们的需求。

read_image (Image, ImageFiles[14])shock_filter(Image, SharpenedImage, 0.5, 10, 'canny', 0.8)
bilateral_filter(SharpenedImage, SharpenedImage, ImageBilateral, 9, 20, [], [])

在这里插入图片描述
三、bilateral_filter 对图像执行双边滤波
算子签名如下:
bilateral_filter(Image, ImageJoint : ImageBilateral : SigmaSpatial, SigmaRange, GenParamName, GenParamValue : )
算子描述:
bilateral_filter使用引导图像ImageJoint对输入图像执行联合双边滤波,并将结果返回imagebitral。
Image和ImageJoint必须具有相同的大小和类型。
SigmaSpatial定义了滤波器掩模的大小,并与常规高斯滤波器的标准差相对应。值越大,过滤器的影响范围越大,保留的细节越少。
SigmaRange用于根据当前像素周围ImageJoint的像素修改过滤器掩码。
只有具有弱边缘且对比度低于SigmaRange的区域中的像素才有助于平滑。
请注意,uint2或Real图像中的对比度可能与SigmaRange的默认值显著不同,并相应地调整参数。
GenParamName和GenParamValue当前可用于控制精度和速度之间的权衡。
四、滚动双边滤波器
双边滤波器可以迭代应用。在这种情况下,一次迭代的结果被用作下一次迭代的引导图像。这可能是有用的,例如,从原始图像中移除小结构,即使它们具有高对比度。
下面的示例显示了滚动过滤器对测试图像的效果。
在该图像中,噪声级为10个灰度值,暗区和亮区之间的对比度为100个灰度值,左亮条宽10个像素,右亮条宽40个像素。
黄线显示水平横截面的灰度值剖面。
使用的参数:ImageJoint常量,SigmaSpatial=25,SigmaRange=15。

* Apply the rolling bilateral filter
  * (use a constant guide for the first iteration).
  gen_image_proto (Image, ImageJoint, 128)
  for I := 1 to 6 by 1
    bilateral_filter (Image, ImageJoint, ImageJoint, 25, 15, [], [])
  endfor

原图
在这里插入图片描述
(1) 输入图像和(2)图像,用于滚动滤波器的第一次迭代。
在这里插入图片描述
第一次迭代后的结果:删除较小的条。
在这里插入图片描述
第三次迭代后的结果:右侧条的边缘部分恢复
在这里插入图片描述
第六次迭代后的结果:右侧条的边缘完全恢复。
四、双边滤波实际迭代案例

read_image (Image, 'mreut')* Edge-preserving smoothing
bilateral_filter (Image, Image, ImageBilateral, 5, 20, [], [])* Rolling filter (5 iterations)
gen_image_proto (Image, ImageJoint1, 0)for I := 1 to 5 by 1
  bilateral_filter (Image, ImageJoint1, ImageJoint1, 5, 20, [], [])
endfor

原图
在这里插入图片描述
迭代2次的效果
在这里插入图片描述
迭代5次的效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值