Halcon算子threshold、dyn_threshold、binary_threshold、auto_threshold、fast_threshold、var_threshold

一、threshold 全局阈值

threshold(Image : Region : MinGray, MaxGray : )  对应参数分别为输入图像、输出区域、阈值下限、阈值上限

使用全局阈值分割图像,阈值选择输入图像中灰度值g满足以下条件的像素:

图像中所有满足条件的点会被作为一个整体区域被返回,对于矢量图像,阈值不是对应于灰度值,而是对应于矢量的长度。

注意点:MaxGray >= MinGray,MaxGray和MinGray的值可以是浮点类型也可以是整数类型,如果图像是整数类型的,MaxGray和MinGray的值类型应当为整数类型,如果是浮点类型,小数部分会被舍弃;

 

二、dyn_threshold 局部阈值

dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) 对应参数分别为原始图像、阈值图像、输出区域、偏移量、输出类型

使用局部阈值分割图像,dyn_threshold从输入图像中选择满足条件的区域方法如下:

注意:g0是原始图片,gt是阈值图片,通常,阈值图像是原始图像的平滑版本,可以利用 mean_image, binomial_filter, gauss_filter等来创建阈值图片;

当LightDark = 'light' 时 g0 >= gt+Offset;

当LightDark = 'dark' 时 g0 <= gt-Offset;

当LightDark = 'equal' 时 gt-Offset <= g0 <= gt+Offset;

当LightDark = 'not_equal' 时 gt+Offset < g0 或者 g0 < gt-Offset;

 

利用dyn_threshold可以提取目标图片的轮廓,如下图

代码如下:

read_image (Image2, 'C:/Users/Administrator/Desktop/2注册图片.bmp')
draw_rectangle1 (200000, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image2, Rectangle, ImageReduced)
mean_image (ImageReduced, ImageMean, 3, 3)
dyn_threshold (ImageReduced, ImageMean, RegionDynThresh, 10, 'light')

MaskSize尺寸越大,发现的区域就越大,一般,MaskSize的大小应该是被提取对象直径的两倍,如下图:

代码如下:

read_image (Image2, 'C:/Users/Administrator/Desktop/2注册图片.bmp')
draw_rectangle1 (200000, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image2, Rectangle, ImageReduced)
mean_image (ImageReduced, ImageMean, 10,10)
dyn_threshold (ImageReduced, ImageMean, RegionDynThresh,5, 'light')

注意:offset不应该设置成0,如果设置成0会有很多干扰会被一起提取出来,建议值应该是5到40,offset越大,被提取的区域就会越小,超过60可能就发现不了任何点了,整个函数的返回就是一个空区域;

 

三、bin_threshold 

bin_threshold(Image : Region : : )对应参数为输入图像和输出区域

使用自动确定的阈值分割图像,bin_threshold已经过时,只是为了向后兼容而提供的,新的应用程序应该使用binary_threshold来替代;

bin_threshold使用自动确定的阈值分割单通道的灰度图像,首先,输入图像的相对直方图是确定的,然后,从直方图中提取相关的最小值,作为阈值操作的参数,为了减少最小值的数量,对直方图进行高斯平滑处理,掩模的大小被放大,直到平滑直方图中只有一个最小值

 

 

四、binary_threshold 二值阈值

binary_threshold(Image : Region : Method, LightDark : UsedThreshold)对应参数分别为输入图像、输出区域、使用方法、选择前景还是背景、输出使用的阈值

使用二值阈值分割图像,binary_threshold使用自动确定的全局阈值分割单通道图像,并在region中返回分割后的区域,分割所使用的阈值由method中给出的方法确定,非常适用于在均匀照明的背景下分割字符;

目前,method总共提供两种方法:'max_separability' 和 'smooth_histo',这两种方法都只能用于具有双峰直方图的图像

 'smooth_histo' 方法和bin_threshold的功能一致,可以参考bin_threshold的分割过程;

'max_separability' 方法是靠UsedThreshold来决定最小阈值的,速度比'smooth_histo'要快,对于干扰也不是那么敏感;

 

五、auto_theshold 直方图阈值

auto_threshold(Image : Regions : Sigma : ) 对应参数分别为输入图像、输出区域、高斯参数

利用直方图确定的阈值分割图像,通过多阈值分割单通道图像,会返回多个区域;首先输入图像的绝对直方图的灰度值是确定的,然后高斯平滑(Sigma)后从直方图中提取相关的最小值,Sigma越大,提取的区域就越小;

