文章目录
- 一、基本概念
- 二、实例解析
一、基本概念
基于局部阈值分割的dyn_threshold()
算子,适用于一些无法用单一灰度进行分割的情况,如背景比较复杂,有的部分比前景目标亮,或者有的部分比前景目标暗;又比如前景目标包含许多杂乱的灰度,从而无法是用全局阈值完成分割。
此时,该算子可以利用邻域,通过局部灰度对比,找到一个合适的阈值进行分割。
dyn_threshold
算子的使用一般分为三步:
(1)读取图像
(2)使用平滑滤波器对原始图像进行适当平滑。
(3)使用算子比较原始图像与均值图像处理后的图像局部像素差异,将差异大于设定的值的点提取出来。
下面,会用代码实例来为大家演示。
算子的解释:
* 均值滤波平滑图像,30,30是横向与纵向的调整参数
mean_image(GrayImage, ImageMean, 30, 30)
* 最后一个参数有三种选择,分别是'dark' 'light' 'not_equal'
* 30的意思就是,把某像素周围灰度差异超过30的挑出来。
* 该值越小,提取出的信息越多,反之越大。
dyn_threshold(GrayImage, ImageMean, RegionDynThresh, 30, 'not_equal')
二、实例解析
原图是这样的:
这幅图片字体部分与前景部分灰度差异不大, 而且噪声干扰较大,因此使用局部阈值分割是比较合适的。
使用均值滤波对图像进行平滑处理。
再进行一个开运算,去除一下噪点,就可以把图像中的字体提取出来了。
read_image (Text, 'Z:/学习studying——————学习/Halcon自己练习/data/text.jpg')
rgb1_to_gray (Text, GrayImage)
mult_image (GrayImage, GrayImage, ImageResult, 0.005, 0)
mean_image (ImageResult, ImageMean, 50, 50)
dyn_threshold (ImageResult, ImageMean, RegionDynThresh, 5, 'dark')
opening_circle (RegionDynThresh, RegionOpening, 1.5)
* 显示
dev_clear_window ()
dev_display (RegionOpening)
提取出来的图像如下所示:
加油,努力工作!!!出人头地。
2023年10月2日晚