halcon5:var_threshold函数
halcon5:var_threshold函数
(1)参数说明:
var threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark:)
①Image:输入图像;
②MaskWidth, MaskHeight:是用于滤波平滑的掩膜单元
③StdDevscale:是标准差乘数因子(简称标准差因子) ;
④AbsThreshold:是设定的绝对阈值;
⑤LightDark:有4个值可选:' light'、' dark'' equal'、' not equal'。
(2)应用举例:
var threshold (Image, Region, 4, 4, 0.2, 12, 'dark' )
在该程序中,先用4x4的掩膜在图像上逐像素游走,用原图中的当前像素和对应掩膜中16个像素的灰度均值对比,找出暗(dark)的区域。当原图像素灰度比对应的掩膜灰度均值低(0.2,12)个灰阶时,该区域被分割出来。
本程序中StdDevScale = 0.2, AbsThreshold = 12,问题的关键就是理解如何通过StdDevscale和AbsThreshold来确定用于分割的阈值。
(3)关于参数StdDevScale (标准差因子)的说明:
1、当标准差因子StdDevscale>=0时, v(x.y)取(StdDevscale x标准差)和AbsThreshold中较大的那个 ;
2、当标准差因子StdDevScale<= 0时, v(xy)取(StdDevscale x标准差)和AbsThreshold中较小的那个。
实测发现,这里的比较大小是带符号比较,由于标准差是非负数,当StdDevscale <0时,(StdDevscalex标准差) <=0恒成立,所以此时的取值就是(StdDevScale x标准差) 。
帮助文档中StdDevscale的推荐值范围是-1-1,一般通过上面的例子可知,一般的明显的黑白过度处的在50左右,StdDevScale即-50 ~50 ,50的灰度差异,对于一般分割来说足够。
标准差文档还说:推荐的值是0.2,如果参数StdDevScale太大,可能分割不出任何东西;如果参数StdDevScale太小(例如-2) ,可能会把整个图像区域全部输出,也就说达不到有效分割的目的。一般推荐使用该算子时,StdDevScale取正值。
需要强调的是:在黑白过渡处,一般掩膜覆盖的像素的标准差较大,而在其他平缓的地方,标准差较小;因此最终采用的分割值随着掩膜在不断遍历像素的过程中,在(StdDevScalex标准差)和AbsThreshold之间不断切换。
(4) var_threshold和dyn_threshold的区别和联系:
var_threshold算子和dyn_threshold算子极为类似,不同的是var threshold集成度更高,并且加入了"标准差x标准差因子"这一变量。
dyn_threshold是将原图和滤波平滑后的图对比, var_threshold是将原图和对应像素掩膜覆盖的像素的平均,灰度值对比,在算子var_threshold中,如果参数StdDevScale=0,那么就可以用动态阈值的方式非常近似地模拟,以上两种算法的效果,极为类似。
————————————————
版权声明:本文为CSDN博主「小娜美要努力努力」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39504171/article/details/95049033