图像二值化的目的概括来说就是将感兴趣区域与背景分离出来,从而便于图像的进一步处理。除了常规阈值分割算子threshold,下面介绍一些halcon中另一些常用的图像阈值分割算子:
- dyn_threshold— 使用动态阈值分割(一般在缺陷检测的时候使用)
描述 :当前背景之间差异明显时,可以设定全局阈值进行threshold,但很多情况下由于背景不均一,目标体经常表现为比背景局部亮一些或暗一些,无法通过标准阈值进行分割操作,这时需要通过其邻域找到一个合适的阈值进行分割,
如图:由于图像的灰度值变化不均一,没法通过固定阈值(蓝色线)提取到我们想要的山顶部分(感兴趣区域),因为阈值设的高会遗漏我们想要的阈值低的区域;阈值设的低又得到太多的干扰区域。这时候可以考虑使用动态阈值分割对其进行提取。
函数:dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )
参数:
OrigImage(in):需要进行阈值分割的原始图像
ThresholdImage (in):在实际使用过程中通常都是对原图像OrigImage进行一次平滑处理(mean_image/gauss_image/binomial_filter等),然后用平滑处理之后得到的图像作为参考图像
RegionDynThresh(out):对原图进行阈值分割后输出图像
Offset(in):是一个阈值调节值,设定邻域比较的区间范围,灰度值变化在offset范围内均是可以接受的。
LightDark(in) :dark’, ‘light’, ‘equal’, ‘not_equal’一共有4种选择,这是原图相对于ThresholdImage 而言的,如果‘light’,则提取原图相对于参考图中亮一些的部分,提取的范围由Offset参数确定。
处理步骤一般使用动态阈值分割时,先将图像做一下均值滤波,然后将原图(灰度值黑色线)与均值滤波后的图像(灰度值绿色线)作差,最后在对面积进行一下筛选,这样就可以得到我们想要的红色区域部分了。
但是,均值滤波图像时,选择的参数也需要根据图像的灰度值变化程度来看,就上面图像来看,如果均值滤波图像时参数过小,可能滤波之后的图像灰度值变化会变成下面的情况(黄色),导致提取山顶部分的效果也不会太好。