代码如下:

read_image (Image2, 'C:/Users/Administrator/Desktop/2注册图片.bmp')
draw_rectangle1 (200000, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image2, Rectangle, ImageReduced)
median_image (ImageReduced, ImageMedian, 'circle', 5, 'mirrored')  为了过滤干扰因素,不进行过滤的话,会返回很多个干扰区域;
auto_threshold (ImageMedian, Regions, 5)

 

六、fast_threshod 全局阈值

fast_threshold(Image : Region : MinGray, MaxGray, MinSize : ) 对应参数分别为输入图像、输出区域、阈值下限、阈值上限、处理参数

基于全局阈值的图像快速阈值化,fast_threshold从输入图像中选择灰度值g满足以下条件的像素:

此方法为了节约处理时间,分成两步去阈值图像,第一步是通过MinSize的值来先处理行列间隔为Minsize的所有像素点,第二步是再处理邻域(size (2*MinSize+1) x (2*MinSize+1))的所有点;

对于不需要深入研究的人,在理解MinSize的时候,可以直接理解为就是一个加速参数,把图像分成两块来分别处理,MinSize决定了两块的比例;

虽然Fast_threshold已经分了两步去处理,但是由于多核计算机支持SSE2指令集的,所以再多核计算机上threshold的速度是大于fast_threshold的,基本上fast_threshold主要用于嵌入式系统中,速度才会快于threshold;

测试速度:

代码如下:处理一幅大图时

没有循环的情况下,只执行一遍,fast_threshold的MinSize=1,执行时间如下:

没有循环的情况下,只执行一遍,fast_threshold的MinSize=200,执行时间如下:

把fast_threshold更换成threshold (ImageReduced, Region,20, 255),执行时间如下:

注意:只是简单论证两种方式的时间,不够严谨性,如需要大量验证,必须保证条件的一致性,以及执行的次数够过才行;

 

七、var_threshold 

var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )
分别对应于参数

输入图像、输出区域、掩膜宽度、掩膜高度、灰度值的标准差因子、与平均值的最小灰度差值、阈值类型

在不均匀的,嘈杂的,或不均匀照明的背景上分割区域是比较合适的;

通过局部均值和标准差分析阈值图像,主要通过以下几个条件来选择像素:

1、提取像素的局部灰度值是亮的还是暗的,也就是提取前景还是背景,取决于参数LightDark;

2、MaskWidth和MaskHeight如下图,其他参数相同的情况下,(1)是原始图片,(2)是MaskWidth和MaskHeight等于12,(3)是MaskWidth和MaskHeight等于3,(4)是MaskWidth和MaskHeight等于40

因此MaskWidth和MaskHeight的最小值应该要大于等于3,值3可以被认为是最小的敏感值;

3、如果StdDevScale是正值,那么像素灰度值需要具有较高的标准偏差(不均匀的图像);如果StdDevScale是负值,那么像素灰度值需要具有较低的标准偏差(均匀的图像);StdDevScale 局部标准差被用来衡量图像中的噪声,标准差可以通过StdDevScale进行缩放(最后一张图体现了缩放的意义),以反映所需的灵敏度,较高的值意味着只选择与周围环境非常不同的像素,建议值是在-1.0到1.0之间,0.2是建议值,如下图:

图(1)是StdDevScale的值过于小,导致很多像素没有被选中,图(2)是值过大,导致不需要的像素值被选中;

 

4、AbsThreshold 在均匀的图像中,标准差较低;因此,单个灰度值的影响较大,为了减小算子的灵敏度,需要调整AbsThreshold的值,这样单个灰度值的变化就可以被忽略;

值得注意的是,如果StdDevScale是负值,AbsThreshold也应该选择为负值,因为标准差比较低,在介绍StdDevScale时有提到;

 

补充:标准差可以通过StdDevScale进行缩放

结果灰度值GrayValues,经过StdDev的值来放大,主要在平均灰度值Mean的基础上,从而拉大灰度值的差距,提高对比来选出需要的区域

 

总结:

1、使用最多的基本就是threshold、dyn_threshold、binary_threshold和var_threshold;

2、正常干扰不多的情况下直接用threshold即可;

3、复杂情况根据具体需要选择dyn_threshold、binary_threshold、var_threshold;

 

 

 

  • 7
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无锡伶俐科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值