QQ登录

只需一步,快速开始

工业视觉halcon bilateral_filter函数介绍

[ 复制链接 ]
bilateral_filter(Image, ImageJoint : ImageBilateral : SigmaSpatial, SigmaRange, GenParamName, GenParamValue : )
bilateral_filter使用制导图像ImageJoint对输入图像Image进行联合双边滤波,
并在ImageBilateral中返回结果。
Image和ImageJoint必须具有相同的大小和类型。


SigmaSpatial定义了滤波器掩模的大小,并与传统高斯滤波器的标准偏差相对应。
数值越大,滤波器的影响面积越大,保留的细节越少。


SigmaRange用于根据当前像素周围ImageJoint的像素修改过滤器掩码。
只有在边缘较弱的区域,对比度低于SigmaRange的像素才有助于平滑。
请注意,uint2或real图像中的对比度可能与SigmaRange的默认值有显著差异,并相应地调整参数。


GenParamName和GenParamValue目前可以用来控制精度和速度之间的权衡(见下文)。


图像Image的每个像素都使用依赖于ImageJoint的过滤器掩码进行过滤。
该滤波掩模结合了一个依赖于SigmaSpatial的高斯贴近函数和一个依赖于SigmaRange的加权灰度值差异的高斯相似函数。

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

局部滤波掩模的例子依赖于ImageJoint:
Left:在均匀区域,滤波掩模几乎是高斯的。
Center:过滤器掩模沿直线。这意味着,只有暗像素被平滑,边缘被保留。
Right:滤镜遮罩类似于角。请注意,过滤器蒙版在阴影中扩展到具有相似灰度值的区域。




如果Image和ImageJoint是相同的,则bilateral_filter的行为类似于保存边缘的平滑,
其中SigmaSpatial定义了过滤器掩模的大小。
将对比度明显大于SigmaRange的边缘像素保留下来,而对均匀区域的像素进行平滑处理。

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

(1) Image与(2)ImageJoint是相同的。这就导致了(3)图像的双边保持平滑。




如果图像和ImageJoint不同,则使用受ImageJoint影响的滤波掩模对图像的每个像素进行平滑处理。
在ImageJoint边缘较强且对比度明显大于SigmaRange的位置,对像素进行平滑处理,使其小于均匀区域中的像素。

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

(1) Image和(2)ImageJoint是不同的。(3) ImageBilateral:只有ImageJoint有边的地方才保留边。


如果ImageJoint是常量,则bilateral_filter等价于带有SigmaSpatial的高斯平滑(参见gauss_filter或smooth_image)。

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

(1)图像。(2) ImageJoint为常数。(3)图像经过高斯平滑后,双边图像等于图像。


平滑参数的影响
下面的例子显示了SigmaRange对人工图像的影响。
在这幅图像中,噪声等级为10个灰度值,左边缘对比度为50个灰度值,
右边缘对比度为100个灰度值。
黄线表示水平截面的灰度剖面。

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

原始图像具有叠加的灰度轮廓,用作Image和ImageJoint的拼接。


工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

SigmaRange = 1时的滤波结果:
没有效果,因为SigmaRange低于噪声水平。
因此,将噪声作为边缘处理并保留。


工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

SigmaRange = 25的滤波结果:平滑了噪声,保留了边缘。

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

SigmaRange = 50的滤波结果:较弱的边缘被平滑,较强的边缘被保留。

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

使用SigmaRange = 100过滤结果:两边都被平滑。




Generic Parameters
GenParamName有以下参数可选使用
sampling_method
在默认情况下,bilateral_filter使用双边过滤器的近似,它只使用采样点的子集来计算局部过滤器掩码。

通过设置“sampling_method”,可以选择使用的近似。可能的值是:

'grid' (default)
使用规则网格对筛选器掩码进行子采样。

“poisson_disk”

使用泊松磁盘抽样。这种方法比“grid”慢,但是可能产生更少的人为干扰。

“exact”

使用所有可用的点。这个方法是最慢的,但却是最准确的。如果使用“precise”,则忽略“sampling_ratio”。


sampling_ratio
控制用于局部滤波器掩码的子采样的点的数量。

通过将“sampling_ratio”设置为1.0,可以使用精确的方法。使用较低的采样率会导致更快的滤波,但也会导致稍微不准确的结果。

建议值:0.25、0.5、0.75、1.0

默认值:0.50






迭代平滑:
可以迭代地应用bilateral_filter。
在这情况下,一个迭代的结果用作下一个迭代的指导图像。
这可以很有用,例如,从原来的图像删除小结构,即使他们有高对比度。


下面的例子显示了滚动过滤器对人工图像的影响。
在这张图中,噪声等级为10个灰度值,暗区和亮区之间的对比度为100个灰度值,
左边的亮条宽为10个像素,右边的宽为40个像素。
黄线表示水平截面的灰度剖面。
使用参数:图像关节常数,SigmaSpatial = 25, SigmaRange = 15
  * (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

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

(1)输入Image和(2)ImageJoint用于滚动滤波器的第一次迭代。

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

第一次迭代后的结果:删除较小的条。

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

第三次迭代后,右栏边缘部分恢复。

工业视觉halcon bilateral_filter函数介绍

工业视觉halcon bilateral_filter函数介绍

第六次迭代后,右栏边缘完全恢复。、
例程:
read_image (Image, 'mreut')
bilateral_filter (Image, Image, ImageBilateral, 5, 20, [], [])
gen_image_proto (Image, ImageJoint, 0)
for I := 1 to 5 by 1
  bilateral_filter (Image, ImageJoint, ImageJoint, 5, 20, [], [])
endfor
  

halcon从自学到接项目视频教程,另外再赠送全网最全资源  

  

欢迎围观我录制的一套halcon自学视频教程(进入)



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索