阈值分割主要用于对图像按照相同集合的灰度值提取成多个区域,该算法也是blob提取用到的核心算法。
根据应用场景和不同图像的效果,分为全局阈值和局部阈值。
threshold 是全局阈值,不管你图像是怎么样的,都是全局分割,当然你也可以使用灰度直方图工具去自动计算范围进行分割;
其中,bin_threshold 是自动全局阈值,要求图像前景和背景图像差异明显,灰度直方图呈现明显的两个波峰,一个是目标一个是背景,即可自动计算峰谷提取区域;
在halcon 12版本已经升级为binary_threshold可以自由筛选白色的还是黑色的区域(包含halcon 13.0 );
- read_image (Image, 'fin2')
- bin_threshold (Image, Region)
复制代码 这样,背景和目标就可以自动的明确的区分出来了。
而dyn_threshold和var_threshold都是局部阈值,它的输入图像是经过高斯滤波以后的图像,通过原始图像和滤波后图像的对比度进行匹配找出目标。用在背景不怎么均匀的图像上面。var_threshold还通过标准偏差来分析图像,具体请参考《HALCON工业应用实用教程》第二册第8.1.4章。
- read_image (Image, 'alpha1')
- median_image (Image, ImageMedian, 'circle', 10.5, 'mirrored')
- dyn_threshold (Image, ImageMedian, RegionDynThresh, 15, 'dark')
复制代码
原图:
效果图:
缺陷检测常用dyn_threshold和var_threshold算子,但是var_threshold比dyn_thrshold执行时间更长。
最后一个更简单, auto_threshold 根据灰度直方图,提取峰谷(经过高斯滤波平滑后的图像的灰度直方图),然后把按照峰谷分割图像,一个峰属于一个区域,这样会划分很多个区域。
|