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函数介绍
局部滤波掩模的例子依赖于ImageJoint:
Left:在均匀区域,滤波掩模几乎是高斯的。
Center:过滤器掩模沿直线。这意味着,只有暗像素被平滑,边缘被保留。
Right:滤镜遮罩类似于角。请注意,过滤器蒙版在阴影中扩展到具有相似灰度值的区域。
如果Image和ImageJoint是相同的,则bilateral_filter的行为类似于保存边缘的平滑,
其中SigmaSpatial定义了过滤器掩模的大小。
将对比度明显大于SigmaRange的边缘像素保留下来,而对均匀区域的像素进行平滑处理。
工业视觉halcon bilateral_filter函数介绍
(1) Image与(2)ImageJoint是相同的。这就导致了(3)图像的双边保持平滑。
如果图像和ImageJoint不同,则使用受ImageJoint影响的滤波掩模对图像的每个像素进行平滑处理。
在ImageJoint边缘较强且对比度明显大于SigmaRange的位置,对像素进行平滑处理,使其小于均匀区域中的像素。
工业视觉halcon bilateral_filter函数介绍
(1) Image和(2)ImageJoint是不同的。(3) ImageBilateral:只有ImageJoint有边的地方才保留边。
如果ImageJoint是常量,则bilateral_filter等价于带有SigmaSpatial的高斯平滑(参见gauss_filter或smooth_image)。
工业视觉halcon bilateral_filter函数介绍
(1)图像。(2) ImageJoint为常数。(3)图像经过高斯平滑后,双边图像等于图像。
平滑参数的影响
下面的例子显示了SigmaRange对人工图像的影响。
在这幅图像中,噪声等级为10个灰度值,左边缘对比度为50个灰度值,
右边缘对比度为100个灰度值。
黄线表示水平截面的灰度剖面。
工业视觉halcon bilateral_filter函数介绍
原始图像具有叠加的灰度轮廓,用作Image和ImageJoint的拼接。
工业视觉halcon bilateral_filter函数介绍
SigmaRange = 1时的滤波结果:
没有效果,因为SigmaRange低于噪声水平。
因此,将噪声作为边缘处理并保留。
工业视觉halcon bilateral_filter函数介绍
SigmaRange = 25的滤波结果:平滑了噪声,保留了边缘。
工业视觉halcon bilateral_filter函数介绍
SigmaRange = 50的滤波结果:较弱的边缘被平滑,较强的边缘被保留。
工业视觉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函数介绍
(1)输入Image和(2)ImageJoint用于滚动滤波器的第一次迭代。
工业视觉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
|